目前是这样的情况,中断接收数据,有时候数据少一个字节,或者两个字节,并且出现 的时间不定,有时候收几W个字节丢一个,有时候几K个字节就丢了,
一但数据丢失,系统就不能正常运行(当然STM32F4这边是没有问题可以正常运行,但通讯的另一块板就无法正常运行,)
问一下有什么办法可以解决这个问题?
贴中断代码:
uint32_t TotalCnt = 0;
__IO uint8_t USART2_Rcv_Index = 0;
extern __IO uint8_t SendPrintIndex;
extern uint8_t RecendCnt;
void USART2_IRQHandler (void)
{
#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART2,USART_IT_ORE) == SET)
{
USART_ReceiveData(USART2);
SendPrintIndex++;
}
else if(USART_GetITStatus(USART2,USART_IT_RXNE) == SET)
{
USART2_RX_BUFFER[USART2_Rcv_Index] = USART_ReceiveData(USART2); //读取串口2接收到的数据
USART2_Rcv_Index++;
TotalCnt++;
if(USART2_RX_BUFFER[USART2_Rcv_Index - 1] == 0x0A) //data receive over;
{
memcpy(cmdbuffer[bufindw],USART2_RX_BUFFER,USART2_Rcv_Index);
bufindw = (bufindw + 1)%BUFSIZE;
buflen = (buflen + 1);
USART2_Rcv_Index = 0;
}
}
#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntExit();
#endif
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
大批量数据传输,丢一两个字节,是无可避免的。
为了稳定,肯定要协议控制。
参考,modbus
---------------------------------
目前是增加了别一个接收端的数据空间,测试还没有发现问题,当然也想用相应的协议,不过另一个系统太大了,一时半会儿改起来也不容易!最主要还是AVR写的!
一周热门 更多>