野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20508|回复: 3

有关定时中断处理函数写法

[复制链接]
发表于 2018-12-27 08:32:13 | 显示全部楼层 |阅读模式
    使用HLA库时,对于配置了定时器1中断后,在stm32f1xx_it.c文件中会出现一个定时器1的中断函数,如图1所示。然后用户只要在main.c中添加一个void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 即可。   但对于有两个定时器都同时配置了中断的话,在stm32f1xx_it.c文中就会出现两个定时中断函数void TIM1_UP_IRQHandler(void)与void TIM3_IRQHandler(void)。这样的话在用户的main.c中应该怎样写中断处理函数void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 的话,应该怎样判断是定时器1还是定时器3的中断呢?或者说怎样判断是更新中断还是比较中断……




图1

图1

图2

图2

图3

图3

图4

图4
回复

使用道具 举报

发表于 2018-12-27 08:49:34 | 显示全部楼层
不是分开来写,写不同的函数名就行了吗
回复 支持 反对

使用道具 举报

发表于 2018-12-27 08:54:10 | 显示全部楼层
在中断函数中的调用函数的句柄(调用参数TIM1/TIM3)不一样,void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 就能识别到啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-27 09:05:55 | 显示全部楼层
本帖最后由 地主斌 于 2018-12-27 10:11 编辑

可以了,就是用户程序中加个判中断源的:void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{//it.c--> HAL_TIM_IRQHandler(&htim1); --> HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) --> HAL_TIM_PeriodElapsedCallback(htim);

        if(TIM1==htim->Instance)
         {
                 if(++AAA>=20000)
            {
                    AAA=0;
             }
         }
         else if(TIM3==htim->Instance)
         {
            if(++BBB>=20000)
             {
                     BBB=0;
             }
                }
}

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 05:11 , Processed in 0.038553 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表