前言
这次主要以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;
- }
- }
- }</i>
复制代码
写的有点乱,见谅见谅哈哈,修改乱了懒得改,这里就是在手机蓝牙串口上输入数字0、1、2、3来控制LED的亮灭,具体见下图:
输入‘0’:
输入‘1’
那么学习到这你就会对蓝牙模块有了很简单的理解,就可以操作蓝牙来实现操作其他东西
三、总结
这一讲其实我也没有讲的特别详细,主要理解还不太深刻哈哈,但是尽量的去把自己的东西写出来来,希望对大家有所帮助。
|