stm32普通串口传输方式跟DMA串口传输方式每个字节的位数不一样

2019-03-23 15:07发布

标题可能没说清楚,这里具体说说。用示波器观察普通方式的串口传输,每个字节有一位起始位,八位数据位,两位停止位;而理论上我的设置是一位起始位,八位数据位,一位停止位,这里问题就来了,为什么会出现两位停止位呢?这里数据位数就对应不上了啊!但是即使数据对应不上,这时的通讯也是正常的,接收的整体数据也是对的,为什么呢?
相较而言,stm32的DMA传输方式下,示波器的波形则是正常的一位起始位,八位数据位,一位停止位。通讯也是正常的。作为一只资深小白瞬间就蒙圈了!期待大神路过~

此帖出自小平头技术问答
6条回答
tianshuihu
1楼 · 2019-03-23 22:53.采纳回答
 精彩回答 2  元偷偷看…… 0人看过
shijizai
2楼-- · 2019-03-23 19:25
/ 补充一下,两种方式都是用stm32库函数去写的
tianshuihu
3楼-- · 2019-03-24 01:21
再说说,一位与两位停止位的区别:
由于串口是异步通讯,即发送端和接收端的时钟不同源;假如没有起始位和停止位,一直连续传输的话,主机和从机的时钟误差很可能越来越大;
一方面方便为了区分每一字节的开头和结尾,一方面消除异步传输的时钟累计误差,所以引入了开始位和停止位....
停止位其实可以看作传输两个字节之间的固定空闲时间间隔,加入的空闲越长相对传输越可靠,但是传输效率下降

Rs-232串口的设计时序其实还比较简单,有兴趣具体可以百度了解一下
shijizai
4楼-- · 2019-03-24 03:38
tianshuihu 发表于 2018-11-10 20:53
正常停止位的位数是可以软件设定的,是不是没设置好?

如果接收是一位停止位的话,发送是一位或两位停止 ...

厉害厉害
shijizai
5楼-- · 2019-03-24 07:34
 精彩回答 2  元偷偷看……
tianshuihu
6楼-- · 2019-03-24 12:02
shijizai 发表于 2018-11-12 11:38
232的时序不就是串口通讯的时序么

是的

“串口”的范围比较大,其他还有485/422串口..... 各有特 {MOD},基本原理一致

一周热门 更多>