首页 » 科学 » STM32 HAL库进修系列第8篇---回调函数总结_函数_回调

STM32 HAL库进修系列第8篇---回调函数总结_函数_回调

少女玫瑰心 2024-12-03 08:41:10 0

扫一扫用手机浏览

文章目录 [+]

普通函数与回调函数的差异:便是ST将中断封装,给利用者的API,便是标准库的中断函数

对普通函数的调用:

STM32 HAL库进修系列第8篇---回调函数总结_函数_回调 科学

调用程序发出对普通函数的调用后,程序实行立即转向被调用函数实行,直到被调用函数实行完毕后,再返回调用程序连续实行。
从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数实行完毕-->连续实行”

对回调函数调用:

调用程序发出对回调函数的调用后,不等函数实行完毕,立即返回并连续实行。
这样,调用程序执和被调用函数同时在实行。
当被调函数实行完毕后,被调函数会反过来调用某个事先指定函数,以关照调用程序:函数调用结束。
这个过程称为回调(Callback),这正是回调函数名称的由来。

位置:stm32f4xx_hal_xxx.c 中

定义为虚函数

__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef huart)

串口回调:stm32f4xx_hal_uart.c

voidHAL_UART_IRQHandler(UART_HandleTypeDefhuart);

voidHAL_UART_TxCpltCallback(UART_HandleTypeDefhuart); //发送回调

voidHAL_UART_TxHalfCpltCallback(UART_HandleTypeDefhuart);

voidHAL_UART_RxCpltCallback(UART_HandleTypeDefhuart); //吸收回调

voidHAL_UART_RxHalfCpltCallback(UART_HandleTypeDefhuart);

voidHAL_UART_ErrorCallback(UART_HandleTypeDefhuart);

voidHAL_UART_AbortCpltCallback(UART_HandleTypeDefhuart);

voidHAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDefhuart);

voidHAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDefhuart);

举例:

我利用的stm32的两路串口收发,两个串口吸收中断处理有问题,我现在的处理办法是这样的

/ USER CODE BEGIN 4 /voidHAL_UART_RxCpltCallback(UART_HandleTypeDefhuart) { if(huart==&huart2) { uRX_buf[RX_cont++]=RX_buf;// HAL_UART_Transmit_DMA(&huart2, uTX_buf, 8); if(RX_cont>63) { RX_cont=0; } } else if(huart==&huart4) { uRX_buf[RX_cont++]=RX_buf4; if(RX_cont>63) { RX_cont=0; }// HAL_UART_Receive_IT(&huart4,&RX_buf4,1);//¡ä??¨²?¨®¨º¨¹?D?? }

定时器回调:stm32f4xx_hal_tim.c

voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDefhtim); //周期运行回调,配置定时进入中断

voidHAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDefhtim);//输出比较回调

voidHAL_TIM_IC_CaptureCallback(TIM_HandleTypeDefhtim);

voidHAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDefhtim);

voidHAL_TIM_TriggerCallback(TIM_HandleTypeDefhtim);

voidHAL_TIM_ErrorCallback(TIM_HandleTypeDefhtim);

GPIO:

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDefGPIOx,uint16_t GPIO_Pin);//读引脚状态

voidHAL_GPIO_WritePin(GPIO_TypeDefGPIOx,uint16_t GPIO_Pin,GPIO_PinState PinState); //写状态

voidHAL_GPIO_TogglePin(GPIO_TypeDefGPIOx,uint16_t GPIO_Pin); //翻转电平

HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDefGPIOx,uint16_t GPIO_Pin); //锁存引脚状态

voidHAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); //实际调用的是下边的中断回调函数

voidHAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); //引脚触发之后的回调函数,按键中断函数

举例; cube配置时开启中断触发模式

/ USER CODE BEGIN 4 / voidHAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { / NOTE: This function Should not be modified, when the callback is needed, the HAL_GPIO_EXTI_Callback could be implemented in the user file / switch(GPIO_Pin) { caseGPIO_PIN_12:LED0_Toggle();break; caseGPIO_PIN_13:LED1_Toggle();break; caseGPIO_PIN_14:LED2_Toggle();break; caseGPIO_PIN_15:LED3_Toggle();break; default:break; } } / USER CODE END 4 /

标签:

相关文章

ITPlay,创新科技的魅力与未来展望

在信息技术的飞速发展下,IT Play作为一种全新的创新模式,正在逐渐改变着我们的生活和工作方式。本文将从IT Play的定义、发...

科学 2024-12-31 阅读0 评论0