STM32
直播中

fdvcxhtg

8年用户 968经验值
擅长:嵌入式技术
私信 关注
[问答]

STM32F401 adc不能查询到转换结束标志EOC是为什么?

使用STM32F401RET6芯片,sysem tick产生5ms中断,主程序查询5ms是否有到,到了就做启动一次ad转换(查询方式),下一个5ms去判断转换是否结束(实际转换不需要这么长时间),如果转换结束就读取转换值。再下一个5ms来又启动转换,如此循环。但是现在现象是,进入调试后,可以正常转换几次,转换值也是正确的,紧接着就是不能查询到转换结束标志EOC,但STRT一直为1. 如果改变写法,启动adc后,立即等待adc做完,这样写就正常。
u16 Get_Adc(void)   
{
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_480Cycles );  
        ADC_SoftwareStartConv(ADC1);         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
        return ADC_GetConversionValue(ADC1);
}      

void adc_scan(void)  //@5ms
{
#if 1   // 这样写就正常
        res = Get_Adc();
        cnt++;
        return;
#else    // 这样写就开始正常转换,几次后EOC标志就不会被置位。
    if(index == 0)
    {
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_480Cycles );  
        ADC_SoftwareStartConv(ADC1);
        index = 1;
    }
    else
    {
        if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ) == SET)
        {
            ADC1->SR = ~(uint32_t)ADC_SR_EOC;
            cnt++;
            res = (uint16_t)ADC1->DR;
            index = 0;
        }        
    }

#endif
}   

哪位有遇到过这种情况吗?为什么不立即去等ADC做完就有问题,还是adc就有这种限制?

回帖(1)

俞旸

2024-4-17 15:57:03
楼主建议看一下ADC的采样频率,ADC采集我不建议在定时中做,可以再外部判断ticks的值进行判断是否需要采样。
举报

更多回帖

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