STM32 ADC多通道数据采集中的错位问题解析

        之前板子只用到单通道采集温度值,现在需要同时采集两个通道的温度值,按网上的配置写好相应代码后,在调试的过程中发现两个通道的值时长发生错位的情况。

        下面是我的ADC配置及获取函数:

修改了很多参数并没有解决问题,后来发现问题出在了ADC_ChannelConfig这个函数里,通过现象我们大概知道在读取数据是大概率我们要读通道一时由于通道二也在转换所以读到了通道二的值。

在ADC_ChannelConfig这个函数里可以看到:

这里用的是|=,也就是说调用一次后给这个寄存器这一位赋值,但是使用后没有关闭改通道,查询数据手册可以发现:

当我们一次读取一个通道时要把其他通道关闭掉。所以只需将原程序中加一行代码就可以:

在开启时先把所有通道全部关闭这样就不会有之前的问题了。

在这里我不禁感慨,对于我这种嵌入式新手来说网上的例程虽然很多,但是往往也伴随着很多问题,我们要多去理解寄存器相关操作的意义,并对应相关的数据手册理解,多多思考能帮助我们深刻理解并掌握知识。

作者:爱学习的小尤

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 ADC多通道数据采集中的错位问题解析

发表回复