打印
[MM32软件]

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

[复制链接]
370|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hu9jj|  楼主 | 2020-5-23 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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 样例

MM32L0xx_n_Lib_Samples_V1.30_EN.zip

4.21 MB

使用特权

评论回复
评论
hu9jj 2020-5-24 12:05 回复TA
请各位注意:这个压缩包中ADC_DMA_polling示例的HAL_gpio.c文件有一处错误,其中的exGPIO_PinAFConfig函数后面少了一个大括号,而其后的exGPIO_Clock函数后面又多了一个大括号,导致编译出错。 
板凳
hu9jj|  楼主 | 2020-5-24 07:58 | 只看该作者
huangzushuimd 发表于 2020-5-24 07:33
可以参考该压缩包中的MM32L0xx_n_MiniBoard\Lib\ADC\ADC_DMA_MultiChanInterrupt 样例

非常感谢!我竟然没有看到这里有ADC+DMA示例。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

144

主题

1031

帖子

11

粉丝