GuessWhat 发表于 2018-8-8 10:04:09

STM32F1使用HAL库实现串口中断接收,如何调用回调函数

STM32F1使用HAL库实现串口中断接收时,串口中断是如何调用回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)的???
查半天都没找到哪里发起调用,还是说串口中断自动就发起了调用???

哈佛祖安智 发表于 2018-8-8 10:25:29

自动的,你搜索下啊,就可以看到这个函数在哪调用了,去中断文件_it.c文件里面,跳转下就到了

yu0405jie 发表于 2018-8-8 10:28:23

是在串口的中断函数里调用的,在串口中断里会监测各个中断源,根据不同的中断源调用不同的回调函数

jyl518-283289 发表于 2018-8-8 10:30:30

本帖最后由 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 */

发表于 2018-8-8 10:43:12

直接定义HAL_UART_RxCpltCallback这个函数即可,编译时会自动找到该函数。

zhao.zhao 发表于 2018-8-8 10:47:15

在串口收到数据后,由于设置了串口接收中断,自动进入中断函数 HAL_UART_IRQHandler(&huart1);
再进入 UART_Receive_IT(huart); 函数,在这个函数中,判断已经满足了用户设置的接收到的数据数量后,进入HAL_UART_RxCpltCallback(huart);函数。

wenyangzeng 发表于 2018-8-8 13:17:19

在Stm32f1xx_it.c里的中断函数里直接添加代码就可以了。
void USART1_IRQHandler(void)
{

HAL_UART_IRQHandler(&huart1);

}

feixiang20 发表于 2018-8-9 00:16:08

串口中断里设置成回调函数 void IC_DataReceive(void) {...回调函数,方便修改。直接写,有利于执行速度。

abled-232226 发表于 2019-1-28 15:30:40

6楼的回答很清楚了

mzy2364 发表于 2019-1-29 11:03:33

/**
* @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]
查看完整版本: STM32F1使用HAL库实现串口中断接收,如何调用回调函数