由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(4)
本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。教程共分为六部分,本文为第四部分:
第四部分知识点:
第十六节 协议栈LED实验
第十七节 协议栈LCD显示
第十八节 协议栈UART实验
第十九节 协议栈五向按键
第二十节 协议栈Flash数据存储
有关TI 的CC254x芯片介绍,可点击下面链接查看:
主流蓝牙BLE控制芯片详解(1):TI CC2540
同系列资料推荐:
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1)
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2)
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)
有关本文的工具下载,大家可以到以下这个地址:
朱兆祺ForARM
第十六节 协议栈LED实验
TI的协议栈中在HAL层已经有了LED的驱动,我们只需要针对我们的开发板进行配置即可,我们的开发板有两个LED,分别对应P1.0和P1.1。这个在裸机开发的时候已经介绍了。
为了保持协议栈原有的代码不变,我们在BLE-CC254x-1.4.0\Components\hal\target目录下新建一个文件夹,使它适应我们的开发板。
打开LED实验工程LEDExample,选择MT254xboard,并且在工程配置中要定义HAL_LED=TRUE,下载到开发板运行,可以看到两个LED同时在闪烁。
那我们的实现代码在哪里呢?其实在协议栈中实现这个很简单,在启动事件中我们调用了一个HalLedSet函数,并且设置了两个LED同时闪烁。
就是这么简单,协议栈已经把其它事情做好了,只需要我们调用设置函数即可。设置的模式总共有5种。
#define HAL_LED_MODE_OFF 0x00 // 关闭LED
#define HAL_LED_MODE_ON 0x01 // 打开LED
#define HAL_LED_MODE_BLINK 0x02 // 闪烁一次
#define HAL_LED_MODE_FLASH 0x04 // 不断的闪烁,最多255次
#define HAL_LED_MODE_TOGGLE 0x08 // 翻转LED状态
为了适应不同的需求,我们可能需要更改LED的输出引脚,如图板级配置在hal_board_cfg.h文件中。
这里我们的开发板只有两个LED,所以我们在这里根据开发板的实际情况修改相应的IO口。
第十七节 协议栈LCD显示实验
打开LCD12864的实验工程,一样的在工程配置中打开LCD,选择MT254xboard然后直接编译下载,我们可以看到LCD上已经有显示了。
这些显示来自哪里呢?
在初始化函数中可以看到图中的函数调用,这里是将字符串显示到LCD的第一行。
在事件回调函数中可以看到这里将本机地址显示到第二行,将字符串IniTIalized显示到第三行,但是为什么我们在第三行没有看到这行字符串呢?而显示的字符串是Advertising ,这是因为系统启动后运行非常快,在我们还没反应过来的时候已经进入了广播状态,并且将原来的字符串覆盖了,所以我们最后只能看到Advertising 了。
HalLcdWriteString是将第一个参数指向的字符串显示到第二个参数指定第几行中,例如我们需要在第5行显示系统启动信息,我们可以在启动事件中,添加如下代码。
这里我们来介绍一下Lcd驱动的实现,在Hal_lcd.h文件中申明了以下函数,这些函数的功能都有英文注释,这里我就不再累述了。
/*
* Initialize LCD Service
*/
extern void HalLcdInit(void);
/*
* Write a string to the LCD
*/
extern void HalLcdWriteString ( char *str, uint8 option);
/*
* Write a value to the LCD
*/
extern void HalLcdWriteValue ( uint32 value, const uint8 radix, uint8 option);
/*
* Write a value to the LCD
*/
extern void HalLcdWriteScreen( char *line1, char *line2 );
/*
* Write a string followed by a value to the LCD
*/
extern void HalLcdWriteStringValue( char *title, uint16 value, uint8 format, uint8 line );
/*
* Write a string followed by 2 values to the LCD
*/
extern void HalLcdWriteStringValueValue( char *title, uint16 value1, uint8 format1, uint16 value2, uint8 format2, uint8 line );
/*
* Write a percentage bar to the LCD
*/
extern void HalLcdDisplayPercentBar( char *title, uint8 value );
协议栈中很多地方都调用了这些函数,我们如果要使我们的硬件能够兼容协议栈,被协议栈使用,就需要实现这些函数的定义,当然,为了适应我们的开发板,我已经实现了这些函数
- 主流蓝牙BLE控制芯片详解(3):创杰 IS1685S(07-18)
- 苹果光环加持,蓝牙Beacon技术成室内定位应用最大黑马(08-02)
- 主流蓝牙BLE控制芯片详解(4):Nordic nRF51822(07-20)
- 蓝牙BLE之室内定位iBeacon应用测验(08-02)
- 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(5)(08-02)
- 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2)(07-18)