STM32F1使用HAL库实现串口中断接收,如何调用回调函数
STM32F1使用HAL库实现串口中断接收时,串口中断是如何调用回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)的???查半天都没找到哪里发起调用,还是说串口中断自动就发起了调用???
自动的,你搜索下啊,就可以看到这个函数在哪调用了,去中断文件_it.c文件里面,跳转下就到了 是在串口的中断函数里调用的,在串口中断里会监测各个中断源,根据不同的中断源调用不同的回调函数 本帖最后由 jyl518-283289 于 2018-8-8 10:32 编辑
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == htim2.Instance)
{
// HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
HAL_UART_Receive_IT(&huart1,uart1_rx_buf, uart1_rx_len);//开接收中断
uart1_rx_flag = 1;
}
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
}
}
/* USER CODE END 4 */ 直接定义HAL_UART_RxCpltCallback这个函数即可,编译时会自动找到该函数。 在串口收到数据后,由于设置了串口接收中断,自动进入中断函数 HAL_UART_IRQHandler(&huart1);
再进入 UART_Receive_IT(huart); 函数,在这个函数中,判断已经满足了用户设置的接收到的数据数量后,进入HAL_UART_RxCpltCallback(huart);函数。 在Stm32f1xx_it.c里的中断函数里直接添加代码就可以了。
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart1);
} 串口中断里设置成回调函数 void IC_DataReceive(void) {...回调函数,方便修改。直接写,有利于执行速度。 6楼的回答很清楚了 /**
* @brief This function handles USART3 global interrupt.
*/
void USART3_IRQHandler(void)
{
uint8_t Res;
if((__HAL_UART_GET_FLAG(&huart3,UART_FLAG_RXNE)!=RESET))//接收中断
{
Res=USART3->RDR;
}
HAL_UART_IRQHandler(&huart3);
} 我是直接这样获取串口数据的
页:
[1]