请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】学习STM32f1之蓝牙控制LED

[复制链接]
STMCU小助手 发布时间:2022-5-14 21:00
前言
这次主要以STM32f103zet6小系统板来操作,依旧使用库函数入手,寄存器版本可能要到后续再做更新,今天我们主要是来讲一下蓝牙通信!

一、蓝牙模块简介
关于蓝牙模块的使用相信大家在浏览众多博文中已经心中有数,关于它的指令使用部分,我们有时间再详细介绍介绍,另外在博客上也有许多文章介绍,大家可以学习学习,我也只是个小小搬运工,再把自己的理解写成一篇文章,希望能对大家有所帮助。

先看看它的模样吧

C29KX{5$M~7NFPCZM[0PSNG.png

其中我们可以看到用到了四个接口,即RXD、TXD、VCC、GND

在这里RXD接单片机上串口的TXD,TXD接单片机上串口的RXD,VCC和GND就不用多说了吧哈哈

下面代码里面我接的是串口2,即PA2(TXD)和PA3(RXD)

然后介绍一下我们要使用到的工具:

1、单片机STM32f1系列板子,会控制LED灯(啰里啰嗦的我哈哈)

2、手机蓝牙软件(到应用市场搜索蓝牙串口即SPP)

3、蓝牙模块HC-05

接下来就直接上代码解释了


二、代码部分详解

蓝牙代码部分:

  1. #include "lanya.h"

  2. u8 res;
  3. void lanya_Init(void)
  4. {

  5.     GPIO_InitTypeDef GPIO_InitStrue;  
  6.     USART_InitTypeDef USART_InitStrue;  
  7.     NVIC_InitTypeDef NVIC_InitStrue;  

  8.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//
  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//   

  10.     GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;  
  11.     GPIO_InitStrue.GPIO_Pin=GPIO_Pin_2;  
  12.     GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
  13.     GPIO_Init(GPIOA,&GPIO_InitStrue);
  14.         
  15.                 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;  
  16.     GPIO_InitStrue.GPIO_Pin=GPIO_Pin_3;  
  17.     GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
  18.     GPIO_Init(GPIOA,&GPIO_InitStrue);
  19.         
  20.     USART_InitStrue.USART_BaudRate=9600;  //波特率设置9600,串口设置
  21.     USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  
  22.     USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;  
  23.     USART_InitStrue.USART_Parity=USART_Parity_No;  
  24.     USART_InitStrue.USART_StopBits=USART_StopBits_1;  
  25.     USART_InitStrue.USART_WordLength=USART_WordLength_8b;  

  26.     USART_Init(USART2,&USART_InitStrue);

  27.     USART_Cmd(USART2,ENABLE);     //

  28.     USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//

  29.     NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;  
  30.     NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;  
  31.     NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=0;  
  32.     NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  
  33.     NVIC_Init(&NVIC_InitStrue);  

  34. }  

  35. void USART2_IRQHandler(void)  
  36. {  

  37.      if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)  
  38. {  
  39.      res= USART_ReceiveData(USART2);   //接收数据给res
  40. //     USART_SendData(USART2,res);   
  41.   }  
  42. }
复制代码

这里主要还是初始化串口,即蓝牙初始化,后面又开启串口2中断接受数据吗,这里因为我采用了串口2,所以并没有开启发送到电脑的串口助手上,我们仅通过与手机软件的互联,这也是我们通过手机端来控制LED的亮灭,进而实现其他高阶操作。

头文件就单纯声明了初始化函数

接下来就是主函数了

  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "lanya.h"

  7. extern u8 res;         
  8. int main(void)
  9. {   
  10. int i;
  11. char a[]="abcdefg";

  12. delay_init();
  13. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  14. uart_init(115200);        
  15. LED_Init();            
  16. lanya_Init();
  17.   while(1)
  18. {
  19.   if(res=='0')
  20.   {
  21.    LED0=0;
  22.    delay_ms(500);   
  23.    for(i=0;i<7;i++)
  24.    {
  25.     USART_SendData(USART2, a<i>);
  26.   while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
  27.                  
  28.    }
  29.    res=0;
  30.   }
  31.   if(res=='1')
  32.   {
  33.    LED1=0;
  34.    delay_ms(50);
  35.    res=0;
  36.   }
  37.         if(res=='2')
  38.         {
  39.                 LED0=1;
  40.         delay_ms(50);
  41.                 res=0;
  42.         }
  43.                 if(res=='3')
  44.         {
  45.                 LED1=1;
  46.         delay_ms(50);
  47.                 res=0;
  48.         }

  49. }  
  50. }</i>
复制代码

写的有点乱,见谅见谅哈哈,修改乱了懒得改,这里就是在手机蓝牙串口上输入数字0、1、2、3来控制LED的亮灭,具体见下图:

输入‘0’:

T3{W@]V$WX)3B`I7E39GY_L.png

输入‘1’

PL8([7NK0MBAWQJJ[KP`0ZF.png

那么学习到这你就会对蓝牙模块有了很简单的理解,就可以操作蓝牙来实现操作其他东西

三、总结
这一讲其实我也没有讲的特别详细,主要理解还不太深刻哈哈,但是尽量的去把自己的东西写出来来,希望对大家有所帮助。


收藏 评论0 发布时间:2022-5-14 21:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版