<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 奇偶校驗你會(huì )用嗎?

奇偶校驗你會(huì )用嗎?

作者:jobs 時(shí)間:2015-09-21 來(lái)源:電子產(chǎn)品世界 收藏

  在工作中調試通訊時(shí),發(fā)現有諸多的干擾數據出現,想想串口通訊除去外部硬件電路去除干擾外,還可以通過(guò)軟件來(lái)濾掉干擾數據,于是我就想到了串口通訊中的。印象中,在編寫(xiě)F030程序初始化串口時(shí),對其配置的時(shí)候有一個(gè)屬性是否使用奇偶檢驗。我想,只需要簡(jiǎn)單修改一下這一個(gè)屬性,程序便大功告成了??墒墙Y果真的是我所預料的嗎?請看下文。

本文引用地址:http://dyxdggzs.com/article/280413.htm

  我們先來(lái)看一下F030的串口初始化程序,程序清單如下:

  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;位無(wú)

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;無(wú)硬件流控制

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;使能發(fā)送與接收功能

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

  上面這段程序沒(méi)有特別之處,廣泛示例于各大論壇,教程,而筆者也只是將上面位這一行,修改為了USART_InitStructure.USART_Parity = USART_Parity_Odd;即奇校驗。然后,重新編譯,下載,一切正常??墒?hellip;…

  從圖1可以清楚看到,在未修改之前,串口能正常接收到字符串,但是在修改之后,取而待之的都是亂碼。無(wú)論PC機軟件配置為奇校驗,偶檢驗,還是無(wú)奇偶校驗均無(wú)正確顯示。頓時(shí),整個(gè)人的感覺(jué)就不好了。555……

  筆者也是借此機會(huì )深入了解了一下奇偶校驗,與F030芯片上的實(shí)現?,F在將奇偶校驗認識的三大誤區及應用實(shí)現分享給大家。

  誤區一:修改一下串口配置參數就可以了嗎?

  這個(gè)誤區我覺(jué)得應該放在第一位,主要因為筆者首先就這樣認為的。通過(guò)上面的實(shí)例,也已經(jīng)充分說(shuō)明僅修改一個(gè)屬性是無(wú)法實(shí)現的。通過(guò)仔細閱讀編程手冊,發(fā)現在配置奇偶校驗屬性后,必須要修改數據位為9位,否則PC端無(wú)法接收。以下是筆者查詢(xún)到的資料(STM32F10xxx參考手冊):

  通過(guò)上面的截圖(圖2),我們可以看到,如果將串口配置為了奇校驗,且數據位為8位,那么數據位的位7將被替換為奇檢驗位——也就是說(shuō),原有的數據被破壞了。這也就證明了圖1為什么會(huì )出現亂碼的現象了。

  既然發(fā)現了錯誤,那就要解決。通過(guò)查詢(xún)相關(guān)文檔,與詳細閱讀STM32芯片編程手冊,最后通過(guò)以下配置即可實(shí)現正常發(fā)送,與奇偶校驗。程序配置清單如下:

  USART_InitStructure.USART_WordLength = USART_WordLength_9b;

  USART_InitStructure.USART_Parity = USART_Parity_Odd;

  如果將數據位數擴展成9位,那么奇偶校驗位將占用新插入的位8,也就不必破壞原數據。通過(guò)編譯與下載程序,并在PC機上驗證,此方法確實(shí)可行,PC機數據正常接收,再次重現”Hello EEPW”。

  誤區二:PC機串口軟件無(wú)法實(shí)現奇偶校驗發(fā)送?

  筆者在查閱資料的時(shí)候發(fā)現有好多網(wǎng)友都有這樣的觀(guān)念,但是筆者的PC機軟件的確是可以發(fā)送奇偶檢驗的。通過(guò)多次實(shí)驗筆者發(fā)現,SScomm串口工具軟件v3.2版本無(wú)法實(shí)現,但SScomm版本v4.2可以實(shí)現。

  雖然說(shuō)是實(shí)現奇偶校驗,但是僅限發(fā)送時(shí)會(huì )發(fā)送嚴格按照配置要求發(fā)送,即會(huì )發(fā)送奇偶校驗位,從而下位機將正常接收。但是接收的時(shí)候,并不表示奇偶校驗位錯誤,上位機不會(huì )接收數據——上位機的具體實(shí)現也是這樣的。上位機不管奇偶校驗是否正確,仍然會(huì )正常顯示接收的數據,這個(gè)并不影響我們實(shí)際應用,也只是說(shuō)明一下而已。

  誤區三:STM32F030配置了奇偶校驗位,就不會(huì )接收到錯誤的字節了

  很遺憾,這個(gè)也是非常大的誤區。通過(guò)在線(xiàn)仿真的數據抓取。STM32F030配置為奇校驗,無(wú)論上位配置了哪一項,均能正常接收到數據。但是,還是有不同的地方的。如果奇偶校驗開(kāi)啟后,當發(fā)生奇偶校驗錯誤時(shí),會(huì )觸發(fā)硬件奇偶校驗失敗事件,如果開(kāi)啟了奇偶校驗失敗中斷,那么硬件將進(jìn)入奇偶校驗中斷。

  以上三個(gè)誤區筆者已經(jīng)全部分析完畢,那么下面我們將如何針對STM32F030芯片的特性來(lái)實(shí)現串口通訊奇偶校驗呢?

  在下位機軟件上,通過(guò)誤區一的分析,我們需要將下位機STM32F030的串口配置為數據位9位,奇檢驗或偶檢驗,然后開(kāi)啟奇偶校驗位異常中斷。再通過(guò)奇偶校驗異常中斷中將此次接收到的數據丟棄,以實(shí)現錯誤字節的濾除。這里要特別注意,開(kāi)啟奇偶校驗中斷一定要優(yōu)先配置,至少要在接收中斷開(kāi)啟之前,具體原因筆者尚未能查詢(xún)到。

  至于硬件做了些什么,硬件僅僅填充了奇偶校驗位,并提示了錯誤信息,其并不會(huì )為我們主動(dòng)去除接收的數據。

  對于PC機上的串口軟件,我們并不需要設置成為數據位9位,而是必須配置成數據位8位——當然,在筆者下載的幾款串口工具軟件里均無(wú)法配置成數據9位。相應的奇偶校驗位需要與下位機相同即可。

  經(jīng)過(guò)以上的軟件配置,現在基于STM32F030芯片的通訊已經(jīng)工作正常了,我的經(jīng)驗也暫時(shí)總結到這里了。



關(guān)鍵詞: 奇偶校驗 STM32

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>