usart1和time2的初始化就补贴了,中断函数如下:,现在的效果就是一直在轮询发送,我从中断收到了一个char,他就发送,然后清空以后一直在发空字符,rx信号一直在跳,我想发送的时候跳信号,然后让定时器非使能状态,等到有字符的时候在进入使能状态 /********************************************* 定时器中断处理部分 *********************************************/ void TIM2_IRQHandler(void) { printf("in the function %s\n",__func__); if(TIM_GetITStatus(TIM2, TIM_IT_Update)!=RESET) { USART_SendData(testChar); testChar = 0; TIM_ClearITPendingBit(TIM2,TIM_IT_Update); } } /********************************************* 串口中断处理部分 *********************************************/ void USART1_IRQHandler(void) { portBASE_TYPE TaskWoken = pdFALSE; if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET) { unsigned char RxChar; RxChar = USART_ReceiveData(USART1); xQueueSendFromISR(gattdQueueHandleUartRx, &RxChar, &TaskWoken); } portEND_SWITCHING_ISR(TaskWoken); } /********************************************* 主函数中的处理部分 *********************************************/ /*********************************************/ 这里只是在接收字符,RxChar是在freeRTOS中接收一个char,这里没有问题,后来赋值给一个 testChar /*********************************************/ while (xQueueReceive(gattdQueueHandleUartRx, &RxChar, 0) == pdPASS) { testChar = RxChar; } printf("now the testChar is %c\n",testChar); //打印出来没有问题 //在中断里会清空testchar,所以这里检测是否是0,如果不是0就使能定时器,请问有什么问题吗 if(testChar != 0) { printf("in the enable\n"); TIM_Cmd(TIM2, ENABLE); } else { printf("in the disable\n"); TIM_Cmd(TIM2, ENABLE); } |