STM32F103VC中ADC模拟看门狗问题记录-LL库

STM32F103VC中ADC模拟看门狗问题-LL库

单通道示例

时钟

adc配置

初始化配置
    LL_ADC_StartCalibration(ADC1);    /* 开始自校验 */
//    LL_ADC_EnableIT_EOS(ADC1);      /* 使能单次转换中断 */
    LL_ADC_Enable(ADC1);
    while(LL_ADC_IsCalibrationOnGoing(ADC1));
//    LL_ADC_EnableIT_EOS(ADC1);

    LL_ADC_REG_StartConversionSWStart(ADC1);
中断配置
void ADC1_2_IRQHandler(void)
{
  /* USER CODE BEGIN ADC1_2_IRQn 0 */
    static uint8_t adcConvChannel = 1;

    if (LL_ADC_IsActiveFlag_AWD1(ADC1)) 
    {
    // AWD中断触发

    // 清除AWD中断标志位
        LL_ADC_ClearFlag_AWD1(ADC1);
    }

    if((LL_ADC_IsActiveFlag_AWD1(ADC1) != 0))
    {
        // 禁用AWD中断
//        LL_ADC_DisableIT_AWD1(ADC1);
        ADC_WATCHDOG_DEAL(adcConvChannel);
        adcConvChannel = 4;
        do
        {
            adcConvChannel++;
            LL_ADC_ClearFlag_AWD1(ADC1);
        }while(LL_ADC_IsActiveFlag_AWD1(ADC1));
    }
  /* USER CODE END ADC1_2_IRQn 0 */

  /* USER CODE BEGIN ADC1_2_IRQn 1 */
//    LL_ADC_EnableIT_EOS(ADC1);
//    LL_ADC_EnableIT_AWD1(ADC1);
//    LL_ADC_Enable(ADC1);
//    LL_ADC_REG_StartConversionSWStart(ADC1);
  /* USER CODE END ADC1_2_IRQn 1 */
}

adc初始化

未使能单次转换中断
  • STRT:LL_ADC_REG_StartConversionSWStart之后会执行,表示转换完成
    未使能单次转换中断
触发模拟看门狗中断

模拟看门狗中断

疑问一: 上图中可以看到DR寄存器未超过阈值

数据手册

解惑:

  • 从数据手册可以看到,转换的数据未放到总线上就被看门狗取走用作中断条件,但此时SR寄存器中的EOC位是上一次转换的EOC标志位,所以,本次取到的ADC转换值是没有办法获取到的

注意点:

在这里插入图片描述

  • 取消单次转换中断和模拟看门狗中断使能是不会清楚中断触发标志位的

在这里插入图片描述

  • 读取数据也可以清除EOC标志位
    在这里插入图片描述
  • 但是清楚ADON,关闭ADC转换是可以清除中断标志位,但不会清除中断使能

问题1

在这里插入图片描述

  • 这里清除EOC标志位没有起到作用,第一感觉是函数没有执行成功
    在这里插入图片描述
    再往下执行,这个中断没有进来,感觉是ST-Link有点问题(未解决)

在这里插入图片描述

  • 我把中断使能打开之后,这个函数就进来了,所以每次进入中断的时候,一定先关断使能(这句话不对)

在这里插入图片描述
我在里面打断点就能进入do{}while,不打断点就就不去do{}while,实际带上个led灯操作是没有执行的,这应该是keil或者st-link的bug

多个通道执行模拟看门狗

  • 配置多通道,扫描模式,不使能单次转换中断,使用DMA,无法判断是哪个通道触发的模拟看门狗
  • 配置多通道,扫描模式,使能单次转换中断,使用DMA,中断次数过多,放弃这个方法

存在的问题

  • 使用DMA,DMA从总线上拿数据,模拟看门狗中断后,拿到的数据是有问题的
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值