有部分客戶在使用HK32F103系列芯片的串口通訊時,偶爾出現數據錯誤的原因具體有以下幾點:
1.串口通訊時因為可能存在累計誤差偶爾造成數據錯誤。
2.用戶在配置串口波特率參數時因為HK有細微地方與ST不同。
下面就以上原因,用戶根據如下修改,可以使串口通訊正常工作。
對于波特率累計誤差,用戶可以采用三種方式來解決:
1. 修改STOP bit位數,把stop bit設成0.5,但是我們芯片的發(fā)送stop bit寬度也會變成0.5。這種方法要注意的是:對方芯片有可能無法接受0.5 stop bit。
2.把波特率設置稍微提高1%左右。比如對方發(fā)出115200bps,HK的芯片波特率需要設置為115200*1.01=116352bps(偏差小于1%)。
3.建議HK芯片和對方發(fā)送數據時,都不要背靠背發(fā)送。
關于上述第二種波特率參數配置,主要是用戶需要較高的波特率時,導致波特率配置寄存器的整數部分為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中斷觸發(fā)后: 除能IDLE中斷.
2.串口USART使用DMA傳輸時, DMA通道關閉后DMA_CNDTRn值Reload的問題。
這個與我們HK的DMA設置與ST略有不同,HK的DMA通道在關閉后,對應的DMA_CNDTRn的值會被重新加載為本次發(fā)送開始前用戶配置的值(即已經發(fā)送的數據個數)。如果客戶在dma發(fā)送完成后關閉了對應的通道,然后讀取其DMA_CNDTRn的值就會出現非零值。如果用戶想要使用拼接方式發(fā)送數據(在一次數據未發(fā)完前追加新的數據發(fā)送)且前一次數據已發(fā)送完成的情況下就會出現錯誤的數據拼接。
處理數據拼接的解決方案:
如果是單次數據發(fā)送模式,用戶在DMA數據發(fā)送完成后不用關閉DMA通道,在追加新的數據發(fā)送時,先在未關閉DMA通道的情況下調用庫函數讀出DMA_CNDTRn寄存器的值,再關閉DMA通道,然后追加新的數據到緩存buffer(可能是用戶在RAM中定義的一個數組),再啟用DMA發(fā)送,這樣來完成數據的拼接發(fā)送。
來源:航順芯片
審核編輯:湯梓紅
-
寄存器
+關注
關注
31文章
5343瀏覽量
120383 -
串口
+關注
關注
14文章
1554瀏覽量
76527 -
USART
+關注
關注
1文章
195瀏覽量
30859
發(fā)布評論請先 登錄
相關推薦
評論