这是我写modbus串口中断处理函数,你看一下
#if EN_USART1_RX //如果使能了接收
void USART1_IRQHandler(void)
{
u8 res;
if((__HAL_UART_GET_FLAG(&USART1_RS485Handler,UART_FLAG_RXNE)!=RESET)) //接收中断
{
HAL_UART_Receive(&USART1_RS485Handler,&res,1,1000);
if(RS485_RX_CNT<2047)
{
RS485_RX_BUFF[RS485_RX_CNT]=res; //记录接收到的值
RS485_RX_CNT++; //接收数据增加1
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE); //清除中断标志
__HAL_TIM_SetCounter(&htim3,0); //当接收到一个新的字节,将定时器3复位为0,重新计时(相当于喂狗)
__HAL_TIM_ENABLE(&htim3); //启动定时器
}
}
}
#endif
|