麦克尼 2021-12-03 18:17
浏览 32
已结题

STM32L496 ADC2看门狗中断进不去问题

问题现象

在使用J-Link调试时候ADC2看门狗中断可正常进入,一旦Stop debug,ADC看门狗中断就再也不会进入了;

中断执行代码如下

uint32_t tick_record = 0;
void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc)
{
    ADC_AnalogWDGConfTypeDef AnalogWDGConfig = {0};

    static uint32_t pre_tick = 0;
    
    uint32_t cur_tick = HAL_GetTick();
    
    tick_record = cur_tick - pre_tick;
    pre_tick = cur_tick;
    
    AnalogWDGConfig.WatchdogNumber = ADC_ANALOGWATCHDOG_1;
    AnalogWDGConfig.WatchdogMode = ADC_ANALOGWATCHDOG_SINGLE_REG;
    AnalogWDGConfig.Channel = ADC_CHANNEL_16;
    AnalogWDGConfig.ITMode = ENABLE;
    AnalogWDGConfig.HighThreshold = 3000;
    AnalogWDGConfig.LowThreshold = 2700;
    
    if(hadc == (&H_BUBBLE_ADCx))
    {
        LL_ADC_REG_StopConversion(hadc->Instance);
        
        if(hadc->Instance->DR >= 3000)
        {
            AnalogWDGConfig.HighThreshold = 0;
            HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
        }
        else if(hadc->Instance->DR <= 2700)
        {
            AnalogWDGConfig.LowThreshold = 0;
            HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
        }
        
        HAL_ADC_AnalogWDGConfig(&hadc2, &AnalogWDGConfig);
        LL_ADC_REG_StartConversion(hadc->Instance);
    }
}

使用定时器间隔10ms触发一次AD转换:
如果使用HAL_ADC_Start(&hadc2)启动ADC,则会出现:在使用J-Link调试时候ADC2看门狗中断可正常进入,一旦Stop debug,ADC看门狗中断就再也不会进入了;
我明明配置了看门狗中断的:

img

如果使用HAL_ADC_Start_IT(&hadc2):则不会有异常。

问题:
1、为什么调试状态可以进入中断,非调试状态就不行了?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月11日
    • 修改了问题 12月3日
    • 创建了问题 12月3日

    悬赏问题

    • ¥15 单纯型python实现编译报错
    • ¥15 c++2013读写oracle
    • ¥15 c++ gmssl sm2验签demo
    • ¥15 关于模的完全剩余系(关键词-数学方法)
    • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
    • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
    • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
    • ¥15 安装quartus II18.1时弹出此error,怎么解决?
    • ¥15 keil官网下载psn序列号在哪
    • ¥15 想用adb命令做一个通话软件,播放录音