娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

使用串口空閑中斷和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)題。


關(guān)鍵字:stm32  串口  數(shù)據(jù)接收 引用地址:關(guān)于stm32串口不定長(zhǎng)數(shù)據(jù)接收(hal庫(kù))的若干問(wèn)題

上一篇:STM32F系列USART的IDLE中斷要注意了
下一篇:STM32F103RCT6+串口DMA方式接收定長(zhǎng)數(shù)據(jù)

推薦閱讀

USART_IT_IDLE中斷,是串口收到一幀數(shù)據(jù)后,發(fā)生的中斷。也可以叫做一包數(shù)據(jù)USART_IT_IDLE和USART_IT_RXNE區(qū)別 當(dāng)接收到1個(gè)字節(jié),會(huì)產(chǎn)生USART_IT_RXNE中斷 當(dāng)接收到一幀數(shù)據(jù),就會(huì)產(chǎn)生USART_IT_IDLE中斷清中斷方法//USART_IT_RXNEUSART_ClearITPendingBit(USART1, USART_IT_RXNE);//USART_IT_IDLEUSART1->SR; //先讀SR寄存器USART1->DR; //再讀DR寄存器...
魁北克市, Dec. 10, 2019 (GLOBE NEWSWIRE) -- 提供最通用的可擴(kuò)展汽車(chē)和出行 LiDAR 平臺(tái)行業(yè)領(lǐng)導(dǎo)者 LeddarTech?隆重宣布與先進(jìn)傳感器解決方案領(lǐng)先開(kāi)發(fā)商 First Sensor AG 進(jìn)行戰(zhàn)略合作,后者現(xiàn)在也將加入 Leddar 生態(tài)系統(tǒng)。 在 First Sensor 和其他行業(yè)領(lǐng)導(dǎo)者的支持下,LeddarTech 正在為 OEM 和一級(jí)制造商開(kāi)發(fā)這一唯一開(kāi)放和全面的...
如今,自動(dòng)駕駛卡車(chē)發(fā)展到哪一步了?誰(shuí)會(huì)需要它們?他們是如何發(fā)展的?和誰(shuí)一起測(cè)試? 本文將進(jìn)一步研究自動(dòng)駕駛卡車(chē)(AT)軟件平臺(tái)的潛在用戶(hù)。這里有三種類(lèi)型的AT軟件平臺(tái)用戶(hù): 物流車(chē)隊(duì)。例如UPS,F(xiàn)edEx,DHL,亞馬遜,沃爾瑪。 卡車(chē)OEM。戴姆勒(Daimler)、納維斯塔(Navistar)、帕卡(Paccar)、麥晉桁(Mack)和沃爾沃卡車(chē)(Volvo Trucks)就是例證。 貨運(yùn)車(chē)隊(duì)。...
12月8日,天風(fēng)國(guó)際分析師郭明錤發(fā)布最新研報(bào),曝光了數(shù)款蘋(píng)果即將發(fā)布的新品,包括想新款iPhone SE、新一代Apple Watch等等。  郭明錤在研報(bào)中指出,蘋(píng)果將于2022年上半年發(fā)布新款iPhone SE,采用4.7英寸屏幕,配備3GB內(nèi)存。  2022年下半年,新一代Apple Watch將于大家見(jiàn)面,包括Apple Watch 8、新款A(yù)pple Watch SE與極限運(yùn)動(dòng)版本。...

史海拾趣

問(wèn)答坊 | AI 解惑

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)電路的問(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)答∨

怎樣選擇MOSFET

隨著制造技術(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試用心得(1)

富士通鐵電存儲(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ā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 绍兴县| 朝阳区| 德惠市| 浦城县| 和顺县| 邵阳县| 常熟市| 大方县| 曲松县| 怀仁县| 东海县| 米易县| 肇州县| 噶尔县| 榆社县| 新民市| 舞钢市| 富宁县| 于田县| 衡东县| 平乐县| 木兰县| 郎溪县| 宜城市| 临澧县| 麻城市| 阳谷县| 武陟县| 岳阳县| 赣州市| 井冈山市| 泸定县| 潞西市| 乌什县| 太白县| 彭阳县| 崇左市| 新蔡县| 贵州省| 上犹县| 莲花县|