额,又来提问题了。。
上次感谢各位的帮忙,在开发板上调试成功了。。
但是当把程序移植到另一个板上的时候,又出问题了。。
为什么串口精灵接收的数据总会比实际发送的数据多?
而且是随机的,有时候多一位,有时候多两位。。
这次的板和开发板的程序不同只是多开了TIM2的定时器。。
串口的中断处理如下:
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET) // 接收中断有效 ;
{
RxBuffer[RxCount++] = USART_ReceiveData(USART2); // 返回USARTx最近接收到的数据 ;
USART_ClearITPendingBit(USART2, USART_IT_RXNE); // 清除USART2的接收中断 ;
if(RxCount == RxBufferSize)
{
RX_Flag=1; //接收完成标志置位
Crc_count = RxCount; //crc校验计数器赋值
}
}
if(USART_GetITStatus(USART2, USART_IT_TXE) == SET) // 发送中断有效 ;
{
USART_SendData(USART2, TxBuffer[TxCount++]); // 发送数据 ;
USART_ClearITPendingBit(USART2, USART_IT_TXE); // 清除USART2的发送中断 ;
if(TxCount == TxBufferSize)
{
while ( USART_GetFlagStatus(USART2, USART_FLAG_TC ) == RESET ); //判断发送是否完成
TX_Flag=1; //发送完成标志置位
}
}
} |