stm32ADC DMA 多通道采集(包含定时器)(HAL库)

本文直接将参考文章附上STM32 ADC多通道转换DMA模式与非DMA模式两种方法(HAL库)并对ADC DMA配置中的一些参数进行介绍 参数配置文章

说明:文章在DMA多通道采样时,DMA配置的字长可以为半字,如下

    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;

但是在调用 HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adc_data,(uint32_t)2);时,仍需将对应的第三个参数强制转换为32位格式。

下面对一些常用的配置参数进行解释

  • Scan Conversion Mode(扫描模式):采用多通道必须开启,比如开了ch0,ch1,ch4,ch5。Ch0转换完以后就会自动转换通道1,4,5直到0、1、4、5都转换完就停止。

    但是这种连续性并不是不能被打断。这就引入了间断模式Discontinuous Conversion Mode,可以说是对扫描模式的一种补充。它可以把0,1,4,5这四个通道进行分组。可以分成0,1一组,4,5一组。也可以每个通道配置为一组。这样每一组转换之前都需要先触发一次。Discontinuous Conversion Mode 使能后number of Discontinous Conversions是配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。

  • Continuous Conversion Mode(连续转换模式):Stm32 ADC的单次模式和连续模式。这两中模式的概念是相对应的。这里的单次模式并不是指一个通道。假如你同时开了ch0,ch1,ch4,ch5这四个通道。单次模式转换模式下会把这四个通道采集一边就停止了。而连续模式就是这四个通道转换完以后再循环过来再从ch0开始(连续转换模式一般情况下配合扫描模式工作)。

  • **DMA Continuous Requests(DMA连续请求模式):**在main.c中使用HAL_ADC_START_DMA(&hadc1,(xint32_t *)butter 100)这个语句,使用ADC1和DMA,数据放入buffer数组内,放100个数据。如果DMA连续请求模式失能,这句语句传输完100个数据后自动关闭ADC1和DMA;反之使能后,语句执行完后又会连续从头开始传输数据,即buffer数组中的值一直在更新。

  • HAL_ADC_Start(&ADC1_Handler)(开启ADC):注意和ADC转换函数区分,ADC转换函数分为阻塞型和非阻塞型.

在adc+dma多通道采集数据时可能会出现数据错位的情况,正常情况如下

正常情况
数据错位情况

数据错位情况
可能原因是:采样周期小,而数据长度短,使得转换过快,DMA还没读取就被覆盖了,需要把采样周期变长。

如把ADC_SAMPLETIME_3CYCLES改为ADC_SAMPLETIME_84CYCLE,即可将数据位归位

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值