本帖最后由 weiwei4dk 于 2022-9-16 00:24 编辑
上次对蓝牙DEMO工程的烧录与通信作了测试,这回来分析下蓝牙工程的程序吧! 首先来看下MCU端的工程,这个相较于BLE端的工程来说,简单一些。
主程序main()里除了初始化函数外,主循环 主要完成的工作如下图
透传模式与AT模块的切换 由用户按键进行选择切换,经由串口向蓝牙核心发送AT指令进行模式配置,然后点亮相应的指令灯进行标识
上图可以看到MCU端发送到BLE端的模式切换指令格式(指令格式在 at_cmd.h 里定义)
另外也看到了上次测试0xC101 服务里读取端口状态与写端口状态的指令
在at_cmd.h里面有at指令解析用的结构体
结构体定义了指令字符串 与 对应的ID
同时在main.c中定义了一个 at指令结构体数据(如下图),用于at指令数据的解析用途
在 at_cmd_handler 函数里,对指令数据的解析方法如下,使用了memcmp 很巧秒的对接收到的数据进行对比,解析得到指令对应的ID号
AT模式的主要程序要点如上面所叙,
接着看下MCU端 串口接收数据的处理,UART3 负责MCU与蓝牙核心进行串口通信 ,uart2则负责接收外部需要透传的数据 及 将蓝牙核心发过来的透传数据发出去
UART3的数据接收和处理则需要依据当前模式进行判断
上图中AT模块接收的数据 recv_data 就是 main.c 里 at_cmd_handler 处理函数里 用到的数据啦
透传数据的接收和发送处理,则在tp_mode.c 中处理
上图 p_mode_rx_handler 函数负责将 蓝牙核心发给MCU的数据 转发至 UART2(串口终端)
上图 tp_mode_tx_handler 刚处理 从UART2接收到的数据 转发到 蓝牙核心的 工作
至此,MCU核心的数据处理流程已经清晰起来,后续需要修改功能也有了大致的方向了。后续将继续分析 蓝牙核心的工程代码,蓝牙代码较繁杂,所以下一篇可能会很啰嗦。
|