初级会员

- 积分
- 168
- 金钱
- 168
- 注册时间
- 2017-5-6
- 在线时间
- 44 小时
|
1金钱
硬件:STM32F103C8T6,外部中断4链接MPU6050模块的INT引脚,每5ms触发一次中断;串口2连接上位机,接收PC下发的控制指令。
需求:要求串口2的接收中断优先级高于外部中断4的优先级
代码:
1)STM32CubeMX中设置NVIC Group = 3 即 3 bits for pre-emption priority 1 bits for subpriority
2)串口2中断设置:
- HAL_NVIC_SetPriority(USART2_IRQn, 1, 0);
[color=rgb(51, 102, 153) !important]复制代码
3) 外部中断4设置:
- HAL_NVIC_SetPriority(EXTI4_IRQn, 3, 0);
[color=rgb(51, 102, 153) !important]复制代码
4)串口接收中断回调函数如下。作为测试,串口中断2的接收回调函数中,将接收到的字符有通过UART3发送出去。
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- UNUSED(huart);
- if(huart->Instance == USART2)
- {
- HAL_UART_Transmit(&huart3 , &aRxBuffer, 1, 0xFFFF); //接收到的字符通过UART3回显
- }
- HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1); //再次开启uart2接收中断
- }
[color=rgb(51, 102, 153) !important]复制代码
观察到的现象和问题:
1) 单独使能外部中断4,外部中断4工作正常
2) 单独使能串口2中断,串口2接收中断工作正常。PC连续下发多条指令都能正常接收并回显。
3) 同时使能外部中断4,串口2中断,发现:外部中断4仍能正常工作。但串口2接收中断仅能接收并回显开始的几个字符数据(长度随机)。后续再发送到串口2的字符均没进入接收中断,更没回显了。
4)出现3)中的状况后,再次disable掉外部中断4,仅保留串口中断,其它不变。此时串口中断又工作正常了。 5) 使能外部中断4。同时尝试设置UART3的抢占优先级低于UART2的抢占优先级,或不使能UART3的中断,现象都与3)中的相同。
按前面的代码设置,串口2的抢占优先级是1,是高于外部中断4的抢占优先级3的。外部中断4应该不会影响串口2的中断。
但观察的现象实际相反,请大家帮忙看看哪里弄错了。
|
|