stm32f103c8t6控制蓝牙模块实现led灯亮灭

之前利用蓝牙模块是用arduino控制板的,现在已经渐渐接触stm32,所以,这次想着用stm32来控制蓝牙模块。
首先的话,需要配置蓝牙模块的一些参数,用到的模块有:
USB转TTL模块、HC-05蓝牙模块
两模块共地,两模块共VCC(VCC取5V);蓝牙模块的RX接转换模块的TX,蓝牙模块的TX接转换模块的RX。然后直接把USB转TTL模块插入电脑的USB接口,利用串口调试助手来设置模块的参数,关于这个串口调试助手,相信接触过单片机的人都会有的,这里就不发出来了。

蓝牙模块的调试

**HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式。**在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。

当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;
当模块处于命令响应工作模式时能执行AT命令,用户可向模块发送各种AT 指令,为模块设定控制参数或发布控制命令。

怎么进入命令响应工作模式?

进入命令响应工作模式有两种方法:

模块上电,未配对情况下就是AT模式,波特率为模块本身的波特率,默认:9600,发送一次AT指令时需要置高一次PIO11;
PIO11 置高电平后,再给模块上电,此时模块进入AT 模式,波特率固定为:38400,可以直接发送AT指令。

什么叫做置高一次PIO11?

**在蓝牙模块中有一个小按键,按一下就置高一次PIO11。**也就是说,第一种方法需要每发送一次AT指令按一次;而第二种方式是长按的过程中上电,之后就无需再管了,直接发送AT命令即可。

需要注意一下,两种进入命令响应工作模式的方式使用的波特率是不一样的,建议使用第二种方式。

怎么区分进了命令响应工作模式呢?

在蓝牙模块上有灯,当灯快闪的时候,就是自动连接工作模式;当灯慢闪的时候,就是命令响应工作模式。
本人在测试过程中,是先按住小按键后,然后把USB转TTL模块插入到电脑的USB中去,这样蓝牙模块上面的灯就慢闪,进入了AT模式。
接着就是要设置蓝牙的参数了:
1)需要设置蓝牙模块的名字,在和手机app连接的时候方便查找,在串口调试助手中发送指令AT+NAME=HC-05,发送指令后,会返回OK,之后你手机app在搜索蓝牙模块的时候就会出现一个名字为HC-05的蓝牙,这个HC-05你也可以改成别的名字。发送指令AT+NAME?:获得设备名称,这个AT指令有很大可能性是没有返回的,因为我也看到了很多的例子……,但是其他的指令都是没有问题的,直接设置设备名称就行了;你还需要发送指令AT+ADDR?,这个指令会返回一个蓝牙地址,因为有时候手机第一次连接蓝牙模块的时候,是没有蓝牙名字的,只有蓝牙地址,所以这个地址可以让你找到你这个蓝牙模块。
2)需要设置连接蓝牙的密码,在串口调试助手中发送指令AT+PSWD=2019,发送指令后,会返回OK,这样手机在连接蓝牙时,就需要输入密码2019才能连接成功,当然这样密码你也可以改成别的。发送指令AT+PSWD?,会返回这个模块当前的密码。
3)需要设置蓝牙模块是主模式还是从模式,手机上面的蓝牙一般都是主模式,所以蓝牙模块需要设置成从模式,在串口调试助手中发送指令AT+ROLE=0,0表示从模式,1表示主模式。发送指令后,会返回OK。发送指令AT+ROLE?,会返回这个模块当前的模式是主还是从。
4)需要设置串口的波特率,在串口调试助手中发送指令AT+UART=9600,0,0,发送指令后,会返回OK。发送指令AT+UART?,会返回这个模块串口参数,串口的参数一共有三个,波特率、停止位、检验位。其取值如下:

参数名称 取值
波特率 24002400、4800、9600、19200、38400、5760、115200、230400、460800、921600、1382400
停止位 0:1位------------------ 1:2位
校验位 0:NONE 1:Odd 2:Even

其默认值为:9600,0,0。

手机与蓝牙模块之间的传输

直接将蓝牙模块与转换模块连接,再将其连接到电脑上,蓝牙模块直接进入自动连接工作模式。
打开手机蓝牙串口app,连接上面1)中的蓝牙地址,下面给出stm32f103c8t6控制蓝牙模块点亮stm32控制板上面PA.1灯的程序,其主要功能是在手机app上面发送字符1给蓝牙模块,蓝牙模块接收到字符1后就点亮led灯(即PA.1),在接收到字符2后就关闭led灯。
主程序:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"extern u8 res;                                      //设置外部全局变量int main(void){        int i;char a[]="abcdefg";char b[7]={'1','2','3','4','5','6','7'};delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);                             //串口初始化为115200My_USART2_Init();LED_Init();                                      //LED端口初始化while(1){if(res=='1'){GPIO_ResetBits(GPIOA,GPIO_Pin_1);       //PA.1指示灯亮delay_ms(500);                            //假如要用延时函数,最好就在上面初始化延时函数,不然程序很容易就跑飞for(i=0;i<7;i++){USART_SendData(USART2, a[i]);           //向串口2发送数据给蓝牙模块while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束}res=0;}if(res=='2'){GPIO_SetBits(GPIOA,GPIO_Pin_1);         //PA.1指示灯灭res=0;}}  }

手机蓝牙跟蓝牙模块通信时,手机发送的指令经过蓝牙模块发送串口2,让串口2接收,如果利用发送函数让串口2发送数据出来的话,可以在手机app上面接收到数据;利用延时函数时,最好在最开始初始化延时函数delay_init(),不要问为什么,我也不清楚,试过才知道。
子程序:

u8 res;                    //设置全局变量
void My_USART2_Init(void)
{  GPIO_InitTypeDef GPIO_InitStrue;  USART_InitTypeDef USART_InitStrue;  NVIC_InitTypeDef NVIC_InitStrue;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//串口端口使能  GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;  GPIO_InitStrue.GPIO_Pin=GPIO_Pin_2;  GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  GPIO_Init(GPIOA,&GPIO_InitStrue);  GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;  GPIO_InitStrue.GPIO_Pin=GPIO_Pin_3;  GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  GPIO_Init(GPIOA,&GPIO_InitStrue);  USART_InitStrue.USART_BaudRate=9600;  USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;  USART_InitStrue.USART_Parity=USART_Parity_No;  USART_InitStrue.USART_StopBits=USART_StopBits_1;  USART_InitStrue.USART_WordLength=USART_WordLength_8b;  USART_Init(USART2,&USART_InitStrue);USART_Cmd(USART2,ENABLE);                 //使能串口2  USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启接收中断  NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;  NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;  NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=0;  NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  NVIC_Init(&NVIC_InitStrue);  }  void USART2_IRQHandler(void)
{  if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)  {  res= USART_ReceiveData(USART2);
//     USART_SendData(USART2,res);     //串口2发送数据给蓝牙模块接收,也就是手机app接收到的数据}
}
void LED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能PA端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                //LED-->PA.1 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);                     //根据设定参数初始化GPIOA.1
}

最后附上相关程序:
stm32f103c8t6控制蓝牙模块点亮LED灯
代码要的下方留言邮箱我会第一时间发给你们的,有什么问题也可以下面评论!

stm32f103c8t6控制蓝牙模块实现led灯亮灭相关推荐

  1. 毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计

    基于51单片机无线蓝牙APP控LED灯亮灭亮度设计 1.项目简介 1.1 系统构成 1.2 系统功能 2.部分电路设计 2.1 LED信号指示灯电路设计 2.2 蓝牙模块 3.部分代码展示 3.1 串 ...

  2. 按下亮 松开灭 c语言程序,MSP430G2452按键控制P1.0口LED灯亮灭

    MSP430G2452按键(P1.3)控制P1.0(LED)灯亮灭C语言程序,P1.3为带上拉电阻的输入状态,P1.0为输出状态,当P1.3按下,P1.0口LED灯则亮,松开按键,LED灯则熄灭,无限 ...

  3. 安卓手机与蓝牙模块联合调试(二)—— 单片机蓝牙控制LED灯亮灭(上)

    系列博文: (1)安卓手机与蓝牙模块联合调试(一)--蓝牙模块的串口通讯 (2)安卓手机与蓝牙模块联合调试(二)-- 单片机蓝牙控制LED灯亮灭(上) (3)安卓手机与蓝牙模块联合调试(三)-- 单片 ...

  4. 安卓手机与蓝牙模块联合调试(三)—— 单片机蓝牙控制LED灯亮灭(下)

    源码获取 https://gitcode.net/cjt-bluetooth/android-51mcu 系列博文: (1)安卓手机与蓝牙模块联合调试(一)--蓝牙模块的串口通讯 (2)安卓手机与蓝牙 ...

  5. stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭

    stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭 接触stm32已经有一年半的时间了,从最开始的stm32F103ZET ...

  6. Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】

    目录 一.前言 二.效果展示 1.APP界面展示 2.C51硬件展示 三.Android Studio APP源代码 1.AndroidManifest.xml 1.请求联网: 2.开放明文传输: 2 ...

  7. 用51单片机中断控制LED灯亮灭

    用51单片机中断控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k3=P3^2;//位定义按键 void dela ...

  8. 采用STM32外部中断模式控制LED灯亮灭

    文章目录 实验工具 一.STMCube配置项目 1.配置引脚 2.配置EXIT 3.配置SYS 4.配置GPIO 5.创建代码 二.使用KEil配置代码 1.打开生成的项目,找到stm32f1xx_i ...

  9. 用51单片机实现按键控制LED灯亮灭

    用51单片机实现按键控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k1=P3^1;//位定义按键 void de ...

最新文章

  1. 一种全自动的牙齿CBCT三维个体识别和分割方法
  2. Git每次推送时都会询问用户名
  3. word count in latex, relatively accurate
  4. 2017大数据全景图
  5. r语言 运算符_R语言运算符
  6. php分块查找,索引查找(索引查找、分块查找) C语言实现
  7. leecode刷题(4)-- 存在重复数组
  8. TensorFlow运作方式入门
  9. Django-Model操作数据库(增删改查、连表结构)
  10. db_name,instance_name,service_names,db_domain,dbid,oracle_sid等区别与联系
  11. dom不刷新 vue 加数据后_详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结...
  12. mac开发工具清单java
  13. 对 “悟空拼音”学习软件的教学过程优化分析
  14. win10卸载软件_【电脑软件】win10自带浏览器|教你一招,如何完美将它卸载!
  15. 周凯:如何利用数据挖掘让RTB广告效果倍增?
  16. 活动回顾 |阿里云MVP Tech Show 第九期宁波站— 物联网一站式开发
  17. thinkadmin点击跳转页面的切换
  18. 阿里云轻量服务器怎么设置密码?
  19. 企业知识管理包括哪些内容?
  20. 数加生产制造执行系统(MES)——优势

热门文章

  1. 集成学习——Boosting之Ada-boost
  2. steam搬砖汇率差项目详解
  3. 超级完美JS 加密 AJAX客户端隐藏
  4. 手把手带你写一份优秀的开发求职简历(一)
  5. Excel批量为数值列加绿色小三角
  6. DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop()
  7. php 汉字按字母排序,在PHP中,将一个汉字数组按照拼音首字母进行排序
  8. 丹枫虽老犹多态 – 继承与多态
  9. “坠入情网”不叫爱,叫寂寞
  10. 学习笔记,发QQ邮件