STM32
直播中

江左盟

8年用户 1378经验值
擅长:电源/新能源
私信 关注
[问答]

求助,关于STM8S AD转换问题求解

停止连续模式下的AD转换描述:To stop continuous conversion,reset the CONT bit to stop conversion or reset the ADON bit to power off ADC
可是我CONT置0怎么还是会进入AD中断。
main()
{
         CLOCK_INIT();
        GPIO_INIT();
        ADC_INIT();
        EOCIE = 1;//开启EOC中断
        _asm("rim");
        ADON = 1;//启动AD转换
        while (1)
        {
                if(ADC_DATE[0] > 0x48)
                {
                        LED = ON;
                }
                else
                {
                        LED = OFF;
                }
        }
}


void ADC_INIT(void)
{
        u8 i=112;
        ADC_CSR = 0X04;//PD3(AIN4)为输入通道
        ADC_CR1 = 0X22;//f(ADC)=4M,连续转换
        ADC_CR2 = 0X30;//数据左对齐
        ADC_CR3 = 0X00;//有数据缓存
        ADC_TDRL |= SETBIT4;//取消AIN4的施密特
        ADON = 1;//ADC唤醒
        while(i--);
}

@far @interrupt void ADC_GETInterrupt (void)
{
        u8 i;
        NUM++;
        EOC = 0;
        ADC_CR1  = CLRBIT1;
        for(i=0;i<=9;i++)
        {
                ADC_DATE[i] = *( ADC_DB0RH+i+i);
        }
        return;
}


回帖(1)

挽你何用

2024-5-8 17:26:40
在STM8S的AD转换中,要停止连续模式下的AD转换,需要确保以下几个步骤都正确执行:

1. 将CONT位清零:这将停止连续模式的AD转换。在您的代码中,您提到已经将CONT置为0,这是正确的。

2. 将ADON位清零:这将关闭ADC模块,从而进一步确保AD转换停止。在您的代码中,没有提到这一步。您可以尝试添加以下代码来关闭ADC:

```c
ADC1_CR1_ADON = 0; // 关闭ADC
```

3. 关闭EOC中断:您提到已经开启了EOC中断,但在停止AD转换时,您可能还需要关闭这个中断。您可以使用以下代码:

```c
ADC1_CR1_EOCIE = 0; // 关闭EOC中断
```

4. 确保没有其他代码在触发AD转换:检查您的代码,确保没有其他地方在触发AD转换。

综上所述,您可以尝试修改您的代码如下:

```c
main() {
    CLOCK_INIT();
    GPIO_INIT();
    ADC_INIT();
    EOCIE = 0; // 关闭EOC中断
    ADC1_CR1_ADON = 0; // 关闭ADC
    ADC1_CR1_CONT = 0; // 停止连续模式的AD转换
    // ... 其他代码 ...
}
```

这样应该可以停止连续模式下的AD转换并避免进入AD中断。如果问题仍然存在,请检查您的代码,确保没有其他地方在触发AD转换。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分