本帖最后由 SEASON3 于 2013-7-19 11:02 编辑
我串口中断接受数据老会丢掉几个字节,我现在想不出啥问题啊,大家帮看看
我是在串口一开了中断:
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res = USART1->DR;
USART_RX_BUF[USART_RX_STA & 0x01FF] = Res ;
USART_RX_STA ++;
}
中断进去了,但是发出接收到的数据,比如说我发个 “123456789ABCDEFG”,很多时候我收到 “13579BDEG” 或者 “12468ACDF”等,有时候是隔一个字节丢有时候又不是。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
主函数中发送我就是:
while (1)
{
if (USART_RX_STA)
{
len = USART_RX_STA & 0x01FF;
for (t=0; t<len; t++)
{
USART1->DR = USART_RX_BUF[t];
while((USART1->SR & 0X40) == 0);
}
USART_RX_STA = 0;
}
}
而且我发现如果在串口1的接收中断里面添加printf的话,就会只打印出来一个字节的数据,非常纳闷。
谢谢各位耐心回答我的问题!
|