您的位置 首页 方案

奇偶校验你会用吗?

在工作中调试通讯时,发现有诸多的干扰数据出现,想想串口通讯除去外部硬件电路去除干扰外,还可以通过软件来滤掉干扰数据,于是我就想到了串口通讯中的奇偶校验。印象中,在编写STM32F030程序初始化串

  在作业中调试通讯时,发现有许多的搅扰数据呈现,想想串口通讯除掉外部硬件电路去除搅扰外,还能够通过软件来滤掉搅扰数据,所以我就想到了串口通讯中的奇偶校验。印象中,在编写STM32F030程序初始化串口时,对其装备的时分有一个特点是否运用奇偶查验。我想,只需要简略修正一下这一个特点,程序便功德圆满了。可是成果真的是我所意料的吗?请看下文。

  咱们先来看一下STM32F030的串口初始化程序,程序清单如下:

  USART_InitStructure.USART_BaudRate = 115200; 波特率

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;数据位8位

  USART_InitStructure.USART_StopBits = USART_StopBits_1;中止位1位

  USART_InitStructure.USART_Parity = USART_Parity_No;奇偶校验位无

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;无硬件流操控

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;使能发送与接纳功用

  USART_Init(USART1, &USART_InitStructure);初始化串口1

  上面这段程序没有特别之处,广泛示例于各大论坛,教程,而笔者也只是将上面奇偶校验位这一行,修正为了USART_InitStructure.USART_Parity = USART_Parity_Odd;即奇校验。然后,从头编译,下载,一切正常。可是……

  从图1能够清楚看到,在未修正之前,串口能正常接纳到字符串,可是在修正之后,取而待之的都是乱码。不论PC机软件装备为奇校验,偶查验,仍是无奇偶校验均无正确显现。登时,整个人的感觉就不好了。555……

  笔者也是借此机会深化了解了一下奇偶校验,与STM32F030芯片上的完成。现在将奇偶校验知道的三大误区及使用完成共享给咱们。

  误区一:修正一下串口装备参数就能够了吗?

  这个误区我觉得应该放在第一位,首要由于笔者首要就这样以为的。通过上面的实例,也现已充分阐明仅修正一个特点是无法完成的。通过仔细阅览编程手册,发现在装备奇偶校验特点后,必需要修正数据位为9位,不然PC端无法接纳。以下是笔者查询到的材料(STM32F10xxx参考手册):

  通过上面的截图(图2),咱们能够看到,假如将串口装备为了奇校验,且数据位为8位,那么数据位的位7将被替换为奇查验位——也就是说,原有的数据被损坏了。这也就证明了图1为什么会呈现乱码的现象了。

  已然发现了过错,那就要处理。通过查询相关文档,与详细阅览STM32芯片编程手册,最终通过以下装备即可完成正常发送,与奇偶校验。程序装备清单如下:

  USART_InitStructure.USART_WordLength = USART_WordLength_9b;

  USART_InitStructure.USART_Parity = USART_Parity_Odd;

  假如将数据位数扩展成9位,那么奇偶校验位将占用新刺进的位8,也就不用损坏原数据。通过编译与下载程序,并在PC机上验证,此办法的确可行,PC机数据正常接纳,再次重现”Hello EEPW”。

  误区二:PC机串口软件无法完成奇偶校验发送?

  笔者在查阅材料的时分发现有很多网友都有这样的观念,可是笔者的PC机软件的确是能够发送奇偶查验的。通过屡次试验笔者发现,SScomm串口工具软件v3.2版别无法完成,但SScomm版别v4.2能够完成。

  尽管说是完成奇偶校验,可是仅限发送时会发送严厉依照装备要求发送,即会发送奇偶校验位,然后下位机将正常接纳。可是接纳的时分,并不表明奇偶校验位过错,上位机不会接纳数据——上位机的详细完成也是这样的。上位机不论奇偶校验是否正确,仍然会正常显现接纳的数据,这个并不影响咱们实践使用,也只是阐明一下罢了。

  误区三:STM32F030装备了奇偶校验位,就不会接纳到过错的字节了

  很惋惜,这个也是非常大的误区。通过在线仿真的数据抓取。STM32F030装备为奇校验,不论上位装备了哪一项,均能正常接纳到数据。可是,仍是有不同的当地的。假如奇偶校验敞开后,当产生奇偶校验过错时,会触发硬件奇偶校验失利事情,假如敞开了奇偶校验失利中止,那么硬件将进入奇偶校验中止。

  以上三个误区笔者现已悉数剖析结束,那么下面咱们将怎么针对STM32F030芯片的特性来完成串口通讯奇偶校验呢?

  在下位机软件上,通过误区一的剖析,咱们需要将下位机STM32F030的串口装备为数据位9位,奇查验或偶查验,然后敞开奇偶校验位异常中止。再通过奇偶校验异常中止中将此次接纳到的数据丢掉,以完成过错字节的滤除。这儿要特别注意,敞开奇偶校验中止一定要优先装备,至少要在接纳中止敞开之前,详细原因笔者尚未能查询到。

  至于硬件做了些什么,硬件只是填充了奇偶校验位,并提示了过错信息,其并不会为咱们自动去除接纳的数据。

  关于PC机上的串口软件,咱们并不需要设置成为数据位9位,而是有必要装备成数据位8位——当然,在笔者下载的几款串口工具软件里均无法装备成数据9位。相应的奇偶校验位需要与下位机相同即可。

  通过以上的软件装备,现在根据STM32F030芯片的通讯现已作业正常了,我的经历也暂时总结到这儿了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/115875.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部