关于两个STM32F103系列单片机的蓝牙通信

   毕设做的是掌控小车,因此采用蓝牙通信作为小车和手部通信,前段时间做出实物,对其遇到的问题以及解决的方法做一些总结。一个主控芯片采用STM32F103ZET6,另一个主控芯片采用STM32F103C8T6,原因是本来准备了两个主控C8T6,不小心烧了一个。

1.两个蓝牙的配对

 需要准备的硬件:

2个HC-05主从一体,2个USB转TTL,杜邦线若干,USB拓展口(电脑USB口较少的)

AT指令集(在蓝牙模块进入AT指令模式后,需要在串口助手上发送AT指令):

对于HC-05这款蓝牙模块,其上有一个黑色的小按钮,在通电之前长按,插入电脑USB口后,原本快闪红灯变为慢闪后,即进入AT模式,此时可以在串口助手上发送AT指令。每发送一条AT指令后,串口助手会回馈一个OK或者其他,证明可以正常使用,若不能回复OK,大概有以下问题:

(1)检查连线,是否RXD连接的TXD,是否杜邦线连接正确。

(2)检查波特率是否正确,默认的波特率是38400

以下为两个蓝牙模块配对的过程:

 1.初始化蓝牙模块(需要开启两个串口助手对主从机进行配置,此处A为主机,B为从机)
蓝牙模块A的配置
AT+ORGL        

初始化蓝牙模块(当使用了此条AT指令后,自动退出AT模式,需重新进入AT模式)
AT+PSWD="xxxx"  

设置蓝牙配对密码(其中xxxx代表任意数字,主机从机的密码要一致)
AT+ROLE=1      

设置蓝牙模块A为主机 (1代表主机,0代表从机)


蓝牙模块B的配置
AT+ORGL        

初始化蓝牙模块(当使用了此条AT指令后,自动退出AT模式,需重新进入AT模式)
AT+PSWD="xxxx"  

设置蓝牙配对密码(其中xxxx代表任意数字,主机从机的密码要一致)
AT+ROLE=0      

设置蓝牙模块A为主机 (1代表主机,0代表从机)
2.查询从机地址并绑定
AT+ADDR?      

对从机进行地址查询,获得查询地址,我使用从机获得的的地址0022:12:0205FC
将获得的地址其中的冒号换成逗号即0022,12,0205FC
注意:在AT指令中所有的标点均为英文输入法下的
AT+BIND=0022,12,0205FC

 
在主机的串口助手窗口发送,使主机绑定从机地址
AT+BIND         

查看主机是否成功绑定从机地址
3.设置主机从机的波特率
AT+UART=115200,0,0    

设置主机的波特率为115200
AT+UART?            

查询主机波特率是否为115200
AT+UART=115200,0,0    

设置从机的波特率为115200
AT+UART?            

查询从机波特率是否为115200

配置完成后,拔出再重新通电,此时不用按住黑色小按钮,待两个蓝牙模块的红灯均变为慢闪时,即配对成功,此时在主机的串口助手上发送数字,在从机的串口助手上可以接收到,即实现了两个蓝牙模块的通信。

2.单片机的配置(仅为部分配置代码)

  根据上述两个蓝牙之间的通信,不难推断蓝牙通信就是无线的串口通信,STM32单片机配置时应注意配置两个单片机的串口,要有和蓝牙相同的波特率,同时将蓝牙连接至配置好的单片机所用的串口(RXD,TXD)上

我在小车上的串口配置,使用串口3

#include "usart3.h"
#include "sys.h"
#include "usart.h"
#include "tb6612.h"
#include "timer.h"uint8_t Serial_RxFlag;
extern int USART3_Flag;
uint16_t R_Data;void usart3_init(u32 bound)
{ GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructurea;USART_InitTypeDef USART_InitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //USART_DeInit(USART3);//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);    //PB10GPIO_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=1;NVIC_InitStructurea.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStructurea);          //USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//USART_InitStruct.USART_BaudRate=bound;//USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//USART_InitStruct.USART_Parity=USART_Parity_No;//USART_InitStruct.USART_StopBits=USART_StopBits_1;//USART_InitStruct.USART_WordLength=USART_WordLength_8b;//USART_Init(USART3,&USART_InitStruct);                 //USART_Cmd(USART3,ENABLE);//}
void USART3_IRQHandler(void)
{if (USART_GetITStatus(USART3, USART_IT_RXNE) == 1){R_Data = USART_ReceiveData(USART3);//ÕâÐбíʾÊÕµ½µÄÊý¾Ýif(R_Data=='A') USART3_Flag=1;if(R_Data=='B') USART3_Flag=2;if(R_Data=='C') USART3_Flag=3;if(R_Data=='D') USART3_Flag=4;if(R_Data=='E') USART3_Flag=5;USART_ClearITPendingBit(USART3, USART_IT_RXNE);}
}

可以参考一个老哥的https://blog.csdn.net/hbzdsXCV/article/details/129278918?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168240123616800186542106%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168240123616800186542106&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-129278918-null-null.142^v86^wechat,239^v2^insert_chatgpt&utm_term=%E4%B8%A4%E4%B8%AA%E5%8D%95%E7%89%87%E6%9C%BA%E7%9A%84%E8%93%9D%E7%89%99%E9%80%9A%E4%BF%A1&spm=1018.2226.3001.4187

手部采集部分,使用串口2

#include "usart2.h"u8  USART2_RX_BUF[USART2_REC_LEN]; //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.Ä©×Ö½ÚΪ»»Ðзû 
u16 USART2_RX_STA;         		//½ÓÊÕ״̬±ê¼Ç	void uart2_Init(u32 baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//ʹÄÜUSART2£¬GPIOAʱÖÓGPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//¸´ÓÃÍÆÍìÊä³öGPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈëGPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.3  //Usart1 NVIC ÅäÖÃNVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//ÇÀÕ¼ÓÅÏȼ¶3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;		//×ÓÓÅÏȼ¶3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQͨµÀʹÄÜNVIC_Init(&NVIC_InitStructure);	//¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷//USART ³õʼ»¯ÉèÖÃUSART_InitStructure.USART_BaudRate = baudrate;//´®¿Ú²¨ÌØÂÊUSART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽUSART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλUSART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλUSART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆUSART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//ÊÕ·¢Ä£Ê½USART_Init(USART2, &USART_InitStructure); //³õʼ»¯´®¿Ú2USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//¿ªÆô´®¿Ú½ÓÊÜÖжÏUSART_Cmd(USART2, ENABLE);                    //ʹÄÜ´®¿Ú2
}void USART2_IRQHandler(void)                	//´®¿Ú2ÖжϷþÎñ³ÌÐò
{u8 Res;if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ){Res =USART_ReceiveData(USART2);	//¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ýif((USART2_RX_STA&0x8000)==0)//½ÓÊÕδÍê³É{if(USART2_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d{if(Res!=0x0a)USART2_RX_STA=0;//½ÓÊÕ´íÎó,ÖØпªÊ¼else USART2_RX_STA|=0x8000;	//½ÓÊÕÍê³ÉÁË }else //»¹Ã»ÊÕµ½0X0D{	if(Res==0x0d)USART2_RX_STA|=0x4000;else{USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;USART2_RX_STA++;if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØпªÊ¼½ÓÊÕ	  }		 }}   		 } } 
static u8 USART2_TX_BUF[200];void u2_printf(char* fmt,...)  
{     u16 i,j; va_list ap; va_start(ap,fmt);vsprintf((char*)USART2_TX_BUF,fmt,ap);va_end(ap);i=strlen((const char*)USART2_TX_BUF);		//´Ë´Î·¢ËÍÊý¾ÝµÄ³¤¶Èfor(j=0;j<i;j++)							//Ñ­»··¢ËÍÊý¾Ý{while((USART2->SR&0X40)==0);			//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   USART2->DR=USART2_TX_BUF[j];  } 
}

3.实现两个蓝牙的通信

在配置好两个单片机的串口之后,其实关于蓝牙通信就已经解决的差不多了,最后剩下的关键只有串口发送函数和串口接收函数的使用,在主机使用串口发送函数,在从机使用串口接收函数,注意串口发送和接收的串口。

4.遇到的问题及解决方案

开始由于好久没捣鼓过32了,而且我这个电脑ST-LINK一直没有调过来,因此后来改成用串口烧录,对于c8t6的串口烧录(使用TTL转USB烧录),烧录时应用跳线帽将BOOT0置1,待烧录完成后将BOOT0置0,才可正常工作,而期间BOOT1一直置0。

5.完整版代码

链接:https://pan.baidu.com/s/1Nar8uLibDYbWvmrfeW7pBg?pwd=rx1l 
提取码:rx1l

这是本人第一次在CSDN上发表文章,本人才学疏浅,写下此文也是希望能帮到别人,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43403.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphPad绘图软件:汇集生物统计、化学统计、以及科技绘图于一身

分享一款实用的绘图软件&#xff0c;GraphPad Prism。汇集生物统计、化学统计、以及科技绘图于一身&#xff0c;有超过110个国家的超过20万名科学家用这个软件来分析、绘制和展示他们的科学数据。 不需要学习复杂的编程&#xff0c;无需代码&#xff0c;用起来像EXCEL一样点点点…

认真分享几个「副业赚钱」的靠谱思路!

已剪辑自: https://mp.weixin.qq.com/s?__bizMzUxODM4MDk2NA&mid2247486581&idx1&sn1a27953f0956836693434f9aaf96829f&chksmf98880beceff09a83a915d231b5888287142227fda6671d53dac7d03e2c13806abe82994a3b6&scene21#wechat_redirect 你好&#xff0c;我…

如何在家里赚钱,分享六个适合普通人长期可做的副业

​当今社会&#xff0c;压力越来越大&#xff0c;工作、家庭、生活等等&#xff0c;方方面面都需要钱&#xff0c;仅靠一份工作赚钱&#xff0c;已经很难满足我们的需求。所以越来越多的人尝试做副业&#xff0c;通过副业增加收入&#xff0c;让生活过得更幸福。常见的副业都是…

ChatGPT对软件开发生命周期有哪些冲击?

1、对需求开发的冲击 ChatGPT对需求开发的冲击&#xff0c;主要体现在&#xff1a;可以帮助更准确地理解和记录需求&#xff0c;协助起草和完善用户故事或用例。 ChatGPT对软件开发生命周期有哪些冲击&#xff1f; ​ 2、对设计的冲击 ChatGPT对设计的冲击&#xff0c;主…

元宇宙场景技术实践|实现“虚拟人”自由

虚拟形象是虚拟世界的核心资产&#xff0c;也是打造元宇宙社交的数字名片&#xff0c;从虚拟形象为切入点&#xff0c;ZEGO Avatar 基于强大的 AI 算法能力&#xff0c;可以为企业提供多元化风格虚拟形象制作及智能互动服务&#xff0c;助力企业打造虚拟形象数字资产&#xff0…

元宇宙大潮来袭?业内首个虚拟形象实时互动融合 SDK 来了!

元宇宙&#xff0c;火得猝不及防。 短短几个月时间&#xff0c;Minecraft、Roblox 进入了更多人的视野&#xff0c;GREE、英伟达、微软等陆续发布相关产品解决方案&#xff0c;韩国、日本还从国家层面宣布大力布局元宇宙赛道。《头号玩家》描绘的情景似乎明天就能成为现实。 &a…

元宇宙与虚拟现实(二)

前言 前面我们关于元宇宙进行了概念上的阐释&#xff0c;本篇文章继续会探讨一些元宇宙里面脑洞大开的话题&#xff0c;如元宇宙和现实的关系&#xff0c;以及热门话题&#xff0c;关于元宇宙怎么炒房~~ 元宇宙不是什么&#xff1f; 1.元宇宙不等于电子游戏 元宇宙大型多人在…

解读元宇宙:映射现实的虚拟平行世界 关注VR AR 区块链Web3.0机会

元宇宙——理想状态是自发无边际的社会体验 。 公众号&#xff1a;领航员kol 阅读我的原创文章&#xff1a; 微博&#xff1a;牛熊领航员kol 阅读我的原创文章&#xff1a; 元宇宙的英文叫做MetaverseMetaverse&#xff0c;是一个映射现实世界的虚拟平行世界&#xff0c;​通…

当Unity实时3D引擎遇上AI虚实交互,Unity要成为元宇宙时代的新引擎

游戏引擎巨头Unity&#xff0c;还在为蔚来、小鹏、理想等14家车厂提供智能座舱等解决方案&#xff0c;以及为香港机场、北京城建、海尔卡奥斯提供数字孪生方案。实时3D引擎&#xff0c;也将是元宇宙时代的核心支撑。 编辑 | 宋慧 出品 | CSDN AI 领域的年度盛会——2022世界人…

万字长文 | ChatGPT的工作原理(一)

ChatGPT 能够自动生成一些读起来表面上甚至像人写的文字的东西&#xff0c;这非常了不起&#xff0c;而且出乎意料。但它是如何做到的&#xff1f;为什么它能发挥作用&#xff1f;我在这里的目的是大致介绍一下 ChatGPT 内部的情况&#xff0c;然后探讨一下为什么它能很好地生成…

手把手教你最近很火的 微信公众号测试号推送消息

最近有很多小伙伴在尝试做消息推送&#xff0c;今天详细教程它来啦&#xff01;&#xff01;&#xff01; 过程不太复杂&#xff0c;跟着一步一步做就可以实现。 没时间的话&#xff0c;先收藏&#xff0c;等有时间了慢慢学&#xff01; 第一步&#xff1a;注册微信公众号测试…

火狐安装低版本hackbar插件

在火狐安装的最新版hackbar插件无法使用&#xff0c;需要付费的许可证。 可以使用旧版本的HackBar HackBar2.1.3版本下载地址&#xff1a;https://github.com/Mr-xn/hackbar2.1.3 下载最后一个文件。 首先移除之前安装的hackbar&#xff0c;再在浏览器的拓展与主题中手动安装…

火狐浏览器插件汇总(VIP典藏版)

Windows超实用技巧50篇博客&#xff08;VIP典藏版&#xff09; 目录 一、进入搜索页面 二、常用插件推荐 1、Adblock Plus 2、OctoTree 3、油猴子 4、video DownloadHelper 5、Screengrab 一、进入搜索页面 位置&#xff1a;设置-附加组件-扩展-寻找更多扩展 二、常用插件推荐 …

渗透测试人员常用的8种火狐插件

目录 1、Max HacKBar 2、FoxyProxy Standard 3、Wappalyzer 4、Shodan 5、User-Agent Switcher and Manager 6、Firefox Multi-Account Containers 7、HTTP Header Live 8、Vulners Web Scanner 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏一键三连支持以下哦…

火狐浏览器设置脚本

第一步&#xff0c;打开火狐浏览器&#xff0c;点击如下位置 第二步&#xff0c;进入扩展和主题。 第三步&#xff0c;在搜索框中搜Tampermonkey。 第四步&#xff0c;下载加入拓展&#xff0c;并自动弹出页面。在用户脚本出搜寻你所需要的脚本。

谷歌与火狐Hackbar插件下载与安装

谷歌与火狐Hackbar插件下载与安装 首先下载Hackbar插件&#xff1a;https://github.com/Mr-xn/hackbar2.1.3 将其中的压缩包拖拽到Chrome的扩展程序。 点击详细信息在下面的“来源”处点击一个链接&#xff1a; 会跳转到给插件在Chrome中安装的文件位置&#xff0c;打开hackbar…

火狐浏览器安装AdGuard

火狐浏览器安装AdGuard扩展 由于一些特殊的原因&#xff0c;在国内无法通过火狐扩展商店直接安装AdGuard&#xff0c;在火狐扩展商店虽然能搜索出来 但是我们点击进入之后就会发现如下界面 那到底应该怎么安装呢&#xff1f;我们可以通过以下方法进行安装&#xff1a; 首先通过…

在线手动为火狐浏览器安装AdGuard扩展

在线手动为火狐浏览器安装AdGuard扩展 当你突然想要为火狐浏览器添加广告拦截扩展时&#xff0c;你可能会出现这样一个问题&#xff0c; 要想解决这个问题&#xff0c;可以尝试按以下操作完成添加 1、通过浏览器打开AdGuard扩展的官方主页https://github.com/AdguardTeam/Adg…

火狐浏览器模拟微信浏览器内核教程

众所周知&#xff0c;微信项目html5界面的开发时间会相对较长&#xff08;为什么这么说就不解释了&#xff09;&#xff0c;以及在微信浏览器内会出现一些无法在web端检测出的问题&#xff0c;笔者有 了模拟微信浏览器的想法&#xff0c;google之后&#xff0c;发现有方法来伪装…

设置火狐浏览器firefox模拟微信浏览器客户端,调试网站

首先&#xff0c;打开firefox的“附加组件”&#xff0c;安装“User Agent Switcher “。 第二、设置User Agent Switcher “&#xff0c;在浏览器右上角找到这个插件如图&#xff1a;&#xff0c;打开。 第三、在首选项里&#xff0c;加入下面的agent代码进去。 Mozilla/5.…