本帖最后由 hu9jj 于 2020-5-23 19:00 编辑
今天继续测试ADC,首先比较了官方例程中的固件库版和寄存器版,两个版本的功能完全一样,但编译后的代码长度却相差很大,下图是固件库版本的串口输出数据截图:
这是寄存器版本的串口输出数据截图:
这是固件库版本编译后的代码长度,Code=8616字节:
这是寄存器版本编译后的代码长度,Code=5276字节:
相比较,使用寄存器的效率应该提高不少。
我学单片机编程时间不长,还不会使用寄存器编程,感谢灵动公司提供寄存器编程的例程,让我有机会更容易去学习寄存器编程。
然后我又继续昨天的多通道ADC转换测试,我将HAL_adc.c文件中的函数全部作了中文注释(见下图):
然后参考用户手册中的说明,了解到ADC的三种转换模式,即单次转换模式、单周期扫描模式和连续扫描模式,我需要测试的是单周期扫描模式,也找到了使能DMA的函数,但最后就是不知道该如何将定义的ADC_BUFF数组与DMA联系起来,读不到数据。
最后受到坛友发帖的启发,采取在主循环中逐个单次转换模式,分别转换1、4、5三个通道及温度和内部参考电压的数据,可是在测试时却没有达到预期,我通过注释的方法逐个运行各通道,能够正常转换数据,将温度和内部参考电压两个通道同时运行时也可以正常转换数据,如下图:
然而尝试将通道5添加进来,结果导致温度数据不正确,转换值应该与通道5一样:
我求助于坛友zhangbtj,他运行我的代码却能够得到正常结果,我们运行的都是厂家提供的例程,应该不会有差别,不知道为什么会结果不同。这是相关的链接:https://bbs.21ic.com/icview-2962276-1-1.html
|