使用串口空閑中斷和DMA配合時(shí)出現(xiàn)的問(wèn)題:
問(wèn)題1.串口接收一旦溢出就會(huì)丟數(shù)據(jù)。
例如串口接收滿(mǎn)了,稍等幾秒再啟動(dòng)新的DMA接收函數(shù)HAL_UART_Receive_DMA時(shí),就丟失數(shù)據(jù)了,而且是再也收不到串口數(shù)據(jù)。如果接滿(mǎn)后馬上啟動(dòng)就沒(méi)這個(gè)問(wèn)題。
看官方示例代碼,停止DMA接收后似乎要DeInit后重新初始化Init和啟動(dòng)DMA接收
解答:
當(dāng)接收DMA關(guān)閉后,此時(shí)串口還是激活的,若此時(shí)串口來(lái)數(shù)據(jù),無(wú)法觸發(fā)DMA傳輸,此時(shí)產(chǎn)生上溢錯(cuò)誤(ORE),由于串口數(shù)據(jù)寄存器里的數(shù)據(jù)不能及時(shí)轉(zhuǎn)移走,后面來(lái)的數(shù)據(jù)就進(jìn)不來(lái)。一旦出現(xiàn)這種錯(cuò)誤后,就不會(huì)再觸發(fā)DMA請(qǐng)求,即使再開(kāi)啟DMA也不行。要恢復(fù)正常的話(huà)就只有Deinit后再重新初始化串口,或者直接將數(shù)據(jù)寄存器中的數(shù)據(jù)讀走后,后面的數(shù)據(jù)才能正常進(jìn)入,從而正常產(chǎn)生DMA請(qǐng)求,這個(gè)DMA請(qǐng)求是指硬件請(qǐng)求。
其實(shí)在STM32官網(wǎng)公眾號(hào)有文章介紹了該問(wèn)題,主要是先啟動(dòng)了串口再啟動(dòng)DMA就會(huì)容易引起該問(wèn)題。因此為了防止該問(wèn)題要不每次開(kāi)DMA都清ORE寄存器;要不按規(guī)矩先開(kāi)DMA再開(kāi)串口,不用了先關(guān)串口再關(guān)DMA
2.接收不完全
空閑中斷最大的一個(gè)問(wèn)題,就是發(fā)送方的一幀數(shù)據(jù)不能被打斷。不然stm32就會(huì)觸發(fā)空閑中斷,只接收到一幀的一部分?jǐn)?shù)據(jù)。假如兩個(gè)單片機(jī)通信,任意一個(gè)串口發(fā)送的過(guò)程被其他中斷打斷之后再回來(lái)繼續(xù)發(fā)送就會(huì)導(dǎo)致幀被截?cái)?
解答:
沒(méi)有FIFO 無(wú)解
3.串口DMA接收不能單獨(dú)停止。
例如串口同時(shí)在DMA發(fā)送和DMA接收,DMA接收到一半我要終止DMA的話(huà),只能調(diào)用HAL_UART_DMAStop把接收DMA和串口DMA都停止。
換言之,不能單獨(dú)停止DMA接收。
我理解的接收DMA和發(fā)送DMA是兩個(gè)獨(dú)立的操作,為什么不能單獨(dú)停止?
解答:
HAL_UART_DMAStop()是同時(shí)關(guān)收發(fā)DMA,
只關(guān)閉接收的函數(shù): HAL_UART_AbortReceive(); 該函數(shù)的兩個(gè)工作內(nèi)容:
1.先關(guān)閉接收DMA,HAL_DMA_Abort(huart->hdmarx);
2.置位RX ready狀態(tài),huart->RxState = HAL_UART_STATE_READY;
忽略了錯(cuò)誤標(biāo)志和IT標(biāo)志處理,最保險(xiǎn)的方式還是使用HAL_UART_AbortReceive()函數(shù)。
一種笨辦法::直接利用stm32的RXNE和IDLE中斷進(jìn)行接收不定字節(jié)數(shù)據(jù)。
基本知識(shí):
IDLE中斷什么時(shí)候發(fā)生?
IDLE就是串口收到一幀數(shù)據(jù)后,發(fā)生的中斷。什么是一幀數(shù)據(jù)呢?比如說(shuō)給單片機(jī)一次發(fā)來(lái)1個(gè)字節(jié),或者一次發(fā)來(lái)8個(gè)字節(jié),這些一次發(fā)來(lái)的數(shù)據(jù),就稱(chēng)為一幀數(shù)據(jù),也可以叫做一包數(shù)據(jù)。
如何判斷一幀數(shù)據(jù)結(jié)束,就是我們今天討論的問(wèn)題。因?yàn)楹芏囗?xiàng)目中都要用到這個(gè),因?yàn)橹挥薪邮盏揭粠瑪?shù)據(jù)以后,你才可以判斷這次收了幾個(gè)字節(jié)和每個(gè)字節(jié)的內(nèi)容是否符合協(xié)議要求。
看了前面IDLE中斷的定義,你就會(huì)明白了,一幀數(shù)據(jù)結(jié)束后,就會(huì)產(chǎn)生IDLE中斷。
如何配置好IDLE中斷?
下面我們就配置好串口IDLE中斷吧。
USART_CR
Bit4是 : IDLEIE 寄存器 Bit5是: RXNEIE
對(duì)Bit4寫(xiě)1開(kāi)啟IDLE中斷,對(duì)Bit5寫(xiě)1開(kāi)啟接收數(shù)據(jù)中斷。(注意:不同系列的STM32,對(duì)應(yīng)的寄存器位可能不同)
RXNE中斷和IDLE中斷的區(qū)別?
當(dāng)接收到1個(gè)字節(jié),就會(huì)產(chǎn)生RXNE中斷,當(dāng)接收到一幀數(shù)據(jù),就會(huì)產(chǎn)生IDLE中斷。比如給單片機(jī)一次性發(fā)送了8個(gè)字節(jié),就會(huì)產(chǎn)生8次RXNE中斷,1次IDLE中斷。
USART_ISR 狀態(tài)寄存器
Bit4是 : IDLE 寄存器 Bit5是: RXNE
這是狀態(tài)寄存器,當(dāng)串口接收到數(shù)據(jù)時(shí),bit5就會(huì)自動(dòng)變成1,當(dāng)接收完一幀數(shù)據(jù)后,bit4就會(huì)變成1.
需要注意的是,在中斷函數(shù)里面,需要把對(duì)應(yīng)的位清0,否則會(huì)影響下一次數(shù)據(jù)的接收。
比如RXNE接收數(shù)據(jù)中斷,只要把接收到的一個(gè)字節(jié)讀出來(lái),就會(huì)清除這個(gè)中斷。
IDLE中斷,如何是F0系列的單片機(jī),需要用ICR寄存器來(lái)清除,如果是F1系列的單片機(jī),清除方法是“先讀SR寄存器,再讀DR寄存器”。
串口初始化中開(kāi)啟兩個(gè)中斷:
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
中斷處理函數(shù)如下:
當(dāng)然你也可以先不管各種問(wèn)題,調(diào)試通了再說(shuō)。
按照以下教程即可正常收發(fā):
https://blog.csdn.net/xukao5671927/article/details/78605022
中斷里的
//HAL_UART_DMAStop(&huart2);
更改為:
HAL_UART_AbortReceive(&huart2);
即可修復(fù)收取數(shù)據(jù)的時(shí)候關(guān)閉了DMA導(dǎo)致不能發(fā)送得問(wèn)題。
上一篇:STM32F系列USART的IDLE中斷要注意了
下一篇:STM32F103RCT6+串口DMA方式接收定長(zhǎng)數(shù)據(jù)
推薦閱讀
史海拾趣
在激烈的市場(chǎng)競(jìng)爭(zhēng)中,品牌建設(shè)成為Amaze Electronics提升市場(chǎng)影響力的關(guān)鍵。公司注重品牌形象的塑造,通過(guò)舉辦各類(lèi)活動(dòng)、參與行業(yè)展會(huì)等方式,提高品牌知名度和美譽(yù)度。同時(shí),公司還注重產(chǎn)品質(zhì)量的把控,確保每一件產(chǎn)品都能體現(xiàn)公司的專(zhuān)業(yè)水準(zhǔn)和品質(zhì)追求。這些舉措有效提升了Amaze Electronics在市場(chǎng)上的影響力,吸引了更多客戶(hù)的關(guān)注和信賴(lài)。
為了進(jìn)一步提升競(jìng)爭(zhēng)力,ADC積極尋求與其他企業(yè)的戰(zhàn)略合作。通過(guò)與業(yè)界領(lǐng)先的企業(yè)建立合作關(guān)系,ADC成功整合了各方資源,共同研發(fā)新技術(shù)、新產(chǎn)品。這些合作不僅加速了ADC的技術(shù)創(chuàng)新步伐,也為其帶來(lái)了更多的商業(yè)機(jī)會(huì)。
隨著科技的不斷發(fā)展,AR RF/Microwave Instrumentation意識(shí)到要想在激烈的市場(chǎng)競(jìng)爭(zhēng)中保持領(lǐng)先地位,必須不斷進(jìn)行技術(shù)創(chuàng)新。公司投入大量資源進(jìn)行研發(fā),成功推出了一系列具有創(chuàng)新性的產(chǎn)品,如寬帶高功率放大器、固態(tài)射頻放大器等。這些產(chǎn)品不僅性能卓越,而且能夠滿(mǎn)足不同客戶(hù)的需求,進(jìn)一步鞏固了公司在行業(yè)內(nèi)的地位。
隨著公司實(shí)力的不斷增強(qiáng),Advanced Photonix開(kāi)始積極拓展國(guó)際市場(chǎng)。公司通過(guò)與海外企業(yè)建立合作關(guān)系,共同開(kāi)發(fā)新產(chǎn)品和新技術(shù),不斷拓寬產(chǎn)品應(yīng)用領(lǐng)域和市場(chǎng)范圍。同時(shí),公司還積極參加國(guó)際電子展會(huì)和技術(shù)交流會(huì)議,與全球同行進(jìn)行深入的交流和合作。這些舉措不僅提升了公司在國(guó)際市場(chǎng)的知名度和影響力,也為公司的長(zhǎng)期發(fā)展提供了更多的機(jī)遇和挑戰(zhàn)。
請(qǐng)注意,這些故事是根據(jù)一般情況虛構(gòu)的,并非基于Advanced Photonix公司的實(shí)際發(fā)展歷史。如果需要更具體、更準(zhǔn)確的信息,建議直接查閱該公司的官方資料或相關(guān)新聞報(bào)道。
隨著公司的發(fā)展,DAVE Embedded Systems不斷投入研發(fā)力量,致力于技術(shù)創(chuàng)新和產(chǎn)品創(chuàng)新。他們基于最新技術(shù)(如多核ARM Cortex、PowerPC和X86)設(shè)計(jì)了一系列高端嵌入式系統(tǒng)模塊,這些產(chǎn)品不僅滿(mǎn)足了客戶(hù)對(duì)性能的需求,還提供了更好的可靠性和可擴(kuò)展性。此外,公司還積極開(kāi)發(fā)基于Android和Windows平臺(tái)的嵌入式系統(tǒng)模塊,以滿(mǎn)足不同客戶(hù)的需求。
Deutronic Elektronik GmbH深知客戶(hù)服務(wù)的重要性,始終將客戶(hù)需求放在首位。公司建立了完善的客戶(hù)服務(wù)體系,為客戶(hù)提供全方位的服務(wù)支持。通過(guò)優(yōu)質(zhì)的產(chǎn)品和服務(wù),Deutronic Elektronik GmbH贏得了客戶(hù)的廣泛贊譽(yù)和信任。同時(shí),公司也注重品牌建設(shè)和提升,通過(guò)品牌推廣和營(yíng)銷(xiāo)活動(dòng),進(jìn)一步提升了品牌知名度和美譽(yù)度。
請(qǐng)注意,以上故事概要基于假設(shè)和邏輯構(gòu)建,可能不完全符合Deutronic Elektronik GmbH公司的實(shí)際發(fā)展歷程。如需更詳細(xì)和準(zhǔn)確的信息,請(qǐng)參考公司官方發(fā)布的歷史資料和新聞報(bào)道。
C51中g(shù)eneral pointer(一般指針)與Memory_Specific Pointer(存儲(chǔ)器指針)的區(qū)別? C51中g(shù)eneral pointer(一般指針)與Memory_Specific Pointer(存儲(chǔ)器指針)的區(qū)別是什么呢? #define XBYTE((char*)0x20000L) XBYTE[0x8000]=0x41; 這段程序是什么意思?望高手指點(diǎn)。… 查看全部問(wèn)答∨ |
|
哪個(gè)有單片機(jī)或者DSP做過(guò)數(shù)字電源???我現(xiàn)在選用DSP280X系列 哪個(gè)有單片機(jī)或者DSP做過(guò)數(shù)字電源???我現(xiàn)在選用DSP280X系列的,,,但是程序的定標(biāo)和PID算法和軟件AD校正方面還有點(diǎn)問(wèn)題,,哪個(gè)做過(guò) QQ 328277289 著名 電子工程世界 郵件 puyiyue1980@126.com… 查看全部問(wèn)答∨ |
三極管做開(kāi)關(guān)使其工作在飽和狀態(tài)下。 這樣能輸入比VCC低還能工作在飽和狀態(tài)么 不是集電極應(yīng)該正偏么 一般的電路時(shí)輸入和VCC相等 那集電極和基極的管壓降不也有0.5V么 怎么會(huì)正偏呢 搞不懂 請(qǐng)大蝦解答… 查看全部問(wèn)答∨ |
【幫忙好么】關(guān)于仿真成功,但是去掉JTAG失效問(wèn)題 我做了一個(gè)小系統(tǒng),按鍵控制LCD信息的一個(gè)work。在仿真的時(shí)候很聽(tīng)話(huà),但是去掉下載線(xiàn)就不行了,不明白為什么。。。 PS:四個(gè)按鍵,都是中斷接法。我把程序調(diào)整了一下發(fā)現(xiàn)如果不開(kāi)中斷可以順利運(yùn)行,但是 _EINT(); 執(zhí)行以后就沒(méi)有了反應(yīng)了。請(qǐng)問(wèn) ...… 查看全部問(wèn)答∨ |
用IAR實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存空間的分配 怎樣用IAR實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存空間的分配呢? 我首先定義了復(fù)數(shù)的結(jié)構(gòu)體 struct complex { dou××e real; dou××e image; }; 然后struct complex* fft_array=new struct complex[fft_n]; 這樣的程序代碼是C支持的,但是IAR確報(bào)了語(yǔ)法錯(cuò) Err ...… 查看全部問(wèn)答∨ |
關(guān)于內(nèi)部信號(hào)走全局時(shí)鐘網(wǎng)絡(luò)的問(wèn)題 各位大俠好,我現(xiàn)在有個(gè)問(wèn)題沒(méi)搞清楚,請(qǐng)教下. FPGA產(chǎn)生的一個(gè)內(nèi)部頻率信號(hào)怎么走全局時(shí)鐘網(wǎng),我目前是例化了這樣一個(gè)代碼,clk0是內(nèi)部邏輯分頻產(chǎn)生的信號(hào) BUFG myclock(.I(clk0), ...… 查看全部問(wèn)答∨ |
準(zhǔn)備做PCB的ADuCM360電路,再征意見(jiàn) 電路說(shuō)明 電路中,使用PT100作精確溫度測(cè)量,接于DR1、DR2,還使用了熱電偶作測(cè)溫用,接于DR3、DR4。芯片的DAC也可用于輸出測(cè)量數(shù)據(jù),輸出類(lèi)型為4mA~20mA電流,此部分電路由DAC、AIN8、AIN9端品及外圍元件組成,由DR5、DR6引出。此電路還可以作一般 ...… 查看全部問(wèn)答∨ |
隨著制造技術(shù)的發(fā)展和進(jìn)步,系統(tǒng)設(shè)計(jì)人員必須跟上技術(shù)的發(fā)展步伐,才能為其設(shè)計(jì)挑選最合適的電子器件。MOSFET是電氣系統(tǒng)中的基本部件,工程師需要深入了解它的關(guān)鍵特性及指標(biāo)才能做出正確選擇。本文將討論如何根據(jù)RDS(ON)、熱性能、雪崩擊穿電壓及 ...… 查看全部問(wèn)答∨ |
富士通鐵電存儲(chǔ)器MB85RC64試用心得 多年前就已知鐵電存儲(chǔ)器的存在,對(duì)他的特點(diǎn)也沒(méi)在意,覺(jué)得和其他存儲(chǔ)器差不多;看到富士通FRAM免費(fèi)申請(qǐng) 賽心得 贏大禮的活動(dòng),何不參加其中,既能增加對(duì)鐵電存儲(chǔ)器的認(rèn)識(shí)、增強(qiáng)產(chǎn)品設(shè)計(jì) ...… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 【下載】LAT1526 利用SPI的下溢實(shí)現(xiàn)回顯功能
- 【下載】LAT1509 STM32G0B1的FDCAN進(jìn)行通信丟包和多包案例分享
- 【下載】LAT1511 運(yùn)行Ux_Host_HUB_HID_MSC通過(guò)Hub連接U盤(pán)讀寫(xiě)不穩(wěn)定問(wèn)題分析
- 【下載】LAT1466 USB x Device HID Standalone的移植
- 【下載】LAT1488 STM32 USBxDevice MSC standalone移植示例
- 【下載】LAT1482 STM32G0單線(xiàn)串口通信幀錯(cuò)誤問(wèn)題解析
- 基于GPS自動(dòng)授時(shí)的無(wú)線(xiàn)智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線(xiàn)氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 基于HW2181B的航模無(wú)線(xiàn)遙控通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 應(yīng)對(duì)機(jī)器人“四高”,極海推出全球首款雙核Cortex-M52 MCU G32R501
- 非道路移動(dòng)機(jī)械透射式煙度計(jì)研究與實(shí)現(xiàn)
- 基于STM32F103的角磨機(jī)開(kāi)關(guān)磁阻電機(jī)控制器的設(shè)計(jì)
- 大眾汽車(chē)宣布明年起其所有電動(dòng)車(chē)型全面轉(zhuǎn)向磷酸鐵鋰電池,升級(jí)至MEB Plus平臺(tái)
- 總產(chǎn)值破2000億,深圳要做“機(jī)器人第一城”?
- 鴻道Intewell操作系統(tǒng) 人形機(jī)器人底層操作系統(tǒng)
- 如何定位國(guó)產(chǎn)智駕芯片的終局價(jià)值?
- 新一代車(chē)規(guī)級(jí)數(shù)字功放電感VSAD-T系列 為汽車(chē)音響注入高保真基因
- 蜂巢能源快充電池突破:15分鐘充至滿(mǎn)電,提升30%效率
- 整車(chē)操作系統(tǒng)何以躋身智能汽車(chē)三大件?
- 人形機(jī)器人如何做到“手眼”協(xié)同+“大小腦”協(xié)同?
- 中國(guó)電池公司獲英國(guó)政府10億英鎊支持!
- 從游戲到智能駕駛,英偉達(dá)有哪些技術(shù)升級(jí)?
- 城市+AI:華為云Stack重構(gòu)混合云+城市價(jià)值體系
- 華為也要進(jìn)軍電視市場(chǎng)了?希望不是曇花一現(xiàn)
- 瑞薩電宣布將退出兩大激光業(yè)務(wù)、關(guān)閉化合物半導(dǎo)體產(chǎn)線(xiàn)
- 彩電行業(yè)“愁云慘淡”,出路在哪里?
- 小米真高端OLED電視曝光:65寸屏幕
- 在政策的推動(dòng)下 資本市場(chǎng)和科技巨頭紛紛角逐服務(wù)機(jī)器人
- 國(guó)內(nèi)面板行業(yè)逐漸迎來(lái)黎明,京東方是否能超越三星?
- 韋爾自動(dòng)化連續(xù)第八年企業(yè)平等指數(shù)考核中獲得高分
- 可凈化空氣的耳機(jī)?戴森黑科技再出新產(chǎn)品
- 富士康鄭州深圳兩大產(chǎn)區(qū)獲返工率不足10%,產(chǎn)能受影響
- 如何檢測(cè)485總線(xiàn)是否能滿(mǎn)足應(yīng)用
- EEWORLD大學(xué)堂----使用SimpleLink解決方案開(kāi)發(fā)藍(lán)牙低功耗應(yīng)用1
- 基于電容數(shù)字轉(zhuǎn)換器 AD7746的物位測(cè)量系統(tǒng)
- 誰(shuí)來(lái)指導(dǎo)下我的畢設(shè)該怎么寫(xiě)啊?
- mcp2515復(fù)位不了是怎么回事啊
- M430F149怎么用J-link下載程序,怎么連線(xiàn)
- 一個(gè)關(guān)于延時(shí)的程序問(wèn)題?(C,左值)沒(méi)看懂,請(qǐng)高手指教。
- 2015年總結(jié):我依然是學(xué)霸
- 電梯到站提醒和故障自動(dòng)警報(bào)
- 一種新穎的電子式PS壓力傳感器