STM32 ADC多通道转换DMA模式和非DMA模式两种方法(HAL库)
优采云 发布时间: 2020-08-08 00:481. 非DMA模式(传输)
说明: 这是我第一次做时由百度发布的. 我自己没做我将其保存下来用于学习,因为它很有用. 链接到原创文本: ,我将在下面的第二部分中添加我自己的DMA模式方法.
Stm32 ADC的转换模式仍然非常灵活和强大. 模式有很多类型. 当许多人在没有仔细阅读参考手册的情况下使用它时,也会引起混乱. 我不知道该使用哪种方式来实现我想要的功能. 可以在网上找到很多信息,但是大多数信息都是针对标准库的旧版本的. 为了帮助客户昨天解决此问题,仅作一个总结: 使用stm32cubeMX配置生成一个多渠道获取示例.
软件: STM32Cumebx MDK
硬件: eemaker板(基于stm32F103c8)
在百度上搜索ADC多通道采集. 它们大多数基于dma模式. 我正在谈论使用非dma方法. 首先,有几个概念需要澄清:
扫描模式(如果要采集多个通道,则必须打开): 一次转换选定的通道,例如,打开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参数中的“不连续转换数”用于配置不连续组. 广告价值高时,只能读取每个不连续组的最后一个频道.
生成mdk项目代码. 此时,它尚未完成,但是ADC的初始化已经实现. 有必要采集四个值得发挥作用的通道并自己编写. 以下是我的主要功能的while循环:
<p>for(i=1;i