提問
采用STM32F407, DMA1 stream5(request: usart2_rx) DMA1 stream6(usart2_tx), USART2 global interrupt優(yōu)先級設置為1,1; STREAM5,STREAM6 GLOBAL INTERRUPT優(yōu)先級設置為0,0;
請問:NVIC設置中DMA1 STREAM5 GLOBAL INTERRUPT 和DMA1 STREAM6 GLOBAL INTERRUPT都已經(jīng)選擇了ENABLED, 但是是灰色顯示的,而USART2 global interrupt也選擇了ENALBED,但是是可以修改的狀態(tài);灰色不可修改的狀態(tài)是什么意思?
在串口有數(shù)據(jù)接收時,是怎么調用中斷服務程序的,先調DMA1_stream5_IRQHandler(void)還是先調USART2_IRQHnalder(void)?
調試時只發(fā)現(xiàn)程序調用了USART2_IRQHANDLER?不知道正不正確?
最新回答
1、中斷優(yōu)先級你根據(jù)各個中斷響應優(yōu)先需求來設置。一般來講,在中斷事件不多且中斷服務程序都比較簡潔時,優(yōu)先級都設置一樣也問題不大。
在系統(tǒng)功能復雜,中斷眾多時,優(yōu)先級的合理安排就顯得很重要了。2、你在cubeMx配置里看到DMA中斷使能是灰色時,這里表示不能手動,CubeMx已經(jīng)默認幫我使能DMA相關中斷響應了。
不必太過擔心。
3、你現(xiàn)在都開啟了UART基于DMA方式的收發(fā),當收到數(shù)據(jù)時無須手動去查詢和提取數(shù)據(jù)了,因為DMA幫完成了數(shù)據(jù)搬運。我們只需基于
DMA接收完成中斷去你設置的接收緩沖里提取數(shù)據(jù)并進行可能的后續(xù)處理。建議稍微閱讀下UART基于DMA接收的相關例程。