关于定时器中断,如何实现重复中断

我在论坛里找到了这个帖子

https://www.wch.cn/bbs/thread-72721-1.html

为什么我用这个程序,它只中断一次?

您好,参考该贴下面回复,注意中断函数要加中断声明

void TIM3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));


原来是这样,好的谢谢


@TECH62 请问各中断服务程序,函数名要怎么写? 在哪个资料里?



您好,可参考启动文件相关函数写法,如下图

image.png


好的,谢谢,中断服务程序入口程序已经找到了。另外有几个问题

  1. 中断服务程序必须要声明,是因为这是一个回调函数吗? STM32的中断服务程序也是要这样声明的吗?

  2. __attribute__((interrupt("WCH-Interrupt-fast")))  的作用是啥? "WCH-Interrupt-fast"这是你们定义的一个让编译器进行某种操作的相当于命令的意思吗?如果是的话,具体是什么意思呢?

    谢谢!


您好,使用CH32V系列MCU需要加该中断声明,其他不需要。关于中断声明的解释,可以参考一下下帖解释,如下图。后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通。

https://bbs.21ic.com/icview-3038794-1-1.html 

image.png


好的,明白了,谢谢

我看了启动文件,中断服务程序的所有回调函数入口地址都是跳转到1b执行( j 1b ), 如果不声明自己的中断处理函数,产生的中断就不会回调我们写的中断服务程序,导致程序( j 1b ),从而导致程序跑飞


@TECH62 对了,为什么中断服务程序里,还要先检查是否发生中断?难道还能有其它情况进入中断服务程序(程序跑飞?)?


void TIM3_IRQHandler(void)

{

    static u8 i=0;

    if (TIM_GetITStatus(TIM3, TIM_IT_Update)!=RESET)    //检查TIM3中断是否发生



我去百度了一下,明白了,谢谢


只有登录才能回复,可以选择微信账号登录