27,375
社区成员
发帖
与我相关
我的任务
分享
我使用的串口通信,要对伺服读取实时示波器数据。也出现了粘包现象。实时数据最小采样间隔是0.1ms。
//串口中断方式
void USART1_IRQHandler(void)
{
uint8_t ch;
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
ch = USART_ReceiveData(USART1);
if (MB_USART1.receCount < MSCOMM_BUFFER_LENGTH)
MB_USART1.mscomm_buffer[MB_USART1.receCount++] = ch;
else
MB_USART1.receCount = 0;
TIM_Cmd(TIM1, DISABLE);
TIM_SetCounter(TIM1, 0x00); // 清定时器的计数
TIM_Cmd(TIM1, ENABLE);
}
if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)
{
USART_ClearFlag(USART1,USART_FLAG_TC);
if (MB_USART1.sendPosi < MB_USART1.sendCount)
USART_SendData(USART1, MB_USART1.send_buffer[MB_USART1.sendPosi++]);
else
{
USART1_RS485_RECIVE_enable();
USART_ITConfig(USART1, USART_IT_TC, DISABLE);
}
}
}