HC05蓝牙模块与stm32通信

news/2024/5/19 1:14:44 标签: stm32, 硬件

我估计是到最后了,最后讲一下蓝牙的接发数据
做一下用蓝牙制作的小车吧,我先贴上蓝牙的代码吧

#include "sys.h"
#include "usart3.h"
#include "usart.h"
#include "led.h"
#include "oled.h"
u8 USART3_RX_BUF[USART3_REC_LEN]; //数组用来存储接收到的数据,而USART3_REC_LEN为最多能接收的字节限度
u16 USART3_RX_STA=0;         		//接收状态标记	 0-14位为接收字节数,15位接收完成标志位
void usart3_init(u32 bound)
{ 
	  GPIO_InitTypeDef GPIO_InitStructure;
	  NVIC_InitTypeDef NVIC_InitStructurea;
	  USART_InitTypeDef USART_InitStruct;
	 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能串口3
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOB
	  USART_DeInit(USART3);//串口3复位 不是必要的一步
	
	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
	  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	  GPIO_Init(GPIOB,&GPIO_InitStructure);    //PB10设置为复用推挽输出
	
	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
	  GPIO_Init(GPIOB,&GPIO_InitStructure);  //PB11设置为浮空输入	 
  
	  NVIC_InitStructurea.NVIC_IRQChannel=USART3_IRQn;
	  NVIC_InitStructurea.NVIC_IRQChannelCmd=ENABLE;
	  NVIC_InitStructurea.NVIC_IRQChannelPreemptionPriority=2;
	  NVIC_InitStructurea.NVIC_IRQChannelSubPriority=2;
	  NVIC_Init(&NVIC_InitStructurea);          //串口3中断的设置
		
		USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//串口3中断使能和中断类型设置
	
	  USART_InitStruct.USART_BaudRate=bound;//串口波特率
		USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制
		USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Rx;//收发模式
		USART_InitStruct.USART_Parity=USART_Parity_No;//无奇偶校验位
		USART_InitStruct.USART_StopBits=USART_StopBits_1;//一个停止位
		USART_InitStruct.USART_WordLength=USART_WordLength_8b;//字长为8位数据格式
	  USART_Init(USART3,&USART_InitStruct);                 //串口3的一些参数设置
		
		USART_Cmd(USART3,ENABLE);//串口3使能
	
	  
}
void USART3_IRQHandler()//串口3的中断
{ 
	 char res;//暂时缓存接收的数据
   if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)//判断是否为串口3接收中断
	 {
		   
	     res=USART_ReceiveData(USART3);//接收到数据放进res
		 OLED_ShowNum(0,1,USART3_RX_BUF[0],3,16);

		   USART3_RX_BUF[USART3_RX_STA&0x7FFF]=res;//数据放进数组中,则可以用到main函数中了
		   USART3_RX_STA++;                         //字节长度++
		 if(USART3_RX_STA>(USART3_REC_LEN-1))USART3_RX_STA=0;//接收数据错误,重新开始接收	+; 
		  USART3_RX_STA|=0x8000;//串口3接收完成
		 USART_ClearITPendingBit(USART3,USART_IT_RXNE);//清除接收中断标志
		   
	  }

代码里面也是有注释的,就是有一个比较好一点去理解蓝牙,你就直接理解蓝牙为一个串口,但是不像是串口那样,是用来打印出数据的,而是用来接收上位机传输过来的数据,其实更纯粹一点就是一个窗户,但是你需要有一个中断去读出当前蓝牙接收到的数据。
但是记住一点就是在蓝牙传过来的数据是十进制的数据,你直接在oled上显示的话,是对应的十进制的数,所以你就要转换。我是因为我只是用到判断,偷个小懒。
这个栏目应该回到此为止了,记得把运动函数写好,输入变量去判断运动就得到一个比较简单的小车。
就这样,有什么好玩的话我也会贴出来,溜了溜了,上面有错误的话请大佬指出,谢谢。


http://www.niftyadmin.cn/n/1860944.html

相关文章

.net 鼠标移入弹出页面_基于HTML5 Canvas 实现弹出框

前言用户鼠标移入时,有弹出框出现,这样的需求很常见。这在处理 HTML 元素实现时简单,但是如果是对 HTML5 Canvas 构成的图形进行处理,这种方法不再适用,因为 Canvas 使用的是另外一套机制,无论在 Canvas 上…

全国大学生电子设计竞赛代码-PID篇

配备好的代码输入参数就直接可以用了,个人感觉还是不错的 下面的是头文件 #ifndef _PID_H #define _PID_Htypedef struct _positional_pid{//PID的基本参数double GoalVale; //目标值double ActualVale; //真实值double Error; //误差double Last…

2019年全国大学生电子设计竞赛D题简易电路特性测试仪试题

题目要求部分 我负责的部分就是测量阻抗的部分,这一次我使用的是AD5933 AD5933介绍 我这一篇主要是讲使用5933计算那个待测电路的阻抗值,首先就是在概括处已经说明是我们读取的数据其实是一个实部和一个虚部。 然后我们要记住的是向寄存器0x94&#xf…

2019年电赛D题简易电路特性测试仪试题ad5933测量小阻抗值

ad5933 继上一篇的文章,我后面才发现一个大问题,就是上一次计算的增益系数其实不能测量其他小的阻抗值,在参考手册里面就有一章讲的就是小阻抗的 这一个小阻抗的扫描频率范围是在《500欧的范围内 当然手册里面也是讲到不同的阻抗值是对应的…

sublime入门文章

http://www.iplaysoft.com/sublimetext.html http://code-tech.diandian.com/post/2012-07-18/40030958791 http://blog.csdn.net/liaowenfeng/article/details/10598527 http://blog.csdn.net/af52520/article/details/10200019 cocos2d 代码插件http://my.oschina.net/lonewo…

两个hc05进行双向通信-2021年电子设计竞赛送药小车

蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发…