admin管理员组

文章数量:1572806

HC05与STM32与手机透传

1.实验工具:正点原子的精英版STM32F103ZET6,通用BLE蓝牙模块一个HC05(最便宜的蓝牙模块),手机,电脑
2.HC05调试:若HC05上面有小按键,则按住按键不松,然后给HC05上电,观察蓝牙模块指示灯每隔两秒慢闪,则进入AT配置模式,松开按键。(正常蓝牙直接上电时指示灯快闪为从机模式)
3.AT命令调试:本次不使用TTL转串口模块,将STM32开发板的PA9,PA10短接片拔掉,将HC05的TX,RX用杜邦线与STM32的RX,TX相连(记住必须TX接RX,RX接TX),进入AT配置模式后打开电脑端的串口助手,记住波特率一定要为38400,选择对应的端口连接。勾选串口助手下面的发送新行。发送AT指令,若发送AT,若有OK回应则已进入AT配置模式,且HC05模块工作正常。
4.STM32与HC05连线:由于STM32的USART1,与USART2被占用,并未留出相应管脚,建议用USART3。HC05与STM32F103ZET6的USART3串口相连,RX接PB10,TX接PB11,电源接5V(不要接3.3v,可能因电压过低而导致通讯失败)HC05的剩下两个管脚悬空不接。
5.手机蓝牙连接HC05:打开手机蓝牙,打开手机蓝牙调试助手APP(网上,应用商店都有自己下载)连接成功后HC05由快闪变成每隔两秒双闪。默认十进制发送数据,对于数字不会出现乱码,对于汉字会出现乱码现象。
6.STM32串口程序:在程序主函数中判断是否接受中断,然后调用串口接受函数接受信息,然后将接受到的信息赋值给u8类型变量,调用串口发送函数将接受到的信息发送给手机APP,可以根据接受到的数据控制STM32上的相应的设备。
相应代码如下:
#include “sys.h”
#include “usart3.h”
u8 USART3_RX_BUF[USART3_REC_LEN];
u16 USART3_RX_STA=0;
u8 res;
void usart3_init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructurea;
USART_InitTypeDef USART_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
USART_DeInit(USART3);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure); //PB10

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
  GPIO_Init(GPIOB,&GPIO_InitStructure); 
  NVIC_InitStructurea.NVIC_IRQChannel=USART3_IRQn;
  NVIC_InitStructurea.NVIC_IRQChannelCmd=ENABLE;
  NVIC_InitStructurea.NVIC_IRQChannelPreemptionPriority=2;
  NVIC_InitStructurea.NVIC_IRQChannelSubPriority=2;
  NVIC_Init(&NVIC_InitStructurea);        
  USART_InitStruct.USART_BaudRate=bound;	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;
	USART_InitStruct.USART_Parity=USART_Parity_No;
	USART_InitStruct.USART_StopBits=USART_StopBits_1;
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
	USART_Init(USART3,&USART_InitStruct); 
	USART_Cmd(USART3,ENABLE);

}
void USART3_IRQHandler()
{
if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)
{
res=USART_ReceiveData(USART3);
USART_SendData(USART3,res);
USART_SendData(USART1,res);
}
}
STM32去掉短接片位置图片:


本文标签: 串口通讯数据手机app