beary 发表于 2015-10-23 10:55:06

如何在定时器中断中发一次,就停一次(贴代码)

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);
                                        }



dsjsjf 发表于 2015-10-23 15:00:18

接收到了直接发送好了,为什么要用定时器发呢?
页: [1]
查看完整版本: 如何在定时器中断中发一次,就停一次(贴代码)