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

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

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

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

聚沃科技 ? 2024-01-16 09:39 ? 次閱讀

相信有小伙伴們遇到過(guò)這樣的問(wèn)題,在使用GD32進(jìn)行串口485發(fā)送的時(shí)候,明明發(fā)送了特定長(zhǎng)度的數(shù)據(jù),但從機(jī)就是不響應(yīng),現(xiàn)在就讓我們來(lái)解析下最常見(jiàn)的一個(gè)原因。

我們先來(lái)看一段代碼:

wKgaomWl3gqAJZXVAABoigA4cuY198.png

這是采用輪訓(xùn)方式進(jìn)行485發(fā)送的函數(shù),首先將485傳輸方向設(shè)置為發(fā)送,然后進(jìn)行長(zhǎng)度為len的數(shù)據(jù)發(fā)送,發(fā)送完成后將485傳輸方向設(shè)置為接收??此七@段代碼沒(méi)有問(wèn)題,但當(dāng)放在MCU上運(yùn)行后發(fā)現(xiàn),從機(jī)會(huì)少收到兩個(gè)字節(jié)的數(shù)據(jù)。

這是因?yàn)?,串口是有?shù)據(jù)寄存器和移位寄存器,當(dāng)最后一次判斷TBE不為“0”并調(diào)用usart_data_transmit函數(shù)后,實(shí)際上倒數(shù)第二個(gè)字節(jié)的數(shù)據(jù)正在發(fā)送移位寄存器中對(duì)外發(fā)送,最后一個(gè)字節(jié)在數(shù)據(jù)寄存器中,此時(shí)如果將485傳輸方向改為接收,那么最后兩個(gè)字節(jié)的數(shù)據(jù)將不會(huì)發(fā)送到485總線上。

wKgaomWl3g6AGAiqAAFHRDPXKl8257.png

解決這個(gè)問(wèn)題的辦法也很簡(jiǎn)單,只需要增加一個(gè)判斷TC的過(guò)程就可以了。

wKgZomWl3hOAb3ZeAACHd7DUbGU502.png

TC標(biāo)志位用來(lái)指示是不是所有的數(shù)據(jù)(包括數(shù)據(jù)寄存器和發(fā)送移位寄存器)都已經(jīng)發(fā)送完成,如果發(fā)送完成則置“1”。

前面講述的是使用輪訓(xùn)方式進(jìn)行發(fā)送,如果用DMA發(fā)送和中斷發(fā)送怎么辦呢?其實(shí)道理是一樣的,在DMA發(fā)送和中斷發(fā)送兩種模式中都要打開(kāi)TC中斷,只有進(jìn)入了TC中斷后,才能將傳輸方向切換為接收,小伙伴們明白了嗎?

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

    關(guān)注

    6037

    文章

    44558

    瀏覽量

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

    關(guān)注

    14

    文章

    1554

    瀏覽量

    76522
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24353
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32和STM32單片機(jī)的區(qū)別

     GD32和STM32都是常見(jiàn)的32位單片機(jī)系列。STM32是意法半導(dǎo)體(STMicroelectronics)公司推出的產(chǎn)品線,而GD32則是國(guó)內(nèi)公司長(zhǎng)盛電子推出的產(chǎn)品線。
    發(fā)表于 08-07 17:36 ?5836次閱讀
    <b class='flag-5'>GD32</b>和STM32單片機(jī)的區(qū)別

    GD32 485發(fā)送異常最常見(jiàn)原因#GD32 #單片機(jī) #單片機(jī)開(kāi)發(fā) #嵌入式開(kāi)發(fā)

    mcu電工單片機(jī)開(kāi)發(fā)
    聚沃科技
    發(fā)布于 :2024年01月17日 09:46:38

    什么是GD32

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

    GD32芯片包添加步驟有哪些

    **GD32芯片包添加步驟**GD32開(kāi)發(fā)環(huán)境可以有多個(gè)選擇,常見(jiàn)的開(kāi)發(fā)編譯環(huán)境有:Keil4,keil5,IAR。本教程針對(duì)keil5如何添加GD32系列mcu芯片型號(hào)做出講解。1.
    發(fā)表于 11-22 08:30

    如何利用stm32f407+485發(fā)送modbus RTU協(xié)議

    任務(wù)內(nèi)容用485發(fā)送modbus TCP協(xié)議,用modbus調(diào)試軟件modsim32 查看發(fā)送及響應(yīng)的數(shù)據(jù)。用的是正點(diǎn)原子的開(kāi)發(fā)板,stm32f407.任務(wù)實(shí)現(xiàn)485
    發(fā)表于 02-21 07:04

    RS485發(fā)送時(shí),影響其他串口接收?為什么呢?

    今天做了一個(gè)小項(xiàng)目1變連接的是航模遙控器接收SBUS數(shù)據(jù)。使用的是stm32的串口3。2還有一邊連接的是485控制云臺(tái)攝像頭,使用的是串口2轉(zhuǎn)485。正常sbus數(shù)據(jù)不會(huì)停,會(huì)一直接收。即使失控也會(huì)有數(shù)據(jù),只要不掉電。但是當(dāng)我給485
    發(fā)表于 11-12 16:39

    STM32F103ZET6基于RS485發(fā)送接收簡(jiǎn)單例程

    這是一個(gè)STM32F103ZET6基于HAL庫(kù)的RS485發(fā)送接收簡(jiǎn)單例程,如需后期開(kāi)發(fā)只需要添加自己的串口協(xié)議。
    發(fā)表于 08-29 16:08 ?306次下載

    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串口通訊DEMO

    stm32f407+485發(fā)送modbus RTU協(xié)議 適合初學(xué)者

    任務(wù)內(nèi)容用485發(fā)送modbus TCP協(xié)議,用modbus調(diào)試軟件modsim32 查看發(fā)送及響應(yīng)的數(shù)據(jù)。用的是正點(diǎn)原子的開(kāi)發(fā)板,stm32f407.任務(wù)實(shí)現(xiàn)485
    發(fā)表于 12-24 19:16 ?58次下載
    stm32f407+<b class='flag-5'>485</b><b class='flag-5'>發(fā)送</b>modbus RTU協(xié)議 適合初學(xué)者

    485發(fā)送接收切換問(wèn)題討論

    485發(fā)送接收切換導(dǎo)致最后一位數(shù)據(jù)停止位丟失)現(xiàn)象現(xiàn)象單片機(jī)485發(fā)送接收常規(guī)做法是在發(fā)送完成中斷控制4
    發(fā)表于 01-14 13:20 ?6次下載
    <b class='flag-5'>485</b><b class='flag-5'>發(fā)送</b>接收切換問(wèn)題討論

    GD32芯片怎么樣?GD32芯片運(yùn)行速度慢的原因

    STM32、TI MSP、Freescale Kinetis等常見(jiàn)的MCU產(chǎn)品相比,GD32芯片具有低功耗、高性?xún)r(jià)比和良好的性能等特點(diǎn)。
    發(fā)表于 08-07 18:25 ?4191次閱讀

    gd32和stm32哪個(gè)好?

    gd32和stm32哪個(gè)好? GD32和STM32是兩種常見(jiàn)的微控制器系列,是開(kāi)發(fā)者們常用的開(kāi)發(fā)板核心。盡管它們相似之處很多,但它們也存在著差異,本文將深入探討GD32和STM32,分
    的頭像 發(fā)表于 08-16 11:32 ?1680次閱讀

    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 ?2944次閱讀

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

    前面我們介紹過(guò)GD32 485發(fā)送時(shí)出現(xiàn)異常最常見(jiàn)原因,有小伙伴反饋想要知道
    的頭像 發(fā)表于 01-18 09:57 ?4259次閱讀
    <b class='flag-5'>GD32</b> 串口接受<b class='flag-5'>異常</b>的幾個(gè)<b class='flag-5'>原因</b>

    GD32 MCU ISP失敗的原因

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