STM32F103学习记录——通过额外添加串口接口来接入ZigBee/蓝牙模块实现数据的远程传输
目录
- 项目场景
- 硬件准备
- 实现过程
- 实现缘由
- 原理展现
- 成果展现
- USB-TTL模块有线数据展示
- ZigBee模块远程传输数据展示
- 最后总结
项目场景
本人在做STM32硬件开发项目中,传输数据这一块的通信模块基本都是ZigBee或者蓝牙HC-05模块,这两个模块引脚上都有TX/RX进行数据的输出与输入;在开发前会以为通信这方面应该会非常的难,但其实数据传输的原理在代码上非常的简单,本文主要以ZigBee模块进行详细解释。
硬件准备
本项目前期需要准备的硬件有:
STM32开发板(我这边主要用的是STM32F103ZET6精英版,后续的代码在STM32F1都是通用的):
ZigBee模块(两个):
USB-TTL模块:
实现过程
实现缘由
代码链接:https://pan.baidu.com/s/1b4SwmOc-bZfcHyeL5mNzLw
提取码:adeh
本项目使用的是正点原子的代码模板,打开工程后,可以看到在HAREWARW文件里多了timer.c和usart3.c两个C语言文件,而SYSTEM文件中本身也有一个usart.c文件。
而usart3.c就是ZigBee模块进行通信的关键。
在原本的代码中,我们可以直接通过prinf();函数将数据以串口1的方式通过USB_232接口传入到电脑中,通过串口调试助手直接打印显示,并且打印的数据中英文都可以适用(中文可能会有传输损耗)。
然而这个串口接口很多时候也可以用来烧录代码,有很多功能的复用。因此我们大多情况下不能通过这个串口1接入ZigBee/蓝牙模块实现数据的远程传输
而且prinf();这个应该是C语言自带的函数方法,在keil5编程软件中是找不到源头的。
因此我们需要启用其他的串口接口,参考串口1的传输方式,采用串口3的接口,自己另写一个新的u3_printf();使得数据能够通过串口3,接入ZigBee模块,使得数据能够打印到电脑的串口调试助手中,实现数据的远程传输。
原理展现
在usart3.c中有这样一段代码:
是对串口3的初始化,对应的引脚为PB10和PB11;我们首先通过USB-TTL模块进行引脚连接,连接方式如下:
PB10-RX
PB11-TX
主函数代码如下所示:
int main(void){ delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先usart3_init(9600); uart_init(115200); //串口初始化为115200while(1){ delay_ms(300);printf("\r\n串口1发出消息");//串口1发出消息 通过(正常RS232串口)引线delay_ms(300);u3_printf("\r\n串口3发出消息");//串口3发出消息 通过(PB10输出 PB11输入 连接USB-TTL模块)引线delay_ms(300);}
}
可以看到有两个printf进行数据打印;其中u3_printf();的代码原理体现在uasrt3.c中的:
void u3_printf(char* fmt,...)
{ u16 i,j; va_list ap; va_start(ap,fmt);vsprintf((char*)USART3_TX_BUF,fmt,ap);va_end(ap);i=strlen((const char*)USART3_TX_BUF); //此次发送数据的长度for(j=0;j<i;j++) //循环发送数据{while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕 USART_SendData(USART3,USART3_TX_BUF[j]); }
}
通过这样的写法,就可以将数据通过串口3进行展现了,代码为了突出效果,将串口1和串口3数据同步输出,进行展现。
成果展现
USB-TTL模块有线数据展示
首先按之前串口3的连接方式连接硬件,如下图所示:
另一端连接到电脑,若烧录好代码后,该模块中的TXD附近的LED等会不断的闪烁:
由于本人用的是串口烧录,因此串口1也可以输出数据,打开两个串口调试助手,分别设置对应的串口和波特率,打开后数据接收情况如下图所示:
可以看到数据能够同步在两个串口中进行显示。
ZigBee模块远程传输数据展示
将两个ZigBee模块通过以下方式进行对应的配置:
接下来将其中一个ZigBee模块同之前的USB-TTL模块连接STM32板子的方式对应连接(USB-TTL模块在连接时可以不连接电源和地 但是Zigbee必须连接电源和地);
PB10-RX
PB11-TX
另一个ZigBee模块和USB-TTL模块连接到电脑,呈现样式如下:
本人是将STM32一方的ZigBee模块设为A端(呈现为双红色),接入电脑的一端为B端(呈现为双绿色);
两边连接成功之后,STM32一方的ZigBee模块会变成一红一绿,并且图中两个标红框位置的地方会同步闪烁红光,说明数据正在实时传输。
全文到这个地方,便基本实现了添加串口接口来接入ZigBee模块实现数据的远程传输。
最后总结
至此,我们就基本完成了再STM32上搭建ZigBee/蓝牙模块来实现数据的远程传输,可以结合之前STM32——两个模块代码的合并的博客对传感器采集到的数据进行整合,通过这里的传输方式上传到电脑中!
过程中可能有些地方没有说明清楚,还请大家多多交流,记得点赞+关注哦!!
STM32F103学习记录——通过额外添加串口接口来接入ZigBee/蓝牙模块实现数据的远程传输相关推荐
- 树莓派中SIM7600G-H 4G DONGLE模块使用记录(二)使用花生壳服务器实现数据的远程传输
项目场景: 在之前对树莓派进行PPP拨号上网/4G上网后,需要对树莓派中采集到的数据远程上传,并能接收云端软件下达的指令.然而在实现过程中,我们并不能够直接通过ITCP/IP通信实现数据的远程传输,还 ...
- ESP32学习记录<三>串口通信
ESP32学习记录<三>串口通信 文章目录 ESP32学习记录<三>串口通信 前言 一.通过串口打印出数据 1.初始化串口 2.打印数据 二.串口控制LED亮灭 1.接收串口发 ...
- android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出
通过手机进行通信是可以实现很多遥控功能,虽然距离是比较短,一般是10米,但对于我这种新手做测试,比起买一个几百块的多通道遥控器成本要低很多. 实验目的:用Android实现蓝牙连接通过Arduino串 ...
- 20100506 学习记录:grdview添加新的一行数据
目标: 每选择一个新的offercode,点按钮 把新记录添加进当前的grdview,并要记住之前添加的记录 思路: 从 offercode 取得该条记录信息 点击按钮添加时,给datatable创建 ...
- Java零基础学习记录11(抽象方法、接口、内部类)
** 1. 抽象类和抽象方法 ** (1) 简述抽象方法的特征 1.抽象方法中可有成员变量.成员方法.静态方法.final所修饰的方法.abstract所修饰的方法. 2.抽象方法只能声明在抽象类中( ...
- Axhub Charts学习记录贴-条形图添加正序排序/倒序排序功能
axure中添加条形图与两个按钮,为方便操作,为按钮分别命名为"正序排序""倒序排序" 为按钮添加单击交互事件,选择"更新行",目标对象选择 ...
- (转)爱剪辑学习记录_2.快速添加、截取、删除视频片段
一.添加视频 在软件主界面顶部点击"视频"选项卡,在视频列表下方点击"添加视频"按钮,在弹出的文件选择框添加视频片段. 图1:添加视频片段 二.通过" ...
- STM32F103学习记录-----GPIO篇
GPIO端口配置 32bit配置寄存器 GPIOx_CRL GPIOx_CRH 32bit数据寄存器 GPIOx_IDR GPIOx_ODR 32bit置位/复位寄存器 GPIOx_BSRR 16bi ...
- 学习记录:py3百度翻译接口
转-参考分析内容:https://blog.csdn.net/qq_16146103/article/details/108964249?utm_medium=distribute.pc_catego ...
最新文章
- 在Linux命令行下运行Matlab
- boost::geometry::detail::overlay::select_rings用法的测试程序
- HDU4302(map的用法)
- Ajax初体验(一)
- P1791-[国家集训队]人员雇佣【最大权闭合图】
- python的gui编程pyqt5_Python-GUI编程-PyQt5
- javascript指南_JavaScript的完整指南
- mysql哈希索引 kv_mysql8 参考手册--B树和哈希索引的比较
- C#.NET学习笔记1---C#.NET简介
- Hadoop学习记录(6)|Eclipse安装Hadoop 插件
- 多视几何_计算一副图像上的点在另一福图像上的对应点
- sql转义模块php,sql注入与转义的php函数代码_php技巧
- cad图形如何导入到奥维地图_如何将CAD图导入奥维地图
- 如何判断 msn 是否在线 [根据msn是否在线动态显示 msn 头像]
- polyval matlab 怎么用,matlab 中polyval的用法 最好能举个例子
- Day-3 文字排版
- hbase报错: ERROR: Can‘t get master address from ZooKeeper; znode data == null
- 网络中搜不到局域网内的其他计算机,局域网中搜不到其他计算机怎么修复
- ct是计算机软件分析报告吗,ct影像工作站|ct诊断报告系统|ct图文工作站|dicom软件系统|技易科技-医学影像软件网...
- HTTP权威指南与图解HTTP读书笔记
热门文章
- 复式、别墅、大户型无线wifi覆盖方案
- 基于3D等变图转换的条件抗体设计
- java8常见的stream流处理
- 网络编程——UDP协议的实践(词典翻译服务器(英译汉))
- oracle中句柄,释放句柄 – 提供7*24专业数据库(Oracle,SQL Server,MySQL等)恢复和Oracle技术服务@Tel:+86 13429648788 - 惜分飞...
- 试试基础的Spring Boot的面试题?(第一波)
- Ubuntu 各版本号和名称对照【转】
- ​2万字系统总结,带你实现Linux命令自由
- 宝塔开放php openssl,宝塔面板安装第三方插件 Encryption365™ SSL 证书宝塔客户端 – 可以申请IP证书...
- 白宫举办开源安全峰会,众多科技巨头参加