相信有小伙伴們遇到過這樣的問題,在使用GD32進行串口485發送的時候,明明發送了特定長度的數據,但從機就是不響應,現在就讓我們來解析下最常見的一個原因。
我們先來看一段代碼:

這是采用輪訓方式進行485發送的函數,首先將485傳輸方向設置為發送,然后進行長度為len的數據發送,發送完成后將485傳輸方向設置為接收??此七@段代碼沒有問題,但當放在MCU上運行后發現,從機會少收到兩個字節的數據。
這是因為,串口是有數據寄存器和移位寄存器,當最后一次判斷TBE不為“0”并調用usart_data_transmit函數后,實際上倒數第二個字節的數據正在發送移位寄存器中對外發送,最后一個字節在數據寄存器中,此時如果將485傳輸方向改為接收,那么最后兩個字節的數據將不會發送到485總線上。

解決這個問題的辦法也很簡單,只需要增加一個判斷TC的過程就可以了。

TC標志位用來指示是不是所有的數據(包括數據寄存器和發送移位寄存器)都已經發送完成,如果發送完成則置“1”。
前面講述的是使用輪訓方式進行發送,如果用DMA發送和中斷發送怎么辦呢?其實道理是一樣的,在DMA發送和中斷發送兩種模式中都要打開TC中斷,只有進入了TC中斷后,才能將傳輸方向切換為接收,小伙伴們明白了嗎?
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6076文章
45494瀏覽量
670275 -
串口
+關注
關注
15文章
1618瀏覽量
82810 -
GD32
+關注
關注
7文章
432瀏覽量
27342
發布評論請先 登錄
相關推薦
熱點推薦
GD32和STM32單片機的區別
GD32和STM32都是常見的32位單片機系列。STM32是意法半導體(STMicroelectronics)公司推出的產品線,而GD32則是國內公司長盛電子推出的產品線。
發表于 08-07 17:36
?7404次閱讀
什么是GD32
一、前言什么GD32?GD32是國內開發的一款單片機,據說開發的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有很多地方都是一樣的,不過
發表于 08-12 07:46
GD32芯片包添加步驟有哪些
**GD32芯片包添加步驟**GD32開發環境可以有多個選擇,常見的開發編譯環境有:Keil4,keil5,IAR。本教程針對keil5如何添加GD32系列mcu芯片型號做出講解。1.
發表于 11-22 08:30
如何利用stm32f407+485發送modbus RTU協議
任務內容用485發送modbus TCP協議,用modbus調試軟件modsim32 查看發送及響應的數據。用的是正點原子的開發板,stm32f407.任務實現485
發表于 02-21 07:04
RS485發送時,影響其他串口接收?為什么呢?
今天做了一個小項目1變連接的是航模遙控器接收SBUS數據。使用的是stm32的串口3。2還有一邊連接的是485控制云臺攝像頭,使用的是串口2轉485。正常sbus數據不會停,會一直接收。即使失控也會有數據,只要不掉電。但是當我給485
發表于 11-12 16:39
STM32F103ZET6基于RS485發送接收簡單例程
這是一個STM32F103ZET6基于HAL庫的RS485發送接收簡單例程,如需后期開發只需要添加自己的串口協議。
發表于 08-29 16:08
?306次下載
GD32 DMA串口通訊DEMO
GD32 DMA串口通訊GD32 USART0 DMA發送與接收不定長數據GD32E230簡介GD32E230采用DMA進行串口通訊例程
發表于 11-26 19:36
?74次下載
stm32f407+485發送modbus RTU協議 適合初學者
任務內容用485發送modbus TCP協議,用modbus調試軟件modsim32 查看發送及響應的數據。用的是正點原子的開發板,stm32f407.任務實現485
發表于 12-24 19:16
?63次下載
GD32芯片怎么樣?GD32芯片運行速度慢的原因
STM32、TI MSP、Freescale Kinetis等常見的MCU產品相比,GD32芯片具有低功耗、高性價比和良好的性能等特點。
發表于 08-07 18:25
?5480次閱讀
gd32和stm32哪個好?
gd32和stm32哪個好? GD32和STM32是兩種常見的微控制器系列,是開發者們常用的開發板核心。盡管它們相似之處很多,但它們也存在著差異,本文將深入探討GD32和STM32,分
GD32與STM32兼容嗎?
GD32與STM32兼容嗎? GD32與STM32是兩個不同的微控制器系列,是由兩個不同的公司設計和生產的。GD32系列是由國內的長沙國芯微電子設計和生產的,而STM32系列則是由歐洲
GD32 MCU ISP失敗的原因
玩過GD32的小伙伴們都知道,GD32 MCU支持ISP,即在系統編程,前面的常見問題也給大家講過什么是ISP,什么是IAP?那有沒有小伙伴遇到過ISP失敗的情況,失敗的原因是什么呢?
GD32 485發送異常最常見原因
評論