正点原子蓝牙模块使用总结

前言

        开发板为正点原子探索者,蓝牙模块为正点原子的ATK-BLE02蓝牙模块

1.cubemx配置

        其中,只需要用到USART1串口打印调试信息,USART3接蓝牙模块,以及一些GPIO、时钟、中断的配置,SYS的Debug选择SW模式。

2.正点原子蓝牙模块驱动移植

        首先,正点原子提供了蓝牙模块的驱动程序,我们把它移植到cubemx生成的工程里面用就行。驱动程序包括各个AT指令的发送函数,蓝牙模块的初始化,uart3的中断处理等,其中模块初始化只要包括STA、WAKEUP、uart3引脚的配置,这些都能够在cubemx进行配置并自动完成初始化,因此删除即可。还有一些延时函数改成hal库函数即可。

        正点原子的uart3的中断处理采用的是接收中断+空闲中断,即每接收到一个数据触发中断,在中断里接收数据到缓存,并判断是否发生了空闲中断,如果发生了空闲中断,将标志位置一,然后在另一个函数里面判断接收到的字符串是否有预期的子字符串。

        在固件库版本1.26更新了以后,新增了串口空闲中断函数,这个函数可以实现不定长数据的串口接收,当产生空闲中断后,在回调函数中完成整个数据的处理即可。

3.串口接收空闲中断处理AT指令返回值

①在重新实现的HAL_UART_MspInit()函数最后开启USART3空闲中断

②每次发送AT指令前开启数据接收,HAL_UARTEx_ReceiveToIdle_IT()函数开启数据接收并等待,当接收到完整连续的一帧数据后,触发空闲中断

③在空闲中断回调函数中处理数据

        首先判断是那个串口,然后判断接收到的数据前两位是不是\r\n,因为AT指令的返回值格式一般为\r\n...\r\n,其实判不判断也无所谓。将串口接收到数据拷贝出来后清空串口缓冲区。

         拷贝出来的数据包含预期的返回值即表示AT指令发送成功。

4.使用过程遇到的问题

问题一:用usb-ttl模块配置完后,连接开发板模块工作异常,发送AT指令后没有反应

问题所在:如果不是正点原子的开发板,使用杜邦线连接蓝牙模块的话,只需要连接VCC,GND,RXD,TXD四根线即可,另外两个引脚STA和WAKEUP都悬空默认高电平(模块内部上拉)。正点原子的开发板为它们自己的模块比如蓝牙、ESP8266等设计了专有的排母,蓝牙模块直接插上就能用,因此还需要配置WAKEUP和STA的GPIO引脚,将WAKEUP对应的GPIO设置为输出并默认拉高,STA的GPIO设置为输入。不配置的话,WAKEUP引脚有可能上电默认是低电平,这样的话模块就会进入固件更新模式,无法进入工作模式。

问题二:有的指令能接收到返回值,有的接收不到

解决方案:在两条指令发送之间加一点延时,具体加多长可以测试一下

### 关于ATKBLE02与STM32的关系及兼容性 #### ATKBLE02简介 ATKBLE02是一款基于蓝牙低功耗技术的模块,通常用于物联网设备中的无线通信部分。该模块集成了蓝牙芯片以及必要的射频电路设计,能够实现数据传输、远程控制等功能。 #### STM32与ATKBLE02的关系 STM32是一系列由STMicroelectronics生产的高性能微控制器,广泛应用于嵌入式系统开发中。STM32可以通过串口或其他接口与外部模块(如ATKBLE02)连接并协同工作。具体而言,STM32负责处理核心逻辑运算和外设驱动,而ATKBLE02则专注于蓝牙通信功能[^4]。 #### 兼容性分析 1. **硬件层面** ATKBLE02提供了标准UART接口以便与其他MCU进行通信。因此,在硬件上,只要STM32具备可用的USART端口,就可以通过简单的连线实现两者之间的物理连接。需要注意的是,某些型号可能涉及电压匹配问题,需确认信号电平一致性。 2. **软件协议支持** 在软件方面,STM32需要编写相应的固件程序来解析来自ATKBLE02的数据包或者向其发送指令。利用官方提供的HAL库或LL库可以简化这一过程,因为这些库包含了丰富的API供开发者调用以管理各种外设资源[^2]。 3. **实际应用案例** 结合上述两点可以看出,当把STM32作为主控单元时,它可以很好地配合像ATKBLE02这样的专用模组一起运作。例如智能家居网关项目里,前者承担环境监测传感器读取任务并将结果经后者上传云端服务器;又或者是便携式健康追踪装置中记录用户的生理参数并通过蓝牙分享给手机客户端显示出来等等情景均十分常见[^1]。 #### 使用场景举例 - 家庭自动化控制系统:允许用户通过智能手机APP调整灯光亮度、温度设定等家居设施状态。 - 可穿戴电子设备:实时采集佩戴者的心率、步数等相关信息并向关联的应用传递反馈。 - 工业现场监控节点:周期性获取生产设备运行状况指标再借助网络转发至后台管理系统做进一步分析决策之用途。 ```c // 示例代码片段展示如何初始化USART并与BT模块交互 #include "stm32f1xx_hal.h" void UART_Init(void){ huart2.Instance = USART2; huart2.Init.BaudRate = 9600; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE ; HAL_UART_Init(&huart2); } int main(){ UART_Init(); char buffer[]="Hello BLE!"; while (1) { HAL_UART_Transmit(&huart2,(uint8_t *)buffer,sizeof(buffer)-1,100); // 发送字符串给BT模块 HAL_Delay(1000); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值