写了个程序。通过一个通迅接口使得PC与下位机进行数据的收发。 发送中断用库函数形式时。有的通迅接口能正确传递数据,有的通迅接口无**确传送。于是将发送中断变更为寄存器形式。 结果,只有第一次可以通过通迅接口正常接收与发送数据。接下来就无反应了。 经Debug,发现是程序无法进入接收中断。
这是为什么呢? 请多多指教。
void USART1_IRQHandler(void)
{
//if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
if(USART1->SR&(1<<5))
{
// USART_ClearITPendingBit(USART1,USART_IT_RXNE);//steven
USART1->SR&=~(1<<5);
/* received data */
USART_GetInputString();
}
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) //就是这里。库函数形式。无**确收发数据。如果变成if((USART1->SR&(1<<7))==1)。就只实现一次正确的收发。debug,发现无法进入接收中断
{
/* Write one byte to the transmit data register */
USART_SendBufferData();
}
else if(USART1->SR&(1<<6)) //(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
{
//USART_ClearITPendingBit(USART1, USART_IT_TXE); // 清除
USART1->SR&=~(1<<7);
// USART_ClearFlag(USART1,USART_FLAG_TC);
USART1->SR&=~(1<<6);
CR=1;
CT=0;
// USART1->CR1|=1<<5;
}
} |