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