经过“开箱初体验”之后,现在来了体验一下BLE:
打开SDK,(FR801xH-SDK)文件不多,freqchip-FR801xH-SDK-master.zip总共才24M,内容也直观:
components --------------里面包括了,ble,driver,modules,toolchain
docs-----------------------主要是:FREQ BLE SDK User Guide V1.0.pdf
examples------------------例程
tools-----------------------主要是下载工具:FR8010H_Download_Tool.exe
我的习惯,先打开一个demo: \FR801xH-SDK\FR801xH-SDK\examples\dev1.0\ble_simple_peripheral\keil\ble_simple_peripheral.uvproj,编译一下,出了点问题,竟然出错了,按理说不应该啊,第一次是用Keil4,换了一个Keil5,还是出错了,再查一下readme:
BUILDING IMAGE
KEIL V5.23 recommended
只好重新安装了一个高版本的,终于编译出来了!!!Program Size: Code=104660 RO-data=237012 RW-data=2384 ZI-data=5012
再看一下工程结构:
直观,清晰,一目了然。
main是在lib里,我们用户的入口是proj_main.c:
void user_entry_before_ble_init(void):主要是硬件初始化;
void user_entry_after_ble_init(void):主要是应用初始化;
void user_entry_after_ble_init(void)
{
co_printf("BLE Peripheral\r\n");
// User task initialization, for buttons.
user_task_init();
// Application layer initialization, can included bond manager init,
// advertising parameters init, scanning parameter init, GATT service adding, etc.
simple_peripheral_init();
}
再看下去,user_task_init();创建了二个任务:
void user_task_init(void)
{
user_task_id = os_task_create(user_task_func);
audio_task_id = os_task_create(audio_task_func);
}
一个是用户功能的任务,主要是按键处理事件;一个是音频任务,用来播放音频。
再看下一步,simple_peripheral_init();主要是初始化BLE相关,初始化外设,再打开定时,定时处理外设数据。
大致流程就这样,还是比较简单直观的。
再来看看重点,蓝牙BLE,主要是服务方面,增加了二个服务:
// Adding services to database
sp_gatt_add_service();
speaker_gatt_add_service();
看看基本的sp服务:
void sp_gatt_add_service(void)
{
simple_profile_svc.p_att_tb = simple_profile_att_table;
simple_profile_svc.att_nb = SP_IDX_NB;
simple_profile_svc.gatt_msg_handler = sp_gatt_msg_handler;
sp_svc_id = gatt_add_service(&simple_profile_svc);
}
很简单,服务属性列表,服务属性数量,消息处理;搞过BLE的来说,太简单了,这个几乎是我用所有BLE里最简单的一个,一看就懂,我就不多说了。到些,例程基本就看完了。
结论:研究了官方提供的例程,对FR801xH-SDK有了基本的了解,给我的感觉:简单,清晰,爽!
虽然开源的不多,但如果官方的lib足够稳定,那对用户来说,就是最省心的。