0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GD32 串口接受異常的幾個(gè)原因

聚沃科技 ? 2024-01-18 09:57 ? 次閱讀

前面我們介紹過GD32 485發(fā)送時(shí)出現(xiàn)異常的最常見原因,有小伙伴反饋想要知道GD32 串口接受異常的可能原因,今天我們就來安排。

一、波特率異常導(dǎo)致收發(fā)出錯(cuò)

我們知道,串口是異步通訊接口,通訊雙方或者多方都需要工作在相同波特率下,如果波特率不對(duì),則發(fā)送和接收都會(huì)異常。通常引起波特率異常的原因有以下幾種:

外部晶振頻率設(shè)置錯(cuò)誤

GD32 固件庫中,波特率的運(yùn)算是需要去獲取掛載這個(gè)串口的內(nèi)部總線的頻率

wKgaomWohQ-ALJt8AAEBK-4Gcd0028.png

而獲取總線頻率的的函數(shù)中需要用到HXTAL_VALUE這個(gè)值,即外部晶振的實(shí)際頻率。

wKgZomWohRWAZtpRAADPb5Tu77g076.png

GD32庫中這個(gè)值默認(rèn)是8M或25M,而有的小伙伴在用其他頻率的晶振時(shí),雖然根據(jù)實(shí)際頻率修改了配置主頻的函數(shù),但沒將HXTAL_VALUE這個(gè)值修改為實(shí)際值,就會(huì)導(dǎo)致配置出來的波特率和預(yù)想不符,從而導(dǎo)致波特率異常。

wKgaomWohRqAZ4gSAABZzLvczos644.png

晶振頻偏

如果外部和內(nèi)部晶振出現(xiàn)頻偏,也會(huì)導(dǎo)致波特率頻偏,這個(gè)很好理解,那么頻偏多少會(huì)出現(xiàn)異常呢?根據(jù)實(shí)際測(cè)試和經(jīng)驗(yàn),晶振出現(xiàn)2%的頻偏,就會(huì)導(dǎo)致串口異常。如果使用的外部晶振,可以直接測(cè)量晶振的波形:

wKgZomWohSCAYjJXAAQ-2Eq8nvo695.png

如果是用的內(nèi)部晶振,可以通過PA8口輸出內(nèi)部晶振頻率,再測(cè)量PA8口波形即可(如何使用PA8輸出內(nèi)部頻率,后面也會(huì)出教程哦)。至于為什么超過2%就出現(xiàn)異常,小伙伴們可以自己思考下哦。

wKgaomWohSWAcFpkAABb_TAWJEw682.png

二、接受過載

當(dāng)串口接收線上數(shù)據(jù)量較大,而軟件由于一些原因比如需要處理更高優(yōu)先級(jí)的任務(wù)時(shí),就可能會(huì)發(fā)生數(shù)據(jù)寄存器和移位寄存器中的數(shù)據(jù)都還沒有被讀走的情況下,又接收到新的數(shù)據(jù),此時(shí)串口發(fā)生接收過載。

wKgZomWohSqAKUvqAAFUuSfI-Po847.png

串口狀態(tài)寄存器中的ORERR位將會(huì)置“1”,新的數(shù)據(jù)也將不會(huì)被接收到MCU中,從而導(dǎo)致數(shù)據(jù)丟失。

wKgZomWohTWARiHlAAG-wm1GULY778.png

該問題的解決辦法:

(1)使用中斷進(jìn)行數(shù)據(jù)接收,且適當(dāng)提高中斷優(yōu)先級(jí),同時(shí)需要打開接收過載中斷,當(dāng)發(fā)送過載時(shí)表示有數(shù)據(jù)丟失,可以對(duì)這一幀數(shù)據(jù)做算法處理;

(2)使用DMA接受數(shù)據(jù),因?yàn)镈MA不需要CPU參與,故一般情況下不會(huì)出現(xiàn)接收過載。

三、接收的數(shù)據(jù)起始位不標(biāo)準(zhǔn)

我們知道,串口每個(gè)byte的數(shù)據(jù)都有一個(gè)起始位,占一個(gè)bit時(shí)間,如果由于一些原因?qū)е聦?duì)方發(fā)過來的數(shù)據(jù)起始位過短的話,MCU就無法識(shí)別到這個(gè)起始位,從而這個(gè)byte的數(shù)據(jù)就不會(huì)被接收。小編就見過因?yàn)榧恿烁綦x芯片導(dǎo)致起始位變短,而傳輸?shù)牡谝粋€(gè)數(shù)據(jù)bit位變長(zhǎng),雖然這個(gè)byte的數(shù)據(jù)時(shí)間是符合波特率的,但由于起始位不標(biāo)準(zhǔn),也將導(dǎo)致接收異常。

wKgaomWohT2AX46UAAB-xvefIss875.png

實(shí)際上這個(gè)問題只會(huì)在GD部分芯片上出現(xiàn),比如GD32F405/407/450,這是因?yàn)檫@幾顆芯片串口起始位的檢測(cè)比較嚴(yán)苛,而GD32有的型號(hào)做了起始位檢測(cè)優(yōu)化,比如GD32F30x、F425/427/470系列,就不會(huì)出現(xiàn)這樣的問題。

四、干擾

串口的發(fā)送和接收,實(shí)際上就是一串波形,當(dāng)波形收到干擾時(shí),也會(huì)出現(xiàn)通信異常。這種情況下,小伙伴們就要去通過硬件的方式去過濾到干擾源就可以解決問題了。

以上,就是小編總結(jié)的幾點(diǎn)串口接收異常的可能原因,小伙伴們有知道其他原因的,歡迎在評(píng)論區(qū)交流哦。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44452

    瀏覽量

    630786
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1535

    瀏覽量

    75876
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24048
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32用Embedded軟件debug在線調(diào)試失敗的原因?

    請(qǐng)問GD32用Embedded軟件debug在線調(diào)試失敗可能是什么原因?
    發(fā)表于 09-27 07:13

    GD32 串口接受異常幾個(gè)原因

    單片機(jī)mcu
    聚沃科技
    發(fā)布于 :2024年01月19日 10:42:07

    什么是GD32

    一、前言什么GD32GD32是國(guó)內(nèi)開發(fā)的一款單片機(jī),據(jù)說開發(fā)的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有很多地方都是一樣的,不過
    發(fā)表于 08-12 07:46

    GD32可以替換STM32嗎

    什么是GD32?GD32與STM32的區(qū)別在哪?GD32可以替換STM32嗎?
    發(fā)表于 10-20 07:03

    GD32 DMA串口通訊DEMO的相關(guān)資料推薦

    GD32 DMA串口通訊GD32 USART0 DMA發(fā)送與接收不定長(zhǎng)數(shù)據(jù)GD32E230簡(jiǎn)介GD32E230采用DMA進(jìn)行
    發(fā)表于 12-10 06:26

    淺析stm32f103&gd32的u***虛擬串口+打印類printer組合設(shè)備

    stm32f103&gd32的u***虛擬串口+打印類printer組合設(shè)備@TOCstm32f103&gd32的u***虛擬串口,打印類printer組合設(shè)備由于
    發(fā)表于 01-26 06:27

    GD32串口回環(huán)的設(shè)置解析

    GD32串口IO該怎樣去設(shè)置呢?GD32串口接收該怎樣去設(shè)置呢?
    發(fā)表于 02-28 06:33

    GD32和STM32的區(qū)別

    一、前言GD32是國(guó)內(nèi)開發(fā)的一款單片機(jī),據(jù)說開發(fā)的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有很多地方都是一樣的,不過GD32畢竟是不同的
    發(fā)表于 11-18 20:51 ?47次下載
    <b class='flag-5'>GD32</b>和STM32的區(qū)別

    GD32 DMA串口通訊DEMO

    GD32 DMA串口通訊GD32 USART0 DMA發(fā)送與接收不定長(zhǎng)數(shù)據(jù)GD32E230簡(jiǎn)介GD32E230采用DMA進(jìn)行
    發(fā)表于 11-26 19:36 ?74次下載
    <b class='flag-5'>GD32</b> DMA<b class='flag-5'>串口</b>通訊DEMO

    stm32f103&gd32的usb虛擬串口,打印類printer組合設(shè)備

    stm32f103&gd32的usb虛擬串口+打印類printer組合設(shè)備@TOCstm32f103&gd32的usb虛擬串口,打印類printer組合設(shè)備由于
    發(fā)表于 12-02 16:06 ?54次下載
    stm32f103&<b class='flag-5'>gd32</b>的usb虛擬<b class='flag-5'>串口</b>,打印類printer組合設(shè)備

    GD32選型手冊(cè)

    GD32選型手冊(cè)
    發(fā)表于 06-17 14:49 ?67次下載

    GD32與STM32兼容嗎?

    GD32與STM32兼容嗎? GD32與STM32是兩個(gè)不同的微控制器系列,是由兩個(gè)不同的公司設(shè)計(jì)和生產(chǎn)的。GD32系列是由國(guó)內(nèi)的長(zhǎng)沙國(guó)芯微電子設(shè)計(jì)和生產(chǎn)的,而STM32系列則是由歐洲
    的頭像 發(fā)表于 08-16 11:32 ?2745次閱讀

    GD32如何替換STM32?

    GD32如何替換STM32?
    的頭像 發(fā)表于 09-18 10:58 ?2023次閱讀
    <b class='flag-5'>GD32</b>如何替換STM32?

    GD32 485發(fā)送異常最常見原因

    相信有小伙伴們遇到過這樣的問題,在使用GD32進(jìn)行串口485發(fā)送的時(shí)候,明明發(fā)送了特定長(zhǎng)度的數(shù)據(jù),但從機(jī)就是不響應(yīng),現(xiàn)在就讓我們來解析下最常見的一個(gè)原因。
    的頭像 發(fā)表于 01-16 09:39 ?1058次閱讀
    <b class='flag-5'>GD32</b> 485發(fā)送<b class='flag-5'>異常</b>最常見<b class='flag-5'>原因</b>

    GD32 MCU ISP失敗的原因

    玩過GD32的小伙伴們都知道,GD32 MCU支持ISP,即在系統(tǒng)編程,前面的常見問題也給大家講過什么是ISP,什么是IAP?那有沒有小伙伴遇到過ISP失敗的情況,失敗的原因是什么呢?
    的頭像 發(fā)表于 02-28 09:23 ?1298次閱讀
    <b class='flag-5'>GD32</b> MCU ISP失敗的<b class='flag-5'>原因</b>