新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2022-4-7
- 在线时间
- 5 小时
|

楼主 |
发表于 2023-5-24 10:43:31
|
显示全部楼层
是2ms发送一次数据包,一包14个字节
//串口接收中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)//如果是串口1
{
HAL_UART_Transmit(&UART1_Handler,(uint8_t*)aRxBuffer,1,100); //发送接收到的数据
}
}
//串口1中断服务程序
void USART1_IRQHandler(void)
{
u32 timeout=0;
u32 maxDelay=0x1FFFF;
#if SYSTEM_SUPPORT_OS //使用OS
OSIntEnter();
#endif
HAL_UART_IRQHandler(&UART1_Handler); //调用HAL库中断处理公用函数
timeout=0;
while (HAL_UART_GetState(&UART1_Handler)!=HAL_UART_STATE_READY)//等待就绪
{
timeout++;////超时处理
if(timeout>maxDelay) break;
}
timeout=0;
while(HAL_UART_Receive_IT(&UART1_Handler,(u8 *)aRxBuffer, RXBUFFERSIZE)!=HAL_OK)//一次处理完成之后,重新开启中断并设置RxXferCount为1
{
timeout++; //超时处理
if(timeout>maxDelay) break;
}
#if SYSTEM_SUPPORT_OS //使用OS
OSIntExit();
#endif
}
例程是这样的,我也觉得不应该出现错位漏收,但串口助手里确实是这么显示的 |
|