有部分客戶在使用HK32F103系列芯片的串口通訊時,偶爾出現數據錯誤的原因具體有以下幾點:
1.串口通訊時因為可能存在累計誤差偶爾造成數據錯誤。
2.用戶在配置串口波特率參數時因為HK有細微地方與ST不同。
下面就以上原因,用戶根據如下修改,可以使串口通訊正常工作。
對于波特率累計誤差,用戶可以采用三種方式來解決:
1. 修改STOP bit位數,把stop bit設成0.5,但是我們芯片的發送stop bit寬度也會變成0.5。這種方法要注意的是:對方芯片有可能無法接受0.5 stop bit。
2.把波特率設置稍微提高1%左右。比如對方發出115200bps,HK的芯片波特率需要設置為115200*1.01=116352bps(偏差小于1%)。
3.建議HK芯片和對方發送數據時,都不要背靠背發送。
關于上述第二種波特率參數配置,主要是用戶需要較高的波特率時,導致波特率配置寄存器的整數部分為1,還存在小數部分的情況。這時HK芯片對小數部分會被忽略掉,導致USART輸出的bit寬度不對。出現這種應用時,用戶需要調整USART工作頻率和波特率的關系,避免波特率配置寄存器的整數部分為1,還存在小數部分。
另外應用串口(USART)還應注意以下2點:
1.串口USART RX IDLE中斷問題
用戶串口通訊打開了RX IDLE中斷后出現反復進入的原因是因為IDLE中斷標志不能清除。
解決方法:
Step 1. 關閉IDLE 中斷.
Step 2. 在RXNE 事件后:
A. 清除IDLE標志.
B. 然后使能IDLE中斷.
Step 3. 在IDLE中斷觸發后: 除能IDLE中斷.
2.串口USART使用DMA傳輸時, DMA通道關閉后DMA_CNDTRn值Reload的問題。
這個與我們HK的DMA設置與ST略有不同,HK的DMA通道在關閉后,對應的DMA_CNDTRn的值會被重新加載為本次發送開始前用戶配置的值(即已經發送的數據個數)。如果客戶在dma發送完成后關閉了對應的通道,然后讀取其DMA_CNDTRn的值就會出現非零值。如果用戶想要使用拼接方式發送數據(在一次數據未發完前追加新的數據發送)且前一次數據已發送完成的情況下就會出現錯誤的數據拼接。
處理數據拼接的解決方案:
如果是單次數據發送模式,用戶在DMA數據發送完成后不用關閉DMA通道,在追加新的數據發送時,先在未關閉DMA通道的情況下調用庫函數讀出DMA_CNDTRn寄存器的值,再關閉DMA通道,然后追加新的數據到緩存buffer(可能是用戶在RAM中定義的一個數組),再啟用DMA發送,這樣來完成數據的拼接發送。
來源:航順芯片
審核編輯:湯梓紅
-
寄存器
+關注
關注
31文章
5363瀏覽量
121162 -
串口
+關注
關注
14文章
1557瀏覽量
77040 -
USART
+關注
關注
1文章
195瀏覽量
30968
發布評論請先 登錄
相關推薦
HK32MCU應用筆記(四)| 關于老版本HK32F103串口USART偶爾出現數據錯誤
![<b class='flag-5'>HK32MCU</b>應<b class='flag-5'>用筆記</b>(<b class='flag-5'>四</b>)| <b class='flag-5'>關于</b><b class='flag-5'>老版本</b><b class='flag-5'>HK32F103</b><b class='flag-5'>串口</b><b class='flag-5'>USART</b><b class='flag-5'>偶爾</b><b class='flag-5'>出現</b><b class='flag-5'>數據</b><b class='flag-5'>錯誤</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
HK32MCU應用筆記(十六)| HK32F103xC/D/E-Timer的應用及注意事項
HK32MCU應用筆記(十五)| HK32F103xC/D/E-同步注入模式下,ADC2工作狀態不能單獨配置
![<b class='flag-5'>HK32MCU</b>應<b class='flag-5'>用筆記</b>(十五)| <b class='flag-5'>HK32F103</b>xC/D/E-同步注入模式下,ADC2工作狀態不能單獨配置](https://file1.elecfans.com/web2/M00/A4/9F/wKgaomUD6DiAAtCvAAGRjsBESEE134.png)
評論