STM32 ADC多通道DMA采集数据(HAL库)

一、CubeMX配置

外部时钟配置: 

烧录配置:

 

选择ADC1,开始需要的通道:

 注意下面图片中ADC1的配置

(1)Data Alignment—>Right alignment 此项选择右对齐,保持不变。

(2)Scan Conversion Mode—>Enable 此项选择扫描模式使能,代表对4路ADC输入分别扫描,如果不使能,其将会只读取一个输入的值。

(3)Continuous Conversion Mode —>Enable 此项选择连续扫描模式,表示将连续不断的对ADC的值进行转换。如果此项不使能,将会只采集一次就会停止,直到下一次使能才继续进行一次ADC转换。

(4)Discontinuous Conversion Mode—>Disable 此项和第三项是正好相反,如果选择使能,会对ADC通道进行分组。

(5)Number of Conversion---->2 此处有多少路输入就选择多少,而且只有在此处选择数字之后下面才会出来4个不同的通道。

(6)在出现的2个Rank中,分别配置每一路,例如Rank1配置为Channel 0,采样时间3Cycles; Rank2配置为Channel 1,采样时间同样为3Cycles。此处的注意事项是,如果你不对每一路进行检查配置,可能出现好多Rank同时采集一个Channel,从而导致AD的采集数据的错误。
公式为: Tconv = 采样时间 + 12.5 个周期

 

ADC的DMA配置:

 时钟树配置:

二、代码部分

代码部分十分简单

我们只需要先声明一个存放数据的数组:

uint16_t ADValue[2];

然后再在main函数的初始化里面加入

 HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADValue,2);

整体代码如下

int main(void)
{
  /* USER CODE BEGIN 1 */
	uint16_t ADValue[2];
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
 HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADValue,2);
 
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

上述内容参考自

在使用HAL库进行ADC多通道DMA读取时,你可能会遇到读数不正常的问题。根据引用\[1\]中的描述,这个问题可能是由于Cubemx生成的main.c文件中DMA初始化的顺序在ADC初始化之后导致的。解决这个问题的方法是将DMA初始化的顺序调整到ADC初始化之前。具体来说,你可以将MX_DMA_Init()函数的调用放在MX_ADC1_Init()函数之前。这样做可以确保DMAADC之前正确初始化,从而解决读数不正常的问题。 另外,引用\[2\]提供了关于HAL库ADC多通道数据采集的详细介绍,包括轮询方式、DMA方式和DMA+TIM方式。你可以根据自己的需求选择适合的方式进行多通道数据采集。 引用\[3\]展示了一个读取ADC采集数值的函数示例。你可以根据自己的需要修改函数中的通道配置和采样时间,并使用该函数读取多个通道的数据。 总结起来,要使用HAL库进行ADC多通道DMA读取,你需要确保DMA的初始化顺序在ADC之前,并根据需要选择合适的数据采集方式。 #### 引用[.reference_title] - *1* [hal库adc 多通道dma 读取不正常](https://blog.csdn.net/qq_36523059/article/details/125057069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32CubeMX | HAL库ADC多通道数据采集(轮训、DMADMA+TIM)、读取内部传感器温度](https://blog.csdn.net/qq153471503/article/details/108123019)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值