TIM

TIM中断callback总是不执行?

image.png

设置了中断,然后写了一个callback响应中断事件,

分别是void TIM14_IRQHandler(void);和HAL_Tim_PeriodElapsedCallBack(TIM_HandleTypeDef *htim);

但是这两个callback一个都不执行,所以计时器不管用

请问是哪里不对?

还是说得注册一下这个方法?

已邀请:

admin

赞同来自:

初始化完成, 要记得开启, main里面开启了吗 

HAL_TIM_Base_Start_IT(&htim4)

参考 这个帖子 http://www.stm32cube.com/article/185

lescper

赞同来自:

多谢


已经开启了


HAL_TIM_Base_Start(&htim);

HAL_TIM_Base_Start_IT(&htim);

这个都执行了,还是没有任何反应,不会响应中断程序

admin

赞同来自: 莫笑

根据你图片, 大致看了下, 

1, 我猜测你定时器4的晶振频率为8M的话, 那么你prescaler = 7,那么是8分频, 即定时频率为8000000/8=1000000 (即1Mhz);

那么每次定时器自加1的时间为: 1/1M=0.000001s 即1微秒

2, 如果你要检测你的定时器到底有没成功, 那么就在定时器的callback里加个led指示灯的开关控制, 另外你上面图中没有开启定时器的自动重载, 那么现在开启自动重载, 顺便把定时器的period=500000 , 让定时器500毫秒中断一次.

(备注: 上面500000可能不行, 超出最大定时范围i, 请自行修改分频数,使上面达到500毫秒定时要求)

3, 以上都做完了, 在main中开启定时器, 你应该可以看到led闪烁了.

4, 如果你没看到, 那么请去定时器板块自定学习别人怎么设置的, 或者烧录官方的定时器示例观察区别,谢谢


写了这么多, 很累,

多说两句: 任何硬件调试请先实现最基本功能之后, 一步步再去修改成你想要的样子,  就像你上面的代码中,定时时间只有1微妙而且不是自动重载连续执行, 这样能观察到什么?  先实现定时1s便于仿真和观察, 成功后做任何其他改变都会更轻松.


历经沧桑的老人

赞同来自:

请问,您那两个函数都是在哪里被引用了?没有引用的地方自然不会被运行,这是再正常不过的了!!!

要回复问题请先登录注册