cccgccg 2024-02-16 22:50 采纳率: 57.1%
浏览 11
已结题

在定时器TIM7的返回函数里,执行DAC输出函数时卡了。

在TIM7定时器的返回函数中DAC输出函数执行不了,如下图,卡在了第217行

img


我在主函数中可以正常执行HAL_DAC_SetValue()函数,连接喇叭是可以输出声音的。

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-16 22:52
    关注

    引自免费微信小程序:皆我百晓生

    在您的问题中,您提到C语言环境下,在STM32的TIM7定时器中断服务程序(ISR)中执行DAC输出函数时出现了问题。根据您的描述,该问题发生在第217行调用HAL_DAC_SetValue()函数的地方。

    为了帮助您解决这个问题,请检查以下几个可能的原因和相应的解决方案:

    1. 中断优先级配置: 确保TIM7的中断优先级设置正确且高于其他可能会抢占它的中断源。如果TIM7中断被更高优先级中断频繁打断,可能导致无法正常执行DAC输出。

    2. DAC硬件初始化: 在使用HAL_DAC_SetValue()之前,请确保已经完成了DAC通道的初始化。例如:

      // DAC初始化(假设使用DAC通道1)
      DAC_HandleTypeDef hdac;
      hdac.Instance = DAC_INSTANCE; // DAC_INSTANCE替换为实际的DAC实例
      hdac.Init.DAC_Trigger = DAC_TRIGGER_NONE; // 或者是与TIM7同步触发
      hdac.Init.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
      HAL_DAC_Init(&hdac);
      
      // DAC通道初始化
      HAL_DAC_ConfigChannel(&hdac, &dac_config, DAC_CHANNEL_1); 
      
    3. DAC与TIM同步: 如果计划在TIM7更新事件时触发DAC转换,请确保设置了正确的DAC触发源,并且TIM7与DAC之间的同步关系正确。

      dac_config.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
      dac_config.DAC_Trigger = DAC_TRIGGER_T7_TRGO; // 使用TIM7触发DAC
      
    4. 中断状态清除: 在TIM7的ISR中,确保及时清除中断标志位,否则ISR可能不会再次触发。

      void TIM7_IRQHandler(void)
      {
          if (__HAL_TIM_GET_FLAG(&htim7, TIM_FLAG_UPDATE) != RESET)
          {
              if (__HAL_TIM_GET_IT_SOURCE(&htim7, TIM_IT_UPDATE) != RESET)
              {
                  __HAL_TIM_CLEAR_FLAG(&htim7, TIM_FLAG_UPDATE);
      
                  // 在这里调用DAC输出函数
                  HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, your_DAC_value);
              }
          }
      }
      
    5. 临界区操作: 如果HAL_DAC_SetValue()涉及到共享资源,需要在中断服务程序中使用临界区来保护代码段,防止数据冲突。

    6. DAC工作模式: 根据你的应用需求,确认DAC是否配置为连续或单次转换模式,并且与TIM7触发方式相匹配。

    7. DAC转换正在进行: 检查在调用HAL_DAC_SetValue()时,前一次DAC转换是否已完成。某些情况下,如果前一次转换仍在进行,新的值可能无法立即写入。

    8. DAC硬件连接和电源: 虽然您提到了在主函数中能正常工作,但仍需确认在ISR中DAC相关的引脚配置、电源管理以及外部设备连接(如喇叭)无误。

    由于没有具体的代码片段,我只能给出通用性的建议。请对照上述内容逐一排查,若依然无法解决问题,请提供更详细的相关代码和配置信息以便进一步分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月16日