| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> rt-thread nano stm32f103cbt6 蓝牙模块的通信(有整个工程的代码仓库) -> 正文阅读 |
|
[嵌入式]rt-thread nano stm32f103cbt6 蓝牙模块的通信(有整个工程的代码仓库) |
本项目代码仓库的网页:董昊旻/rt_nano_bluetoothhttps://gitee.com/donghaomin/rt_nano_bluetooth 目录 一,任务来源清明节在家呆着无聊就看了一个猪八戒发布的一个简单的任务,但是不会操作那些程序外包的东西,就把这个任务作为一个练手的小项目,打发一下时间,代码的思考,撰写和调试应该花了12个小时,昨天晚上5点到半夜1点(代码写到兴奋的睡不着觉,在地上站着玩了一个半小时手机才睡着),第二天的早上8点到12点。很大一部分时间花在了调试stm32的引脚,中断和串口上了,大学毕业之后就没用过stm32了,也没用过stm32clubMx,所以学习这个工具花了一点时间。 蓝牙模块我手里没有,因为长春疫情的原因我也没办法买,啥时候疫情结束我也不知道,就对着大夏龙雀的蓝牙文档盲写了。 硬件如下 二,任务描述下边这个图就是他发布的任务,这个东西仁者见仁智者见智,我感觉难度还行,就是比较费时间。 三,代码编写思路这个要是我大学的时候写,也就是三个小时之内,现在至少需要20个小时,哈哈。不是能力下降了,就是思考的问题不一样了。大学的时候一切以能用主义,写上去能用就OK,现在开始思考代码的可读性,可维护性,稳定性等等... 言归正传,既然思考的问题不一样,所以我们就先分割一下这个项目的功能。 1.带id的数据存储,还可以删除数据(我的理解是不用存储到norflash上,暂存到sram即可) 2.一个下降沿中断的GPIO 3.一路串口(我用的是UART2) 这个是硬件上的基础需求,然后我们聊一下软件的代码逻辑: (一)数据存储,删减我没有采取链表的结构来存储数据,第一是没必要这么复杂,它只要几十个数据用不了那么多,写着也麻烦。我就用一个机构体存储了温度数据和连接状态。DATA_SUM是40,这么一写的话就能存储40条数据了,还能存储蓝牙硬件初始化的完成状况和蓝牙连接的状态。 数据增加,你一按动按键的时候就将中断中的flag置1,在主循环的while(1)将数据加进去一个结构体中,将结构体中的useDataCount加一,超出40就报错,让他清空。 删除的话就更简单了,直接让这个大结构体memset为0,就OK了。
(二)蓝牙初始化,蓝牙发送过来的数据进行解析蓝牙模块初始化:蓝牙模块是通过"AT"指令进行配置的,为了避免有人用没配置过的蓝牙模块进行连接,所以我们就需要每次初始化的时候初始化,避免出现蓝牙模块配置的问题出现的BUG。 蓝牙数据解析:蓝牙发过来的数据是串口发送与接收的,我设置串口的缓冲BUFFER为10Byte,对这10Byte进行解析我们就能知道要做的事情。我用一个结构体来存储这10个Byte。代码里有注释,我就不详细描述了。 有了这个结构体,我们就可以做一个类似于"诊断"的接口,因此代码运行的逻辑就是,接收到串口的数据,在主函数中判断结构体的第一个数据really是不是0x01,是0x01的话就判断function id,在进入到不同得一级分支,在根据sub function id进入到二级分支,再根据datalenght来判断data的6Byte用了几个。具体这个6个Byte表达了那些内容就由,二级分支自己决定了。
蓝牙模块AT指令的判断我写了一个代码觉得很有趣下边贴出来,加了一个超时的处理。
运行的LOG,用串口模拟蓝牙,主机主动发AT,从机在10次请求内发OK,主机就认为蓝牙没问题。 我的代码结构如下图: diag负责分析和处理蓝牙接收的串口数据。 bluetooth负责蓝牙模块的初始化,检测蓝牙信号强度,连接状态等的函数(连接状态函数我会放到一个一秒周期的task中,连接上了blueTooth_connect_state就置0x01,掉了就0x00),蓝牙模块正不正常的话我就用AT指令测试,能回OK就将blueTooth_connect_state置0x02,不能就0x03,类似于这个意思推之后的逻辑。 hardware就是硬件初始化相关的函数,我初始化了UART2,PC13(LED),PA11(KEY)。 urs_data就是存储温度和其他基础结构体的头文件,初始化函数。 四,总结代码目前还没写完,目前处于一个初版本demo的状况,但是能用!你可以直接把代码下载下来,用RT Thread Studio编译下载到你的开发板,你也不用担心,开发板不兼容,因为我用的是核心板。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:19:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |