700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > HC05蓝牙模块与stm32通信

HC05蓝牙模块与stm32通信

时间:2018-12-09 06:47:09

相关推荐

HC05蓝牙模块与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);//使能串口3RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOBUSART_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);//接收到数据放进resOLED_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上显示的话,是对应的十进制的数,所以你就要转换。我是因为我只是用到判断,偷个小懒。

这个栏目应该回到此为止了,记得把运动函数写好,输入变量去判断运动就得到一个比较简单的小车。

就这样,有什么好玩的话我也会贴出来,溜了溜了,上面有错误的话请大佬指出,谢谢。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。