有两颗103的ARM,一颗使用USART3,一颗使用UART4;
第一颗的USART3发送数据通过PCB到DP接口,然后走DP线,到另外一个PCB的DP接口,然后进另一颗的UART4接收数据;
在波特率设置为9600或者以上时,出现UART4接收数据偶尔丢字节,通过加计数,发现UART4进入中断的次数和少于USART3发送次数;
(发送数据按自定义协议发送,有包头和Checksum;波特率为9600时,USART3每隔200MS发送一次数据,每次7个字节,发送1000次;UART4收到数据,发现收到数据次数偶尔为998或者999,有时候正常,进中断的次数计数偶尔为6998或者6999,正常应该为:7000。)
修改波特率为2400,发送接收数据正常(测试几W次,暂未发现异常)
麻烦大神帮忙看看会是什么问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
感谢原子大大的回复。 中断服务函数如下:
void UART4_IRQHandler(void)
{
BYTE B_Uart4RcvData;
if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(UART4, USART_IT_RXNE);
B_Uart4RcvData = USART_ReceiveData(UART4);
RecvTimes++;
if(B_Uart4Lock == UART_UNLOCK)
{
if(W_Uart4RecvIndex == W_Uart4ProcessIndex)
{
W_Uart4RecvIndex = 0;
W_Uart4ProcessIndex = 0;
W_Uart4Counter = 0;
}
}
if(W_Uart4RecvIndex >= Rx4BufferSize)
{
W_Uart4RecvIndex = 0;
}
RxBuffer4[W_Uart4RecvIndex++] = B_Uart4RcvData;
if(USART_GetFlagStatus(UART4,USART_FLAG_ORE) == SET) //溢出
{
USART_ClearFlag(UART4,USART_FLAG_ORE); //读SR
USART_ReceiveData(UART4); //读DR
Flag++ ;
}
}
}
一周热门 更多>