目录
前言
这次博文还是主要以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
暂无评论