提问
采用STM32F407, DMA1 stream5(request: usart2_rx) DMA1 stream6(usart2_tx), USART2 global interrupt优先级设置为1,1; STREAM5,STREAM6 GLOBAL INTERRUPT优先级设置为0,0;
请问:NVIC设置中DMA1 STREAM5 GLOBAL INTERRUPT 和DMA1 STREAM6 GLOBAL INTERRUPT都已经选择了ENABLED, 但是是灰色显示的,而USART2 global interrupt也选择了ENALBED,但是是可以修改的状态;灰色不可修改的状态是什么意思?
在串口有数据接收时,是怎么调用中断服务程序的,先调DMA1_stream5_IRQHandler(void)还是先调USART2_IRQHnalder(void)?
调试时只发现程序调用了USART2_IRQHANDLER?不知道正不正确?
最新回答
1、中断优先级你根据各个中断响应优先需求来设置。一般来讲,在中断事件不多且中断服务程序都比较简洁时,优先级都设置一样也问题不大。
在系统功能复杂,中断众多时,优先级的合理安排就显得很重要了。2、你在cubeMx配置里看到DMA中断使能是灰色时,这里表示不能手动,CubeMx已经默认帮我使能DMA相关中断响应了。
不必太过担心。
3、你现在都开启了UART基于DMA方式的收发,当收到数据时无须手动去查询和提取数据了,因为DMA帮完成了数据搬运。我们只需基于
DMA接收完成中断去你设置的接收缓冲里提取数据并进行可能的后续处理。建议稍微阅读下UART基于DMA接收的相关例程。