在作业中调试通讯时,发现有许多的搅扰数据呈现,想想串口通讯除掉外部硬件电路去除搅扰外,还能够通过软件来滤掉搅扰数据,所以我就想到了串口通讯中的奇偶校验。印象中,在编写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芯片的通讯现已作业正常了,我的经历也暂时总结到这儿了。