在 timer.h 头文件中定义回调函数类型:
// 定义回调函数类型
typedef void (*TIM3_CALLBACK)(int);
void register_tim3_callback(TIM3_CALLBACK callback);
在 timer.c 文件中调用回调函数,实现注册函数:
// TIM3 回调函数指针
TIM3_CALLBACK tim3_callback_ptr = NULL;
// 定时器中断服务函数
void TIM3_IRQHandler(void)
{
// 判断 TINM3 中的中断更新事件是否被触发
if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) {
printf("TIM3 中断\r\n");
if(tim3_callback_ptr != NULL)
{
tim3_callback_ptr(3);
}
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除掉 TIMx 的更新中断标志
}
}
// 注册回调函数
void register_tim3_callback(TIM3_CALLBACK callback)
{
tim3_callback_ptr = callback;
}
在 main.c 文件中注册和使用回调函数:
// 加作者VX: jiyuyun18, 交流电子技术
// TIM3 回调函数
void tim3_callback(int value)
{
printf("Callback function called with value: %d\r\n", value);
}
/*********************************************************************
* @fn main
*
* @brief Main program.
*
* @return none
*/
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemCoreClockUpdate();
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
printf("This is printf example\r\n");
register_tim3_callback(tim3_callback);
tim3_irq_init(4999, 9599);
while(1)
{
}
}