ZG11211 发表于 2024-12-22 17:15

ADC底层函数库的疑问

LibSamples_MM32F0140_V1.3.7
hal_adc.c
void ADC_RegularChannelConfig(ADC_TypeDef* adc, u32 channel, u8 rank, u32 sample_time)    //ADCSAM_TypeDef
{
    u32 tempchan;
    sample_time = sample_time & 0xF;
    tempchan = channel;
    if(tempchan > 8)
        {
      tempchan = tempchan & 0xF;
      tempchan = tempchan - 8;
      adc->SMPR2 &= ~(0xF << (tempchan << 2));
      adc->SMPR2 |= (sample_time << (tempchan << 2));
    }
    else
        {
      adc->SMPR1 &= ~(0xF << (tempchan << 2));
      adc->SMPR1 |= (sample_time << (tempchan << 2));
    }
}
官方的代码如上述,我觉得这个判断有问题,大于8才走SPMR2寄存器,实际序号是0-7,8-15,那么序号8就被装入了SMPR1了,这是不是错误?

l1uyn9b 发表于 2025-1-13 18:39

一般来说,官方的demo应该不会出错的

cen9ce 发表于 2025-1-13 19:42

你可以试试啊,用这个例程跑起来试试呗

g0d5xs 发表于 2025-1-13 19:50

不会错吧,是不是这个数是个数而不是序号啊?

b5z1giu 发表于 2025-1-13 21:04

你最好是仿真的方式根据程序来走一遍看看怎么运行的

kaif2n9j 发表于 2025-1-13 22:18

如果最后的结果是对的,应该ADC就是对的吧

p0gon9y 发表于 2025-1-13 23:49

确实我还没注意过这种情况,不过一般情况下代码应该不会出错

suw12q 发表于 2025-1-14 09:27

那MM32的ADC到底好使吗?应该是好使的啊?

tax2r6c 发表于 2025-1-14 12:00

话说如果序号8被撞到SMPR1中会有啥后果啊?

lix1yr 发表于 2025-1-14 13:14

我理解的是,如果运行结果都没错的话,应该不是底层有问题吧

liu96jp 发表于 2025-1-14 14:28

你是ADC采集有问题了吗?

小小蚂蚁举千斤 发表于 2025-1-22 23:13

底层函数还是需要进行了解的额
页: [1]
查看完整版本: ADC底层函数库的疑问