| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32串口通信 -> 正文阅读 |
|
[嵌入式]STM32串口通信 |
文章目录一.串口协议??串口协议又指串口通信指串口按位(bit)发送和接收字节,尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。 1.设备之间的通信方式常见串口通信的接口
按照通信方式
??在同步通信中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通信中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。 2.电平标准2.1 RS232??是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序)
??尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。 ??RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。
单片机串口与PC串口通信遵循下面的连接方式: 2.2 RS485?? RS485标准与RS232不一样,数据信号采用差分传输方式。RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,即通过AB两根线的电压差作为电平信号。差分信号能有效地抵御外界因素的干扰,因为干扰对两根线影响是一样的,两根线的电压差不变,信号传递也就不会受干扰。与TTL、RS232只能一对一连接不同,RS-485在总线上是允许连接多达128个收发器。抗干扰能力比RS232强很多。两线压差为-(26)V表示1,两线压差为+(26)V表示0,差分负逻辑。 ??RS-485
?? 传输距离:一般1Km以内都没有问题。理论上,通信速率在100Kpbs及以下时,RS485的最长传输距离可达1200米,但在实际应用中传输的距离也因芯片及电缆的传输特性而所差异。在传输过程中可以采用增加中继的方法对信号进行放大,最多可以加八个中继,也就是说理论上RS485的最大传输距离可以达到9.6公里。如果真需要长距离传输,可以采用光纤为传播介质,收发两端各加一个光电转换器,多模光纤的传输距离是5~10公里,而采用单模光纤可达50公里的传播距离
‘0’和‘1’表示: 2.3 TTL??TTL指双极型三极管逻辑电路,市面上很多**“USB转TTL”模块,实际上是“USB转TTL电平的串口”**模块。这种信号0对应0V,1对应3.3V或者5V。与单片机、SOC的IO电平兼容。不过实际也不一定是TTL电平,因为现在大部分数字逻辑都是CMOS工艺做的,只是沿用了TTL的说法。 ??我们进行串口通信的时候 从单片机直接出来的基本是都是TTL 电平。
‘0’和‘1’表示:
2.4对比我们知道常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑1,+15V表示逻辑0。 使用RS232与TTL电平校准表示同一个信号时的对比
3."USB/TTL转232"模块在这里笔者以CH340为例进行讲解 3.1 CH340简介??CH340 是一个USB 总线的转接芯片,实现USB 转串口、USB 转IrDA 红外或者USB 转打印口。在串口方式下CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。常用于MCU的自动下载电路中,驱动稳定性和通信速率都有不错的保障。为了增加串口通讯的远距离传输及抗干扰能力,RS-232标准使用-15V 表示逻辑 1, +15V 表示逻辑 0。常常会使用 MH340芯片对 USB/TTL与RS-232电平的信号进行转换。
3.2发送与接收
3.3USB转串口CH340
??可以对USB转串口模块进行测试,将USB的电压引脚用跳帽接上,然后将RXD和TXD两个引脚用跳帽或者杜邦线接上。然后打开串口终端,点击“手动发送”或者“自动发送”,如果在接收区可以接收到数据,说明USB转串口模块工作正常,否则需要检查接线是否正确、电路板元器件是否损坏。 ??VCC接线是为了单片机供电,USB转串口的RXD引脚与单片机的TXD引脚相连,USB转串口的TXD引脚与单片机的RXD引脚相连,两者的GND引脚直接相连。 二.STM32串口通信(寄存器)1.题目要求??完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式) 2.工程建立??首先建立基础工程,建立方式可参考笔者的此篇博客工程建立模块进行建立,只需要修改下usart.c和test.c文件即可。
??这里需要注意一点,因为我们使用到了串口的中断接收,必须在 usart.h 里面设置EN_USART1_RX 为 1(默认设置就是 1 的)。该函数才会配置中断使能,以及开启串口 1 的 NVIC中断。这里我们把串口 1 中断放在组 2,优先级设置为组 2 里面的最低。 (2)在test.c中编写如下代码:
??大家可以看到笔者在此处将波特率设置为了题目要求的“115200”,常用的还有9600。 ??当我们只开启一个串口通信时,我们可以直接用“printf”函数输出到我们的串口助手界面。但是如果我们要使用多个串口时,咱们的芯片就无法区分我们要输出的是哪个了,所以这个时候我们就要自己创建每个串口对应的输出函数了。但是在这里我们只开启了USART1,所以可以直接用“printf”函数就足够啦。 (3)
led.h代码
3.进行烧录由于笔者很早之前已经安装过CH340驱动了,没有安装的读者一定要记得安装否则会出现无法烧录的现象。 查阅数据手册可知,PA9对应TX,PA10对应RX 连接方式为
(1)进行编译看是否有错误,记得生成hex文件 (2)打开FlyMcu软件 选择串口,然后选择对应的hex文件,开始编程。 (3)打开串口助手
三.STM32串口通信(HAL库)
3.1创建工程(1)在STMCubeMX主界面,创建新项目,点击 (2)在 (3)选择 (4)波特率为115200,1位停止位,无校验位(这里不需要改,默认就是这样) (5)点击 (6)配置项目设置(名称、位置、环境) (7)生成项目 3.2程序编写(1)用keil打开刚刚在CubeMX生成的项目文件 (2)在main.c中定义STM32需要给上位机发送的消息
(3)在main.c中定义一个延时函数,来使设置发送的时间间隔
(4)在while循环中调用查询,并调用延时函数
最后编译即可 四.使用keil观察波形逻辑仿真分析仪的使用可以参考笔者之前的博客,里面有详细的介绍 ??在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。笔者在这里用此功能观察串口输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。 点击魔法棒进行配置 由于之前的代码是延时0.3s,可以看出还是比较接近的 五.重做流水灯实验详细可参考笔者上两篇博客,只是这里笔者进行了面包板的演示 https://blog.csdn.net/weixin_64559251/article/details/127157566?spm=1001.2014.3001.5501 1.面包板实现流水灯因为是低电平灯亮的方式,故而LED灯的正极连接面包板的电源。这里笔者采用了usb转ttl的方式实现流水灯。连接方式如图所示
2.keil逻辑分析仪按照之前所描述的过程,运行逻辑分析仪,得到如图所示的结果 六.总结本次笔者有了面包板再次完成了之前的LED流水灯实验。学习了解了串口协议,再此基础上通过看视频和查阅资料完成了基础的串口通信实验,可以发送hello Windows了,感觉有了更进一步的了解,受益匪浅。 参考 1.https://blog.csdn.net/qq_46467126/article/details/120841504?spm=1001.2014.3001.5502 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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年12日历 | -2024/12/28 2:19:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |