本实验利用信驰达的蓝牙模块进行串口的收发任务,stm32f103用的是串口1,手机APP用的是LighntBlue,蓝牙名字为Vence,stm32开发板为中国移动的OneNet开发板
①连线
蓝牙模块 stm32f103
VCC VCC
GND GND
EN PC10
RX TX1
TX RX1
BRTS GND
P04 PC7
P05 PC8
②蓝牙模块的工作模式
启动蓝牙模块需要将EN置0,BRTS置0,接上电源,就开始广播模式
当连接成功时,P04为高电平,P05为低电平
利用stm32启动的方式为,接上电源,按下Key1键盘,此时蓝灯,红灯,黄灯亮起;
红灯亮,绿灯灭,还没有连接成功,如果红灯灭,绿灯亮就代表已经连接成功
③stm32发送固定数据到手机APP
{0x67,0x6c,0x75,0x05,0x20}
通过按下stm32的按键1,也就是PC13口,会发送数据到手机,此时黄灯如果是灭的状态,就改为亮,如果是亮的状态就改为灭
④手机APP发送数据到stm32
如果手机发送的一个字节为0x01,通过代码判断是0x01的话,黄灯的状态就会取反
原理图:
启动状态指示灯:接通电源,按下key1,红、黄、蓝色同亮
LightBlue搜索到Vence蓝牙名字:Vence
点击连接,连接成功后,指示灯变为蓝、黄、绿
app的0xFFE4端口开启接收数据,按下Key1,发送指令的数据{0x67,0x6c,0x75,0x05,0x20}到app,此时黄灯状态取反,APP收到数据
在APP的0XFFE9端口输入0x01,stm32判断后,黄灯的状态取反
stm32主函数代码:
- //本设计利用信驰达进行蓝牙通信,stm32的PC10控制蓝牙模块的使能,蓝牙模块的工作电压范围在1.8-3.3V,具有低功耗
- #include "stm32f10x.h"
- #include "usart1.h"
- #include "bluetooth.h"
- #include "key.h"
- #include "led.h"
- u8 GLU[5] = {0x67,0x6c,0x75,0x05,0x20};
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断控制器分组设置
- Key_Init(); //初始化按键
- EXTI_Configuration();
- Usart1_Init(115200); //设置串口1的波特率为115200bit
- LedInit(); //初始化led
- Delay_Init(); //初始化延迟函数
- BlueTooth_Init(); //初始化蓝牙模块
- USART_Cmd(USART1, DISABLE); //除能串口
- while(1)
- {
- USART_ClearFlag( USART1, USART_FLAG_TC );
- if(send_flag == 1)
- {
- USART_Cmd(USART1, ENABLE); //除能串口
- GPIO_ResetBits(GPIOC,EN); //使能蓝牙模块
- DelayMs(20); //启动蓝牙模块延迟20ms
- while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7) != Bit_SET || GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8) != Bit_RESET);
- Usart_SendString(USART1, GLU);
- //GPIO_SetBits(GPIOC,EN); //发送完数据除能蓝牙模块
- DelayMs(20); //启动蓝牙模块延迟20ms
- send_flag = 0;
- //USART_Cmd(USART1, DISABLE); //除能串口
- }
- }
- }
复制代码
全部资料51hei下载地址:
资料(蓝牙模块说明书,OneNet开发板原理图,源码).7z
(2.35 MB, 下载次数: 34)
|