用STM32CubeMx生成的FreeRTOS工程,串口接收程序套用正点原子中的F429串口接收数据程序,在串口回调函数中添加了下面这部分程序(在不使用FreeRTOS时串口接收程序正常)使用FreeRTOS后,串口接收到数据后,串口调试助手打印Send Failed,进入硬件中断故障中断。
//就向队列发送接收到的数据
if((USART_RX_STA&0x8000)&&(UsartQueueHandle!=NULL))
{
err = xQueueSendFromISR(UsartQueueHandle,USART_RX_BUF,&xHigherPriorityTaskWoken);//向队列中发送数据
if(err!=NULL)
{
printf("Send Failed
");
}
USART_RX_STA=0;
memset(USART_RX_BUF,0,USART_REC_LEN);//清除数据接收缓冲区USART_RX_BUF,用于下一次数据接收
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);//如果需要的话进行一次任务切换
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>