這是我寫modbus串口中斷處理函數(shù),你看一下
#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++; //接收數(shù)據(jù)增加1
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE); //清除中斷標志
__HAL_TIM_SetCounter(&htim3,0); //當接收到一個新的字節(jié),將定時器3復位為0,重新計時(相當于喂狗)
__HAL_TIM_ENABLE(&htim3); //啟動定時器
}
}
}
#endif
|