hu9jj 发表于 2020-5-23 19:00

【MM32 eMiniBoard测评报告】+ADC转换的测试(2)

本帖最后由 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


huangzushuimd 发表于 2020-5-24 07:33

可以参考该压缩包中的MM32L0xx_n_MiniBoard\Lib\ADC\ADC_DMA_MultiChanInterrupt 样例

hu9jj 发表于 2020-5-24 07:58

huangzushuimd 发表于 2020-5-24 07:33
可以参考该压缩包中的MM32L0xx_n_MiniBoard\Lib\ADC\ADC_DMA_MultiChanInterrupt 样例

非常感谢!我竟然没有看到这里有ADC+DMA示例。
页: [1]
查看完整版本: 【MM32 eMiniBoard测评报告】+ADC转换的测试(2)