不用采集规则就可以采集(非DMA模式转换模式的方法,你get到了吗? )
优采云 发布时间: 2021-08-29 15:10不用采集规则就可以采集(非DMA模式转换模式的方法,你get到了吗?
)
一、Non-DMA 模式(传输)
说明:这个是我第一次做的时候百度出来的。我不是自己做的。因为觉得很有用,所以存起来供学习之用。原文链接:,我会在下面的第二部分添加我自己的DMA模式的方法。 .
Stm32 ADC的转换方式还是非常灵活强大的。有许多类型的模式。当许多人在没有仔细阅读参考手册的情况下使用它时,这也会导致混淆。不知道用什么方式来实现我想要的功能。网上也可以查到很多资料,但大部分都是针对旧版标准库的。昨天帮客户解决了这个问题,只是做个总结:使用stm32cubeMX配置生成多通道采集的例子。
软件:STM32Cumebx MDK
硬件:eemaker板(基于stm32F103c8)
在百度上搜索ADC多通道采集,大部分都是基于dma模式的。我说的是使用非 dma 方法。首先,有几个概念需要澄清:
扫描模式(如果要采集multi-channel 必须开启):就是一次转换选中的通道,例如ch0、ch1、ch4、ch5都开启。 Ch0 转换后,会自动转换通道 0、1、4、5,直到转换完成。但这种连续性并不是不能中断。这就引入了一种非连续模式,可以说是对扫描模式的补充。可对0、1、4、5四个通道进行分组,可分为0、1组和4、5组,每个通道也可配置为一组。这样每组转化都需要触发一次。
Stm32 ADC 的单模式和连续模式。两种模式的概念是对应的。这里的单一模式不是指一个通道。假设您同时打开四个通道 ch0、ch1、ch4 和 ch5。在单模转换模式下,这四个通道采集会停在一侧。连续模式下,四个通道转换后循环,然后从ch0开始。
还有规则组和注入组的概念。因为我在这个例子中只使用了规则组,所以我不会介绍这两个概念。如果你想弄清楚,请参阅手册。
进入下面的主题并配置stm32cubeMX。
先开启几个通道,我设置为0、1、4、5.
然后我们需要配置ADC参数:
目前,经过我的测试,如果要使用非dma和中断模式,只有这样配置才能正确进行多通道转换:扫描模式+单次转换模式+非连续转换模式(每个非连续组一个通道) .
在此模式下配置分析。配置多通道时必须开启扫描模式。 stm32cubeMX 也是默认设置,只能启用。在单次转换模式下,我不需要不断去每个通道值采集,而是在四个通道采集完成后停止。不连续的配置是这里的关键。不连续模式允许将扫描的四个通道分为四组。 stm32cubeMX参数中的Discontinous Conversions的数量就是配置不连续组,每组有几个通道。此处必须配置为1(否则在获取广告值时,只能读取每个不连续组的最后一个通道)。
生成mdk项目代码。此时还没有完成,但是已经实现了ADC的初始化。你需要采集自己写四个频道值得的功能。以下是我的主函数的while循环:
<p>for(i=1;i