項目做到一半,碰到個尷尬問題:PWM使用的DMA通道與串口接收的DMA通道撞車了,咋辦?
考慮一下,決定放棄idle中斷+dma的串口不定長數(shù)據(jù)接收方案,回到中斷接收去。
中斷接收函數(shù)HAL_UART_RECEIVE_IT函數(shù)是個定長接收函數(shù),除非把接收長度設為1。由于我使用freertos系統(tǒng),打斷系統(tǒng)的時間應盡可能少,頻率盡可能低。每個字節(jié)都進一次hal庫的接收處理函數(shù),進行各種判斷實在是不友好,因此考慮跳過hal的串口處理部分,直接判斷uart_flag_rxne標志位與uart_flag_idle標志位,存入接收緩沖。觸發(fā)idle中斷后認為不定長數(shù)據(jù)接收完畢,進行處理。
代碼:
中斷使能與初始化,不啟用hal_uart_receive_it。

中斷處理部分,跳過hal中斷處理函數(shù)

注意:__hal_uart_clear_flag函數(shù)不能清除idle標志位,需要用古老的讀取方法清空。否則會卡死在中斷處理結束之后。
優(yōu)點:中斷處理內容盡可能簡化,降低對系統(tǒng)內核的打斷;
缺點:只適用于8位數(shù)據(jù)位,無校驗位等最常規(guī)通信方式,對于更復雜參數(shù)的串口通信有待測試,省掉的hal庫會不會造成運行不穩(wěn)定有待于繼續(xù)測試。
版權聲明:本文轉自CSDN,博主fox0815
遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接和本聲明。
原文鏈接:https://blog.csdn.net/fox0815/article/details/106461788
審核編輯:何安
-
PWM
+關注
關注
116文章
5828瀏覽量
223303 -
串口
+關注
關注
15文章
1603瀏覽量
81687 -
dma
+關注
關注
3文章
577瀏覽量
105139
發(fā)布評論請先 登錄
RVMCU課堂「18」: 手把手教你玩轉RVSTAR—DMA數(shù)據(jù)傳輸篇
rt-thread 在使用串口DMA模式的時候,接收數(shù)據(jù)接收不到00,為什么?
串口DMA接收數(shù)據(jù)包丟失怎么解決?
配置了串口DMA,現(xiàn)在是接收可以,發(fā)送不行,是什么地方沒有設置對嗎?
STM32F405RGT6 ADC2+TIM4觸發(fā)+DMA(DMA2_Stream2_CH1)+DMA中斷會死機,怎么解決?
求助,關于stm32H7多DMA數(shù)據(jù)流問題求解
STM32407使用串口閑時中斷+DMA方式接收最大接收字節(jié)是多少?
為什么在“PWM Adc Dma 344 S32CT”示例中使用ISR塊來讀取dma adc通道?
STM32G030F6 ADC+DMA多通道非連續(xù)采樣無法正常工作怎么解決?
CKS32F107xx系列的DMA控制器簡介
如何使用DMA進行USART不定長度接收
ZYNQ基礎---AXI DMA使用
雅特力AT32F402/F405 DMA使用指南

如何解決PWM使用的DMA通道與串口接收的DMA通道撞車問題
評論