STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯
STM32CubeIDE(CUBE-MX hal库)----按键控制
STM32CubeIDE(CUBE-MX hal库)----串口通信
STM32CubeIDE(CUBE-MX hal库)----定时器
HC-05是一种常用于无线通信的蓝牙模块,它提供了便捷的蓝牙连接和数据传输解决方案,只需要串口就可以进行数据的发送与接收。该模块具有简单易用的特性,适用于各种电子设备和嵌入式系统。
HC-05蓝牙模块有两个模式一个是AT模式,一个是透传模式。
配置步骤:
如何进入AT模式:(1)按住蓝牙模块上的按键通过USB转TTL模块接入电脑,:若模块以两秒的间隔闪烁,表示连接成功,进入AT命令模式(2)若无按键,则将en引脚接高,如图二所示,用一根杜邦线接到3.3v,就可以进入AT模式。再通过USB转TTL接入电脑.(3)如果没有USB转TTL可以使用开发板上面的USB-TTL如图三所示。
打开SSCOM(串口调试助手),选择连接的串口,配置波特率38400,打开串口:
如果没有USB转TTL模块的小伙伴,如果你的开发板上有USB-TTL模块也可以进行使用,把开发板的跳线帽拿开。将蓝牙模块的TX–RXD,RX–TXD。同时按住蓝牙模块上的按键或者将en引脚接高,再给单片机供电。也可以进入AT模式进行调试。
指令名 | 响应 | 含义 |
---|---|---|
AT | OK | 测试指令 |
AT+RESET | OK | 模块复位 |
AT+ORGL | OK | 恢复默认状态 |
AT+ADDR? | +ADDR:<地址> OK | 获得蓝牙模块地址 |
AT+NAME=<名称> | OK | 设置设备名称 |
AT+PSWD=<密码> | +PSWD:<密码> OK | 获得模块密码 |
AT+UART=<波特率> | OK | 设置串口参数 |
AT+UART? | +UART:<参数>OK | 获得串口参数 |
AT+ROLE=<0 从,1主,2回环角色> | + ROLE:<参数>OK | 查询蓝牙模块角色 |
注意:
下载地址 http://www.2265.com/soft/268047.html,好多蓝牙APP搜不到蓝牙模块的信号,亲测这款APP比较好用。支持自定义控件,这里是以文本的方式发送数据。详细介绍可以参考这篇文章,https://www.jianshu.com/p/1a8262492619。
实验一:实现通过手机蓝牙APP发送数据控制单片机小灯亮灭。这款APP有自带的数据发送协议,在单片机接收过程中我们只需要按照规定的进行解析就可以了。如下图所示。例如,我们想要根据发送一字节的数据0x01控制小灯的暗灭,则我们从APP发送的数据为 A5 01 01 5A 校验和是01.
函数解析:
以下是stm32端接收数据的代码,对接收数据进行解析。如果首字节和尾字节分别是0xA5和0x5A,可以判断是我们要接收的数据包,再进一步计算校验和,对比数据是否发生错误。如果数据没有发生错误则判断数据如果是0x01则对小灯的电平进行反转。
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart==&huart3)
{
// 将接收到的数据通过串口三发送出去
HAL_UART_Transmit_DMA(&huart3, receiveData, Size);
printf("Size=%d\n",Size);
printf("receiveData=%s\n",receiveData);
// uint8_t i=0;
//利用接收到的数据进行�?单的命令,判断校验和和数据是否是原数据�?有字节之和的�?8�?
if(receiveData[0]==0xA5 && receiveData[Size-1]==0x5A ){
uint8_t sum=0;
for(uint8_t i=1;i<Size-2;i++)
{
sum+=receiveData[i];
}
if(sum==receiveData[Size-2])
{
if(receiveData[1]==0x01)
{
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
}
}
}
memset(receiveData,0,sizeof(receiveData));
// 再次�?启数据的接收
HAL_UARTEx_ReceiveToIdle_DMA(&huart3, receiveData, sizeof(receiveData));
//关闭DMA接收过半中断
__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
}
}
实验现象
如果连接不到蓝牙,可能是蓝牙当前角色是主机模式,无法被搜索到和配对,解决办法:
方法1. 先将蓝牙设置为从机模式(AT+ROLE=0\r\n),再进行配对。(推荐)
方法2. 通过AT指令与手机配对,具体操作参见HC05-AT指令集手册。