[单片机芯片] 【CH579开发板】测评二

[复制链接]
421|1
 楼主 | 2020-1-12 18:56 | 显示全部楼层 |阅读模式
本帖最后由 yinwuqing110 于 2020-1-12 19:00 编辑

      快接近放假过年了,年底公司总结报告会议一波接一波,项目也积压着诸多bug。今天周末,来体验一下沁恒微CH579开发板的蓝牙及GPIO口的操作。前面帖子中已分享如何顺利的将二进制文件烧录进开发板中,这里不再赘述。首先我们使用官方SDK包中的BLE.hex文件,路径在“..\CH579\EVT\EXAM\BLE\Peripheral\Project\obj”下,用WCHISPTool的串口方式烧写,时长22s左右,当然也可以采用USB方式,那样的速度会快些。烧录完成后,使用我们的安卓手机将官方提供的“BLEAssist.apk“蓝牙串口调试助手安装好,打开蓝牙,打开BLEAssist应用,然后会自动扫描,此时的界面如下
1.png
我们很容易搜索到CH579对应的设备名是Simple Peripheral,灵敏度-48db,然后点击设备名,建立连接关系,跳转到连接完成界面,该界面显示该设备包含的所有服务,包括“Generic Access”、“Generic Attribute”、“设备信息”和“Unknown Service”,选择透传服务的第一个Unknown Service,然后进入该服务选项,能看到如下图所示的5个服务特征值。
2.png
设备名称可以在代码中修改,修改成自定义的名称:
3.png
同样的点击设备名"WCH BLE CH579",建立连接关系,跳转到连接完成界面,从跳转后的界面中我们可以得知,第一个characteristic,即“0xFFE1”服务,该服务具有读写属性。第二个只有读的属性。第三个只有写的属性。第四个具有通知服务的属性,即主动发送数据给主机。第五个具有认证读属性,需要输入配对配对密钥才能读取,在收发界面点击读取按钮就会出现蓝牙配对界面。输入配对码默认是“000000”,选择PIN码,点击确定按钮,主机与设备进行配对,配对成功后即可操作该服务,否则不能操作或者设备断开,如下图所示:
4.png
配对成功后,读取一下接收到的数据,如下图所示,一次性接收到5个字节的数据
5.png

    接下来回想对比一下基于TI的CC2640蓝牙产品,CC2640的开发IDE是IAR工具,这里的CH579采用的是Keil for Arm工具,由于内核是使用 Cortex-M0,因此选择ARMCM0的芯片类型
KEIL中芯片型号.png
然后觉得奇怪的是,不管是Nordic的52832,还是TI的CC2640,他们都需要烧写基于蓝牙的底层协议栈,再烧写应用程序,才能正常跑起来。而沁恒微的CH579文档中并没有提及烧写蓝牙协议栈的步骤,而我实际操作也并未需要烧写蓝牙协议栈,如果说打包成静态库封装好了,那这个文件是否可更改?封装成库的源文件可以不开源,像Nordic的蓝牙芯片一样,但是用户得知道蓝牙协议栈是什么版本的,是怎么烧写到CH579芯片中的,是否支持蓝牙5.0?
      接下来我们来看看GPIO的操作,由SDK包中给出的原理图,我们可以知道底板的LED灯是三基色的,并且是低电平有效,如下图所示:
LED RGB.png
因此用户需要注意的是,在开发的工程源码中,将GPIOB口拉高函数GPIOB_SetBits( Pin )是将灯熄灭而非点亮,在peripheral_main.c文件中添加如下的代码,现象如动画所示
  1. #define TIMES        250

  2. void led_red_init(void)
  3. {
  4.                 GPIOB_ResetBits( GPIO_Pin_0 );
  5.                 GPIOB_ModeCfg( GPIO_Pin_0, GPIO_ModeOut_PP_5mA );
  6.                 GPIOB_SetBits( GPIO_Pin_1 );
  7.                 GPIOB_SetBits( GPIO_Pin_2 );
  8. }
  9. void led_green_init(void)
  10. {
  11.                 GPIOB_ResetBits( GPIO_Pin_1 );
  12.                 GPIOB_ModeCfg( GPIO_Pin_1, GPIO_ModeOut_PP_5mA );
  13.                 GPIOB_SetBits( GPIO_Pin_0 );
  14.                 GPIOB_SetBits( GPIO_Pin_2 );
  15. }
  16. void led_blue_init(void)
  17. {
  18.                 GPIOB_ResetBits( GPIO_Pin_2 );
  19.                 GPIOB_ModeCfg( GPIO_Pin_2, GPIO_ModeOut_PP_5mA );
  20.                 GPIOB_SetBits( GPIO_Pin_0 );
  21.                 GPIOB_SetBits( GPIO_Pin_1 );
  22. }
复制代码
  1. while(1)
  2. {
  3. GPIOB_SetBits( GPIO_Pin_0 );
  4. GPIOB_SetBits( GPIO_Pin_1 );
  5. GPIOB_SetBits( GPIO_Pin_2 );
  6.                 DelayMs(TIMES * 2);
  7.                 led_red_init();
  8.                 DelayMs(TIMES);
  9.                 led_green_init();
  10.                 DelayMs(TIMES);
  11.                 led_blue_init();
  12.                 GPIOB_SetBits( GPIO_Pin_0 );
  13.                 GPIOB_SetBits( GPIO_Pin_1 );
  14.                 GPIOB_SetBits( GPIO_Pin_2 );
  15.                 DelayMs(TIMES * 2);
  16.                 led_blue_init();
  17.                 DelayMs(TIMES);
  18.                 led_green_init();
  19.                 DelayMs(TIMES);
  20.                 led_red_init();
  21.                 DelayMs(TIMES);
  22.                 TMOS_SystemProcess( );
  23.         }
复制代码

炫彩三基色.gif      

从动画中我们清晰的看到段式LCD屏会有乱码数字出来,这是因为**作了GPIOB0,GPIOB1,GPIOB2,这三个管脚同时也是连接在段式LCD屏上的,如下图所示,因此产生的电平变化会显示出乱码来。此次操作体验就与大伙分享到这里,后续有时间再研究CH579的网络通讯,蓝牙低功耗,主从方面的应用。过年放假在即,预祝各位鼠年数一数二,百尺竿头,更进一步,谢谢!
段式LCD屏原理图.png




使用特权

评论回复
| 2020-1-13 09:40 | 显示全部楼层
非常感谢楼主的评测,鼠年在即,预祝楼主及各位论坛好友工作顺利,技术猛进。沁恒CH579的蓝牙是4.2版本的,5.0大概会在明年上半年完成。工程文件夹中的的CH57xBLE.lib是其蓝牙库文件,蓝牙例程中的应用程序是直接调用此蓝牙库,其库文件是不开源的。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表