OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3604|回复: 0

使用STM32CUBEMX的定时器中断,在回调程序不能识别是哪一路产生的中断事件

[复制链接]

21

主题

151

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
金钱
423
注册时间
2017-4-1
在线时间
73 小时
发表于 2020-11-5 22:22:42 | 显示全部楼层 |阅读模式
1金钱
以下是Cube自动生成的中断服务函数,由于设定的是输出匹配型中断,使用回调函数HAL_TIM_OC_DelayElapsedCallback()。
void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
{
  /* Capture compare 1 event */
  if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET)
  {
    if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) !=RESET)
    {
      {
       __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);    SR的相关中断标志被清除
        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;

        /* Input capture event */
        if((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00)
        {
          HAL_TIM_IC_CaptureCallback(htim);
        }
        /* Output compare event */
        else
        {
          HAL_TIM_OC_DelayElapsedCallback(htim);      在main.c中插入HAL_TIM_OC_DelayElapsedCallback回调函数
          HAL_TIM_PWM_PulseFinishedCallback(htim);
        }
        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
      }
    }
  }
遇到的问题是在调用回调函数之前,SR中的相关标志位已被清除,而多个中断源共用HAL_TIM_OC_DelayElapsedCallback函数是无法判断是当前在为哪一个中断源服务。
不知大家有什么好的方法来解决这个问题,我觉得笨一点的方法,就是为每个中断源分别自编一个不同名称的回调函数。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 17:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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