久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10795|回復: 0
打印 上一主題 下一主題
收起左側

一個關于UART通信奇偶校驗出錯位的讀取話題

[復制鏈接]
跳轉到指定樓層
樓主
某客戶使用STM32F4系列芯片做產品開發,用到USART外設,將其配置在智能卡模式。USART配置為智能卡模式后,并開啟了奇偶校驗。

當MCU通過UART從卡端讀取數據時,如果讀到的數據發生奇偶校驗錯誤,根據相關通信協議,USART硬件會自動在剛收到數據的結尾處強行拉低數據線一個時間段告知智能卡控制器,表示USART接收到的數據奇偶校驗有錯,期待數據重發。


他發現,當UART從智能卡接收數據遇到奇偶校驗出錯時,的確可以從硬件線路上觀測到數據的重發。可他的軟件接收代碼里卻沒法分辨數據正誤,也就是說不管是否發生校驗錯誤,一律當作正確的數據接收了進來。他覺得甚為奇怪。

重點懷疑代碼問題,查看其相關代碼,他的數據接收流程大致是這樣的:

先檢測到USART_SR寄存器中的RXNE為1;然后從USAR_DR寄存器讀取數據;再接著檢測USART_SR寄存器中的校驗出錯位PE位是否為1,如果是1則丟棄剛才收到的數據。咋看上去,貌似沒啥問題。
如果查看STM32相關芯片的參考手冊就會發現,通過對USART_SR的讀和接著對USART_DR的讀操作序列會導致對RXNE和PE位的清零。


既然這樣,按照該客戶的做法,先讀SR,然后讀DR。這個連續操作之后已經就將RXNE和PE清零了,若再來讀PE,永遠讀不到它為1的時候,即發現不了校驗出錯的情況,自然導致數據全部被當做正確的收納了。


所以,他的接收代碼需要稍微調整下,先檢查到RXNE為1后,接著檢查PE是否為1,根據PE是否為1 來決定從DR中讀得數據的取舍并完成對PE和RXNE的清零。


STM32的寄存器中,尤其是那些狀態寄存器的部分狀態標志的置位和清零并不一定是簡單地、對應地直接置1寫0。比方有些寄存器位的清零是對相關寄存器位寫1;有些寄存器位的清零則個軟件操作序列。比方STM32F4/STM32F1系列中USART的PE位、ORE位就是通過軟件操作序列實現清零。STM32產品線眾多,即使相同外設的寄存器不同系列間的操作可能略有差異。比如這里談到的USART的PE位、ORE位,在STM32F0系列里是可以通過軟件對相關寄存器位寫1達到對其清零的目的,此時無需軟件操作序列。


當然,如果你使用ST官方的參考庫函數的話,有些細節可能感受不到。開發過程中在具體使用到某些并不熟悉的寄存器位時,適當地核對下手冊往往是個不錯的舉動。有時一個無意的想當然的舉動可能會浪費很多時間和精力。


簡單問題,分享出來,互為提醒。其實,開發過程中很多折騰人的地方往往就是些小細節。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线观看视频 | 欧美日韩在线播放 | 精品国产乱码久久久久久a丨 | 亚洲精品国产电影 | 九色porny自拍视频 | 国产精品欧美一区二区三区 | 亚洲欧美日韩电影 | 韩日在线 | 午夜私人影院在线观看 | 欧美一级全黄 | 午夜在线观看免费 | 欧美精品在欧美一区二区 | 精品久久久久一区二区国产 | www精品美女久久久tv | www.国产精品 | 国产精品免费观看 | 日韩人体视频 | 欧美亚洲国语精品一区二区 | 日韩亚洲一区二区 | 国产精品久久久久久久免费大片 | 手机看片1| 国产精品久久欧美久久一区 | 久久久久一区 | 福利视频一区二区 | 日韩精品一区在线 | 精国产品一区二区三区四季综 | 免费在线看黄视频 | 在线观看中文字幕av | 久一精品 | 国产成人精品久久二区二区 | 欧美精品综合在线 | 欧美三级电影在线播放 | 日韩在线视频一区 | 九九激情视频 | 色天堂视频 | 四虎成人精品永久免费av九九 | 天天操夜夜操 | 久久国产视频网 | 久久人人网 | 国产精品久久久久久久久久久久久 | 国产精品久久久久久久岛一牛影视 |