四轮两驱小车(五):蓝牙HC-08通信
创始人
2024-05-29 00:52:03
0

前言:

        在我没接触蓝牙之前,我觉得蓝牙模块应用起来应该挺麻烦,后来发觉这个蓝牙模块的应用本质无非就是一个串口

蓝牙模块:

 

        这是我从某宝上买到的蓝牙模块HC-08,价格还算可以,而且可以适用于大多数蓝牙调试软件。回到刚开始说的话,蓝牙模块的应用和单片机的串口几乎是一样的,我们可以用USB转TTL模块与HC-08模块进行通信,虽说HC-08有6个引脚,但是我们只用4个,连接方式如下对应

USB转TTLHC-08
3V3VCC
TXDRXD
RXDTXD
GNDGND

连接之后,蓝牙模块蓝色灯闪烁(没和手机连接)。串口助手选择波特率为9600,我们可以直接用串口助手发送AT指令,当蓝牙模块回馈OK的时候,说明我们的蓝牙模块没有问题。

        接下来给大家罗列一下常用的AT指令

指令响应说明
ATOK检验串口是否正常工作
AT+RXName:HC-08 >>(蓝牙名称)
Role:Slave >>>>(模块角色 主 M / 从 S)
Baud:9600,NONE (串口波特率, 校验位)
Addr:48,70,1E,24,16,27>>(蓝牙地址)
PIN :000000>>>>[ 蓝牙密码 (密码无效) ]
查询模块的基本参数
AT+DEFAULTOK恢复出厂设置,不会清除主机已记录的从机地址!若要清除请在 未连线状态下使用 AT+CLEAR 指令进行清除。模块会自动重启,重启 200ms 后可进行新的操作
AT+RESETOK重启模块,模块会自动重启,重启 200ms 后 可进行新的操作
AT+VERSIONHC-08 V3.3,2020-10-16获取软件版本和发布日期
AT+ROLE=xMaster/Slave设置主机/从机;默认从机,设置后模块将自动重启, 重启 200ms 后可进行新的操作

  STM32驱动HC-08例程:

        下面是我的部分代码,包括了初始化部分,和中断部分,看完这部分代码,我们就更能理解为啥我说蓝牙模块的应用和串口几乎一致。因为我的蓝牙模块连接的刚好是USART2,所以代码部分如下

void USART2_Init(unsigned int Baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//TXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//RXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
//	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);USART_InitStructure.USART_BaudRate = Baudrate;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //关闭硬件流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_InitStructure.USART_Parity = USART_Parity_No;				 //无校验位USART_InitStructure.USART_StopBits = USART_StopBits_1;		 //1个停止位USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8个数据位USART_Init(USART2, &USART_InitStructure);USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);	//允许接收中断USART_Cmd(USART2, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//??1????NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//?????3NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;		//????3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ????NVIC_Init(&NVIC_InitStructure);	//??????????VIC????}

        中断服务函数编写

void USART2_IRQHandler(void)
{if(USART_GetITStatus(USART2,USART_IT_RXNE) == 1)							//USART_FLAG_RXNE判断数据,== 1则有数据{if(Receive_sum > 49)													//数组能存放50个字节的数据				{USART_ReceiveString[49] = '\0';										//数据字节超过50位时,将最后一位设置为\0	Receive_Flag = 1;													//接收标志位置1,停止接收数据Receive_sum = 0;													//数组下标置0}if(Receive_Flag == 0)													//接收标志位等于0,开始接收数据{USART_ReceiveString[Receive_sum] = USART_ReceiveData(USART2);		//通过USART2串口接收字符Receive_sum++;														//数组下标++if(USART_ReceiveString[Receive_sum-1] == '%'){Receive_Flag = 1;Receive_sum = 0;printf("%s\r\n",USART_ReceiveString);					if(strcmp(USART_ReceiveString,"channel:1%") == 0){FSM_led = LED_state1;FSM_hc08 = Channel_1;Receive_Flag = 0;}else if(strcmp(USART_ReceiveString,"channel:2%") == 0){FSM_led = LED_state2;FSM_hc08 = Channel_2;Receive_Flag = 0;}}}USART_ClearITPendingBit(USART2,USART_IT_RXNE);							//接收后先清空标志位}
}

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...