首页 > 版块 > STM32 > 帖子正文

轻松解码串口通信

蔡琰 发布于 2021-10-11 09:32
收藏 0 回复 0 浏览 284 原创

说到通信,在我们的生活方方面面体现的淋漓尽致,比如手机信号,WiFi等这些无线通信更是近些年热点,并且各种通信设备都出来了,真的是科技社会,对我们的生活太方便了。


对于通信,我们今天聊一下串口通信,其实做过单片机的基本都会用到,即便没有外设需求,就单独拎出来做个调试助手也是好的,可以通过和电脑通信直接打印出你想要的信息,直观。

常规的通信方式就类似下图这样,是不是看上去很简单~

1.jpg 

对于串口通信属于串行异步通信,有相应的协议,是不是读懂并遵守协议就可以通信了?不一定。哈,不要有疑问,一个模块的方方面面都要照顾到它才给你工作不是,如果你家养了一个小狗,你把狗粮都买好了,都倒在食盆里了,最后却忘记放到它能看到的地方,是不是会饿肚子了。属于前面的工作都是无效的。


我们先来了解下串口通信的底层规则都有哪些,通用规则你熟知了,然后选用不同款的单片机来控制的时候要再去研读对应单片机模块的相关配置,这个是必备的技能了。

接下来我们看下串口通信的格式:

2.jpg 

空闲位UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平
起始位:开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。

数据位:起始位之后就是要传输的数据,数据可以是56789位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。

奇偶校验位:数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验一般分以下3种方式:
1.无校验(no parity
2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’
3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’

停止位:数据结束标志,一般可以是1/1.5/2位的高电平。

波特率:数据传输速率使用波特率来表示,单位bpsbits per second

常见的波特率9600bps115200bps等等,其他标准的波特率是120024004800192003840057600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us

3.jpg 

电脑端的配置就要做出同样的选择才能通信,所以往往如果你的产品是需要串口通信的话,最基本的产品手册就要把这些信息写上,否则通信不上。通信如果没数据,可以通过示波器来单独测试发送和接收端口数据进行分析。

那么单个数据的规则有了,就是通信协议了,有自定义协议(方便定义,不方便客户开发)和标准协议(ModBus)等。话说如果自作产品端到端通信,那自定义协议就够用了,如果和外界通信,建议还是用标准协议,这样规则更强,方便扩展。

4.jpg 

对于标准协议ModBus,很多人还是会一知半解,如果有兴趣的话我可以单独拎出来一篇跟大家分享它的规则和使用方面的建议,毕竟我也算熟知,做了挺多产品的。附件我跟大家分享标准协议的相关规范文档,大家有兴趣记得下载去学习下。串口通信过程中碰到的层出不穷的问题可以和我交流啊,断帧,丢字节是常用的事,一般需要分段采集数据分析,发送接收状态寄存器的读取也有讲究的。对于不同的单片机我这里就不列举了,如果你有死结问题,可以一起分析哈~

关注我们,单片机实际经验分享或许会带你走出调试死结。

0 0
发表评论 侵权投诉
评论 (0)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。

文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。