板子:CH32F&Vx0xV-R1-1v1
描述:从freertos例程中修改的。我加了一个1ms一次的TIM2中断,UART1的接收中断。两个中断独立运行没问题。当我在TIM2_IRQHandler()中执行较长时间的操作后,UART1的接收中断丢数据。
程序功能:我用串口发送"MUTE\r\n"到下位机。下位机收到后先逐个打印收到的字符,发现'\n'时解析一帧数据,并发送"[REP]:MUTE\r\n",发现接受到的不是合法数据发送"[ERR]:"
尝试1:我尝试设置UART1接收中断抢占TIM2中断。并在TIM2_IRQHandler()加一个死循环,那么一旦触发,程序就会一直呆在TIM2_IRQHandler()。此时,USART1_IRQHandler(void)正常执行.我抢占应该是没问题?设置完抢占后,我把TIM2_IRQHandler()中的死循环去掉,还是有干扰。下图是有干扰时,串口的截图。其中w:MU是打印的内存中的串口数据缓冲区。
尝试2:在尝试1的基础上,我把freertos去掉。没有干扰了。下图就是正确的结果。
感觉是FreeRTOS跟中断的关系问题。网上查了查(关键词"stm32 freertos 中断嵌套"),FreeRTOS是有一些配置的宏(如configMAX_SYSCALL_INTERRUPT_PRIORITY),但CH32V307的例程中没有这个配置。不知道是不是这个原因。
我还是想用freertos的,想问下该咋解决。
能给个邮箱吗?我发您带freertos的程序。