項(xiàng)目做到一半,碰到個(gè)尷尬問題:PWM使用的DMA通道與串口接收的DMA通道撞車了,咋辦?
考慮一下,決定放棄idle中斷+dma的串口不定長數(shù)據(jù)接收方案,回到中斷接收去。
中斷接收函數(shù)HAL_UART_RECEIVE_IT函數(shù)是個(gè)定長接收函數(shù),除非把接收長度設(shè)為1。由于我使用freertos系統(tǒng),打斷系統(tǒng)的時(shí)間應(yīng)盡可能少,頻率盡可能低。每個(gè)字節(jié)都進(jìn)一次hal庫的接收處理函數(shù),進(jìn)行各種判斷實(shí)在是不友好,因此考慮跳過hal的串口處理部分,直接判斷uart_flag_rxne標(biāo)志位與uart_flag_idle標(biāo)志位,存入接收緩沖。觸發(fā)idle中斷后認(rèn)為不定長數(shù)據(jù)接收完畢,進(jìn)行處理。
代碼:
中斷使能與初始化,不啟用hal_uart_receive_it。
中斷處理部分,跳過hal中斷處理函數(shù)
注意:__hal_uart_clear_flag函數(shù)不能清除idle標(biāo)志位,需要用古老的讀取方法清空。否則會卡死在中斷處理結(jié)束之后。
優(yōu)點(diǎn):中斷處理內(nèi)容盡可能簡化,降低對系統(tǒng)內(nèi)核的打斷;
缺點(diǎn):只適用于8位數(shù)據(jù)位,無校驗(yàn)位等最常規(guī)通信方式,對于更復(fù)雜參數(shù)的串口通信有待測試,省掉的hal庫會不會造成運(yùn)行不穩(wěn)定有待于繼續(xù)測試。
版權(quán)聲明:本文轉(zhuǎn)自CSDN,博主fox0815
遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
原文鏈接:https://blog.csdn.net/fox0815/article/details/106461788
審核編輯:何安
-
PWM
+關(guān)注
關(guān)注
116文章
5500瀏覽量
219300 -
串口
+關(guān)注
關(guān)注
15文章
1588瀏覽量
79884 -
dma
+關(guān)注
關(guān)注
3文章
576瀏覽量
103181
發(fā)布評論請先 登錄
在傳輸DMA通道中的所有緩沖區(qū)后,DMA標(biāo)志(就緒和部分)被卡住了是怎么回事?
Cyusb3014修改DMA大小為大于4KB時(shí),將不會在HOST端接收到任何數(shù)據(jù),為什么?
為什么在“PWM Adc Dma 344 S32CT”示例中使用ISR塊來讀取dma adc通道?
stm32 DMA串口接收到數(shù)組,數(shù)組元素順序錯亂怎么解決?
STM32G030F6 ADC+DMA多通道非連續(xù)采樣無法正常工作怎么解決?
STM32H743 UART DMA接收不到數(shù)據(jù),為什么?
CKS32F107xx系列的DMA控制器簡介

如何使用DMA進(jìn)行USART不定長度接收

ZYNQ基礎(chǔ)---AXI DMA使用

雅特力AT32F402/F405 DMA使用指南

DMA是什么?詳細(xì)介紹
STM32CUBEMX(2)--USART通過DMA方式接收不定長數(shù)據(jù)
揭秘車載VCU項(xiàng)目之外掛界的“大哥”DMA

評論