首页 > 代码库 > BLE4.0 学历笔记1之串口体验

BLE4.0 学历笔记1之串口体验

  PS:这篇文章记录笔者TI ble协议栈的学习串口的笔记。

  前些日子CC2540模块没到,就捣鼓CC2530。深深的感受到,ZigBee就是个坑啊。然后果断玩BLE了。BLE,TI的栈给的文档,project这回看起来好点,然后找了其他一些资料。这里介绍《蓝牙4.0BLE开发完全手册-物联网开发技术实战》。看起来还行吧。不过我照着他的串口例子做,没看到效果(可能是协议栈版本问题)。于是,一怒之下,自己啃。

  最后再说一下,CC2530和CC2540除了RF不同外,51内核是一样的。因为栈中使用的HAL是一样的。

  说下自己的装备。如下图。手焊跳线o(∩_∩)o。主要可以用的IO有串口0,定时器1的通道0~3,定时器的IO映射到了位置2。和两个按键。

  先来看看HAL都给了啥。我个人认为key、led、lcd就是多余的。这个硬件相关性实在是太强了。所以先从串口开始看起,我想各位看官的串口也都在位置1吧。

HAL里面默认串口使用的DMA。这个就不管它了。我建议先简单的看下APP Group下面的几个c文件。和OSAL.C中的osal_init_system和osal_run_system两个函数,其它最好也浏览一下。在开始写我们自己的串口函数前先看看项目的配置情况。请注意下,函数中用很多预编译,看的时候仔细点。

左上角,选择CC2540,关掉POWER_SAVING,在defined symbols中的POWER_SAVING前面加个x就可以了。关于POWER_SAVING,在函数osal_run_system中可以看到,这里我们x掉,不然编译会出现一个警告,说什么串口和key的中断被重复的啥啥啥的。至于LCD,因为我的板是没用LCD的干脆也x了。

  现在开始来看看怎么来串口打印出信息来。找到SimpleBLEPeripheral.c中的SimpleBLEPeripheral_Init函数,添加如下代码,注意{}中才是我添加的。另外要添加hal_uart.h这个头文件。

 1 void SimpleBLEPeripheral_Init( uint8 task_id ) 2 { 3   simpleBLEPeripheral_TaskID = task_id; 4  5     {    //add 6         halUARTCfg_t halUARTCfg; 7         halUARTCfg.configured            =    TRUE; 8         halUARTCfg.baudRate                = HAL_UART_BR_115200; 9         halUARTCfg.flowControl        =    HAL_UART_FLOW_OFF;10         11         HalUARTOpen(HAL_UART_PORT_0, &halUARTCfg);12         HalUARTWrite(HAL_UART_PORT_0, "Hello CC2540!\n", 14);13     }
添加串口

来看看串口配置这个结构体。注意到,这个结构体是没有关于配置停止位,校验位的。也就是全是默认。其他没用到的先不理会是用来干嘛的。

 1 typedef struct 2 { 3   bool                configured; 4   uint8               baudRate; 5   bool                flowControl; 6   uint16              flowControlThreshold; 7   uint8               idleTimeout; 8   halUARTBufControl_t rx; 9   halUARTBufControl_t tx;10   bool                intEnable;11   uint32              rxChRvdTime;12   halUARTCBack_t      callBackFunc;    //回调函数13 }halUARTCfg_t;
halUARTCfg_t

顺便吐槽一下,TI给的HAL api文档里面关于串口的宏定义有错,所以还是看源码靠谱点。

到这里,编译烧录,应该就可以看到串口出来的信息了。附图,注意一下右边的配置情况。


华丽的分割线