带你学习STM32f1之蓝牙控制LED(简单入手,含主代码)

目录

前言

 一、蓝牙模块简介

 二、代码部分详解

三、总结

题外话:


前言

这次博文还是主要以STM32f103zet6小系统板来操作,依旧使用库函数入手,寄存器版本可能要到后续再做更新(因为我才刚开始入手寄存器不久,不是很熟练,还在熟悉哈哈),好的,言归正传,今天我们主要是来讲一下蓝牙通信

 一、蓝牙模块简介

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

先看看它的模样吧

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

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

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

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

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

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

3、蓝牙模块HC-05

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

 二、代码部分详解

蓝牙代码部分:

#include "lanya.h"

u8 res;
void lanya_Init(void)
{
        
    GPIO_InitTypeDef GPIO_InitStrue;  
    USART_InitTypeDef USART_InitStrue;  
    NVIC_InitTypeDef NVIC_InitStrue;  
      
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);// 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,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;  //波特率设置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);     //
      
    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);   //接收数据给res
//     USART_SendData(USART2,res);    
  }  
}

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

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

接下来就是主函数了

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "lanya.h"

extern u8 res;         
 int main(void)
 {   
 int i;
 char a[]="abcdefg";

 delay_init();
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
 uart_init(115200);        
 LED_Init();            
 lanya_Init();
  while(1)
 {
  if(res=='0')
  {
   LED0=0;
   delay_ms(500);    
   for(i=0;i<7;i++)
   {
    USART_SendData(USART2, a[i]); 
  while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
		 
   }
   res=0;
  }
  if(res=='1')
  {
   LED1=0;
   delay_ms(50);
   res=0;
  }
	if(res=='2')
	{
		LED0=1;
        delay_ms(50);
		res=0;
	}
		if(res=='3')
	{
		LED1=1;
        delay_ms(50);
		res=0;
	}

 }  
}

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

输入‘0’:

 

输入‘1’ 

 

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

三、总结

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

 

有问题欢迎评论探讨交流,你的每一次评论,每一个点赞,还有您的关注,始终是我前进路上的不竭动力!

题外话:

挺喜欢彭于晏说的一句话:“我就是没有才华,所以才用命去拼!”

学习32之路固然辛苦,但要是坚持下来了,那不是很酷?哈哈哈

版权声明:本文为CSDN博主「不说二话的自家人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45930808/article/details/119546794

生成海报
点赞 0

不说二话的自家人

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐