搜索
bottom↓
回复: 20

STM32串口奇偶校验分析,奉送VC#串口代码

[复制链接]

出0入0汤圆

发表于 2010-9-29 20:03:41 | 显示全部楼层 |阅读模式
这段时间在实验室里静心研究,就做了点VC#2008串口通信的东西,在做串口通信的时候,我想说几点我这几天调试的经验。
第一,注意STM32串口设置的数据位
如果使用固件库的时候,一般串口是这么设置的。其实里面的东西也非常的简单,一般我们会设置数据的长度是8。
如果使用VC#编程的话,我们会使用几个下拉列表做一个串口设置的东西。我们同样会设置串口的数据长度为8。
那么,这两个数据长度8是不是一个意思呢。
那么我来做一个小试验。
先这么设置

(原文件名:图1.jpg)
发送这么一些数据

(原文件名:图2.jpg)
串口调试助手,这么设置,结果也非常的正确。

(原文件名:图3.jpg)
再来改变一下设置,串口参数这么设置(修改成Even形式,图片中代码部分被水印遮住了)

(原文件名:图4.jpg)
只是多了一个Even校验,我们再串口调试助手中同样改变校验的参数

(原文件名:图5.jpg)
但是调试的过程中,只能看到接收计数器每次累加4,但是却不显示任何字符。
那么我们修改一下数据格式,数据长度变为7。请看结果:

(原文件名:图6.jpg)
在有校验的情况下,为什么数据长度变为7的时候,结果反而正确了。难道STM32的数据长度8和串口设置的长度7有某种联系。
联系是必然的。大家请看STM32的USART的说明。

(原文件名:图7.jpg)
从这张图中可以看出,STM32USART中的数据长度要包括两个长度,数据的长度和校验位的长度。如果不打开数据校验是没有关系的,但是一旦打开数据校验,那么数据的最高位就会变成校验值。打个比方,如果STM32串口通信的数据长度为8,那么低7位为数据,最高位为校验值。这个时候PC机的串口设置就应该设置成数据的长度为7,记住有了校验那么传过来的最高位就是校验值了。如果STM数据的长度为9,那么数据有8位,奇偶校验1位。这样的话PC机可以设置成数据长度为8,并打开相应的校验。
总结一句。PC机的串口数据和校验的定义是分开的,而STM32串口中数据包括数据和校验,所以大家要多加小心。
第二,说说VC#的串口编写程序
这个我只能说的简单一点了,我不是专业编程的。但是我依然可以感觉到C#语言是非常方便的,VB的界面设计和C++的程序结构。严谨但不是简单。
在VC#中,串口通信是一个控件,非常的好用。
但是在使用的过程中还是要注意C# 的委托类和匿名方法。

(原文件名:图8.jpg)

出0入0汤圆

 楼主| 发表于 2010-9-29 20:06:19 | 显示全部楼层
回复【楼主位】xukai871105
-----------------------------------------------------------------------

IAR 5.4工程文件

点击此处下载 ourdev_586653JB8S90.rar(文件大小:303K) (原文件名:USART_STM32.rar)

VC#2008 串口调试代码
点击此处下载 ourdev_586654C9U5TJ.rar(文件大小:43K) (原文件名:SerialPort_VC#.rar)

说明文件 doc格式
点击此处下载 ourdev_586655YCLTTM.doc(文件大小:118K) (原文件名:VC#和STM32串口通信.doc)

出0入12汤圆

发表于 2010-9-29 20:39:07 | 显示全部楼层
多谢多谢,我也是用C#的,握个手先

出0入12汤圆

发表于 2010-9-29 20:41:36 | 显示全部楼层
顺便鄙视1下图片上那个水印,盖住了都看不见了

出0入0汤圆

 楼主| 发表于 2010-9-29 20:52:02 | 显示全部楼层
回复【3楼】skynet 青青草原
-----------------------------------------------------------------------
我看到了,写了一些说明希望大家可以明白

出0入0汤圆

发表于 2010-9-29 21:04:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-29 21:26:03 | 显示全部楼层
太好了。

出0入0汤圆

发表于 2010-9-29 21:42:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-15 16:35:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-18 17:35:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-12 14:50:18 | 显示全部楼层
谢谢!

出0入0汤圆

发表于 2011-7-28 17:24:11 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-12-5 17:14:38 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-12-6 15:07:33 | 显示全部楼层
设置串口校验位的时候偶校验设置为9位就可以了,这个情况遇到过

出0入0汤圆

发表于 2013-2-1 16:25:38 | 显示全部楼层
多谢了。。。。。。

出0入0汤圆

发表于 2013-3-3 19:40:31 | 显示全部楼层
非常好,找了半天为什么偶校验出错,现在终于明白了!

出0入0汤圆

发表于 2013-10-13 07:59:43 | 显示全部楼层
thanks a lot

出0入0汤圆

发表于 2013-11-11 09:27:26 | 显示全部楼层
刚遇到这个问题,顶一下。

出0入4汤圆

发表于 2014-5-25 07:59:43 | 显示全部楼层
太有用了,受教了

出0入0汤圆

发表于 2019-8-1 15:02:12 | 显示全部楼层
受教了,回想这个,以前走过的路都冤枉了

出0入0汤圆

发表于 2019-10-16 21:58:18 | 显示全部楼层
多谢了。。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 07:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表