说明:我们可以通过TTL转USB模块使电脑和HC05相连 ,通过电脑蓝牙串口进行调试
我们上电时应该按住复位键再上电,这样才能进入AT模式(下图软件设置也能进入AT模式),否则是配对模式。
另外我们电脑串口波特率应该设置为38400 (AT模式都为38400)
注:物理状态:AT模式下1s闪烁一次 配对模式下:等待连接时也是闪烁(但是比AT模式下间隔时间短) 连接成功时会双闪 以此来进行状态判断
引脚说明:
序 号 | 引脚 名称 |
说明 | |||
1 | VCC | 3.3/5V 电源输入 | |||
2 | GND | 地线 | |||
3 | TXD | 串口数据发送引脚, TTL 电平 |
|||
4 | RXD | 串口数据接收引脚, TTL 电平 |
|||
5 | EN | 模式引脚,悬空时默认 为低电平 高电平时模块进入 AT 命令模式 低电平时模块为串 口透传模式 |
|||
6 | STATE | 配对状态输出 配对状态时输出为 高电平 未配对时输出为低 |
一:发送AT指令
注:发 AT 指令时必须回车换行, AT 指令只能在模块未连接状态下才能生效,一旦蓝牙
模块与设备连接上,蓝牙模块即进入数据透传模式。\r\n 为直接按电脑回车键,如不能按回
车键则加\r\n。AT 指令不分大小写)
下面简单基本AT指令:
1.测试指令:AT 响应OK
2.模块复位(重启) AT+RESET 响应OK
3设置蓝牙名称:.AT+NAME<Param> 如(AT+NAMEHC_05)修改名称为HC_05 响应OK
4.设置配对模式下的波特率 AT+UART=<Param>,<Param>,<Param> 如设置波特率为9600
AT+UART=9600,0,0\r\n 第一个0表示停止位为1位 第二个0表示无检验位
5.修改配对密码 AT+PIN<Param> 如 AT+PIN8888\r\n 修改密码位8888
其他:可以查询AT指令集
二:代码如下:
1.与蓝牙模块相连引脚配置(一般为USARTx)
1. static void HC05_NVIC_Configuration(void) 2. { 3. NVIC_InitTypeDef NVIC_InitStructure; 4. 5. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 6. 7. 8. NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; 9. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; 10. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 11. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 12. NVIC_Init(&NVIC_InitStructure); 13. }
1. void BLT_USART_Config(void) 2. { 3. GPIO_InitTypeDef GPIO_InitStructure; 4. USART_InitTypeDef USART_InitStructure; 5. 6. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); 7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 8. 9. 10. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 11. //为什么推挽复用功能 因为通过片内外设USART控制高or低电平不是ODR寄存器 12. //可以查数据手册每个外设应该引脚模式配置 13. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 14. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 15. GPIO_Init(GPIOB, &GPIO_InitStructure); 16. 17. 18. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; 19. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 20. GPIO_Init(GPIOB, &GPIO_InitStructure); 21. //我的模块不配置38400会出现乱码 22. USART_InitStructure.USART_BaudRate = 38400; 23. USART_InitStructure.USART_WordLength = USART_WordLength_8b; 24. USART_InitStructure.USART_StopBits = USART_StopBits_1; 25. USART_InitStructure.USART_Parity = USART_Parity_No ; 26. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 27. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 28. 29. USART_Init(USART3, &USART_InitStructure); 30. 31. 32. HC05_NVIC_Configuration(); 33. 34. USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); 35. 36. USART_ITConfig (USART3, USART_IT_IDLE, ENABLE ); 37. 38. USART_Cmd(USART3, ENABLE); 39. USART_ClearFlag(USART3, USART_FLAG_TC); 40. }
1. #define USART_BIFF_SIZE 1024 2. typedef struct 3. { 4. volatile uint16_t datanum; 5. uint8_t uart_buff[UART_BUFF_SIZE]; 6. uint8_t receive_data_flag; 7. }ReceiveData; 8. 9. ReceiveData USART3_ReceiveData; 10. 11. void USART3_IRQHandler(void) 12. { 13. uint8_t ucCh; 14. if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) 15. { 16. ucCh = USART_ReceiveData(USART3); 17. if(USART3_ReceiveData.datanum < UART_BUFF_SIZE) 18. { 19. if((ucCh != 0x0a) && (ucCh != 0x0d)) 20. { 21. USART3_ReceiveData.uart_buff[BLT_USART_ReceiveData.datanum] = ucCh; 22. USART3_ReceiveData.datanum++; 23. } 24. } 25. } 26. if(USART_GetITStatus(USART3, USART_IT_IDLE ) == SET ) 27. { 28. USART3_ReceiveData.receive_data_flag = 1; 29. USART3_ReceiveData(USART3); 30. } 31. 32. }
然后主函数中对数据进行处理就行啦!