STM32F407 HAL库 ADC

本文详细介绍了STM32F407ZGT6微控制器的ADC模块配置,包括单通道和多通道DMA读取,以及时钟设置、中断处理和滑动变阻器、光敏电阻等硬件应用。
摘要由CSDN通过智能技术生成

硬件信息

STM32F407ZGT6 ADC参数:

STM32F407ZGT6 有 3 个 ADC,每个 ADC 有 12 位、10 位、8 位和 6 位可选,每个 ADC 有 16 个 外部通道。

STM32F407ZGT6 ADC分配:

在这里插入图片描述

可调电阻原理图,PB0为8通道:

在这里插入图片描述

在这里插入图片描述

时钟配置

在这里插入图片描述

配置详细

在这里插入图片描述

单通道ADC

时钟分频计算

F407的ADC 的时钟<= 36MHZ

FCLK2为84MHZ

84/4 = 21 <= 36MHZ

在这里插入图片描述

配置中断

在这里插入图片描述

测试代码

申明接收数据变量

main.c

extern __IO uint16_t ADC_ConvertedValue;
float ADC_Vol; 

在ADC 初始化函数中,启动ADC

adc.c

void MX_ADC1_Init(void)
{
  ADC_ChannelConfTypeDef sConfig = {0};
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.ScanConvMode = DISABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.NbrOfConversion = 1;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }
  sConfig.Channel = ADC_CHANNEL_8;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  
  // 启动ADC
  HAL_ADC_Start_IT(&hadc1);
}

中断函数中赋值

adc.c

__IO uint16_t ADC_ConvertedValue;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{
  /* 获取结果 */
  ADC_ConvertedValue = HAL_ADC_GetValue(AdcHandle);
}

main函数测试

  while (1)
  {
	  HAL_Delay(1000);
      ADC_Vol =(float) ADC_ConvertedValue/4096*(float)3.3; // 读取转换的AD值
      printf("\r\n AD value = 0x%04X \r\n", ADC_ConvertedValue); 
      printf("\r\n AD value = %f V \r\n",ADC_Vol);  
  }

测试

在这里插入图片描述

多通道DMA读取ADC

硬件配置

PB0:滑动变阻器

PB1:光敏电阻

PA6:自行测量

在这里插入图片描述

DMA配置

循环模式

在这里插入图片描述

ADC配置

在这里插入图片描述

中断配置

在这里插入图片描述

测试代码

adc.c

__IO uint16_t ADC_ByteData[4];

/* ADC1 init function */
void MX_ADC1_Init(void)
{
  /* USER CODE BEGIN ADC1_Init 2 */
  HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_ByteData, 4);
  /* USER CODE END ADC1_Init 2 */
}

main.c

while (1)
  {
    /* USER CODE END WHILE */
		
		
		HAL_Delay(3000);
		
		for(int i=0;i<4;i++)
		{
			ADC_Data[i] = (float)ADC_ByteData[i] / 65536 * (float)3.3;
			
			printf("AD %d:0x%04X \r\n", i, ADC_ByteData[i]);
			printf("AD %d:%f V \r\n", i, ADC_Data[i]);	
		}

    /* USER CODE BEGIN 3 */
  }

测试

在这里插入图片描述

### 回答1: STM32F407 HAL库提供了一组功能强大的接口,用于配置和使用STM32F407微控制器上的ADC模块。 首先,我们需要在代码中引入相关的头文件,例如“stm32f4xx_hal.h”、“stm32f4xx_hal_adc.h”等。然后,我们可以根据需要进行ADC的初始化配置。HAL库提供了方便的函数用于设置ADC的时钟频率、采样时间、精度等。 初始化完成后,我们可以启动ADC的转换过程。HAL库提供了函数用于启动连续转换、单次转换或使用软件触发转换。我们可以选择合适的转换模式,并设置转换触发源(例如定时器触发、外部触发等)。 当转换完成后,我们可以通过回调函数或查询的方式获取转换结果。HAL库提供了用于读取ADC转换数据的函数,例如“HAL_ADC_GetValue”函数。 在使用完ADC后,我们可以选择关闭ADC模块,以节省功耗。HAL库提供了相应的函数用于停止ADC转换和禁用ADC模块。 除了基本的配置和使用功能,HAL库还提供了其他一些有用的功能,例如中断处理、DMA传输等。我们可以根据需求选择性地使用这些功能来提高系统的性能。 总之,STM32F407 HAL库提供了方便易用的接口,使得配置和使用ADC模块变得简单快捷,帮助我们更容易地实现各种ADC应用。 ### 回答2: STM32F407是意法半导体(STMicroelectronics)公司推出的一款基于ARM Cortex-M4内核的32位微控制器。HAL库是ST官方提供的一套硬件抽象层(Hardware Abstraction Layer),旨在简化对芯片外设的配置和使用。 ADC(模数转换器)是STM32F407微控制器的一个重要外设,用于将模拟信号转换为数字信号。在HAL库中,ADC的配置和使用主要涉及以下几个步骤: 1. 初始化ADC外设:使用`HAL_ADC_Init()`函数初始化ADC,在初始化过程中设置ADC的工作模式、采样时间、分辨率等参数。 2. 配置ADC通道:使用`HAL_ADC_ConfigChannel()`函数配置ADC通道,选择要转换的通道和转换的序列。 3. 启动ADC转换:使用`HAL_ADC_Start()`函数启动ADC转换,可以选择单次转换模式或连续转换模式。 4. 获取转换值:使用`HAL_ADC_GetValue()`函数获取转换结果,转换结果是一个数字表示的模拟信号值。 5. 停止ADC转换:使用`HAL_ADC_Stop()`函数停止ADC转换,释放ADC资源。 6. 处理转换结果:根据需要,可以对获取的转换结果进行处理和分析。 上述是ADCHAL库中的主要配置和使用步骤,通过这些步骤,可以实现对ADC外设的配置、启动和结果获取。当然,这只是其中的基本操作,如果需要更复杂的功能,还可以使用HAL库提供的其他函数来完成。需要注意的是,使用HAL库时,需要先包含相应的头文件,并根据需要进行相关的配置和初始化。 总之,STM32F407 HAL库提供了方便易用的接口,可以简化ADC外设在STM32F407微控制器上的配置和使用,使开发者更加便捷地实现自己的应用程序。 ### 回答3: STM32F407是STMicroelectronics(意法半导体)推出的一款基于ARM Cortex-M4内核的32位高性能微控制器。它集成了许多外围设备,其中包括模数转换器(ADC)。针对STM32F407HAL库(Hardware Abstraction Layer)为开发人员提供了一种方便且易于使用的方式来配置和控制ADC模块。 使用STM32F407HAL库进行ADC编程的第一步是初始化ADC模块。首先,需要调用`HAL_ADC_Init()`函数来初始化ADC设备并配置相关的参数,如采样时间、分辨率等。接下来,需要使用`HAL_ADC_ConfigChannel()`函数来配置ADC通道和相关的参数,如参考电压、采样时间等。 一旦ADC模块初始化完成,就可以开始使用它进行采样。通过调用`HAL_ADC_Start()`函数,可以启动ADC的转换过程。转换完成后,可以通过调用`HAL_ADC_PollForConversion()`函数来检查转换是否完成,并通过`HAL_ADC_GetValue()`函数获取转换结果。如果需要连续采样,可以使用`HAL_ADC_Start_IT()`函数以中断方式启动ADC转换。 在使用完ADC之后,应该进行相应的清理工作,释放资源。可以通过调用`HAL_ADC_Stop()`函数停止转换,然后使用`HAL_ADC_DeInit()`函数将ADC模块退回到初始状态。 总结来说,通过STM32F407HAL库编程,可以方便地配置和控制ADC模块,从而实现模拟信号的数字化采样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值