基于stm32的蓝牙串口收发系统

本实验利用信驰达的蓝牙模块进行串口的收发任务,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的话,黄灯的状态就会取反

 

原理图:

基于stm32的蓝牙串口收发系统_第1张图片

 

启动状态指示灯:接通电源,按下key1,红、黄、蓝色同亮:

 

LightBlue搜索到Vence蓝牙名字:Vence

基于stm32的蓝牙串口收发系统_第2张图片

 

点击连接,连接成功后,指示灯变为蓝、黄、绿

app的0xFFE4端口开启接收数据,按下Key1,发送指令的数据{0x67,0x6c,0x75,0x05,0x20}到app,此时黄灯状态取反,APP收到数据

基于stm32的蓝牙串口收发系统_第3张图片

 

基于stm32的蓝牙串口收发系统_第4张图片

 

在APP的0XFFE9端口输入0x01,stm32判断后,黄灯的状态取反

基于stm32的蓝牙串口收发系统_第5张图片

 

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);                                                                                  //除能串口
                }
        }
}

 

你可能感兴趣的:(stm32,通讯协议)