STM32F4xx系列HAL库配置ADC电压采集

AD转换框图

 

ADC采样原理

ADC主要参数

1、分辨率

2、相对精度

3、转换速度

4、采样间隔时间

5、采样的电压范围

ADC框图

 双重ADC和三重ADC

 ADC_HandleTypeDed结构体

 ADC_InitTypeDef结构体

 

 HAL库配置ADC电压采集-单通道采集

 

 

 这里只需要重定义一下ADC的回调函数即可,然后将ADC采集到的16bit数据赋给自己定义的变量即可

/**
  * @brief  转换完成中断回调函数(非阻塞模式)
  * @param  AdcHandle : ADC句柄
  * @retval 无
  */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
	/*获取采集结果*/
	ADC_ConvertedValue =HAL_ADC_GetValue(hadc);
}

 主函数中只需要进行一个数值转换,将读取到的16bit数据转换成电压值,然后通过串口发送显示

main.c

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
	uint8_t buff[128]={0};
	float ADC_Vol;
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
	HAL_ADC_Start_IT(&hadc1);//开启ADC中断
  while (1)
  {
		ADC_Vol=(float)ADC_ConvertedValue/4096*3.3;//读取转换的AD值
		printf("\r\n The current AD value = 0x%04X \r\n", ADC_ConvertedValue);
		printf("\r\n the current AD value = %f V \r\n",ADC_Vol);
		HAL_Delay(500);
  }
}

 HAL库配置ADC电压采集-多通道采集

我们这里选择多通道采集PC2_GPIO口的电平

 将ADC1、ADC2、ADC3的通道12全部打开

然后打开ADC1的DMA2,这里只需要打开ADC1的DMA,ADC2和ADC3的数据都是通过ADC1的DMA来发送

 

 

 其他均使用默认配置即可,ADC2和ADC3的配置是默认跟随ADC1的配置的,不用更改

多通道采集,只需要使能三个ADC以及ADC1的DMA传输功能即可

这里只需要修改主函数,其他使用默认配置即可

main.c

 

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  MX_ADC2_Init();
  MX_ADC3_Init();
  MX_USART1_UART_Init();
	HAL_ADC_Start(&hadc3);	//ADC开启顺序,必须按照这个顺序,否则会出错
	HAL_ADC_Start(&hadc2);
	HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)ADC123_Buff,3000);
  while (1)
  {
		//ADC1
		printf("ADC1_L:%f V \r\n",(float)(uint16_t)ADC123_Buff[0]*(3.3/4096));
		//ADC2
		printf("ADC2_H:%f V \r\n",(float)(uint16_t)(ADC123_Buff[0]>>16)*(3.3/4096));
		//ADC3
		printf("ADC3_L:%f V \r\n",(float)(uint16_t)ADC123_Buff[1]*(3.3/4096));
		//ADC1
		printf("ADC1_H:%f V \r\n",(float)(uint16_t)(ADC123_Buff[1]>>16)*(3.3/4096));
		//ADC2
		printf("ADC2_L:%f V \r\n",(float)(uint16_t)ADC123_Buff[2]*(3.3/4096));
		//ADC3
		printf("ADC3_H:%f V \r\n",(float)(uint16_t)(ADC123_Buff[2]>>16)*(3.3/4096));
		printf("\r\n");
		HAL_Delay(500);	
  }
}

 实验结果  

 

 

  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F4xx HAL库是针对STM32F4系列微控制器的一套软件库,是ST公司提供的一种高级抽象层级(HAL)软件库。该库致力于简化STM32F4系列微控制器的驱动和操作,使开发人员可以更加轻松地使用STM32微控制器。 STM32F4xx HAL库提供了丰富的功能和接口,包括GPIO(通用输入输出),UART(通用异步收发器),SPI(串行外设接口),I2C(I²C总线接口),定时器,ADC(模数转换器)等。通过这些功能和接口,开发人员可以实现各种应用,如串行通信、数据采集、外设控制等。 HAL库详解主要包括以下几个方面: 1. 初始化和配置HAL库提供了一系列函数来初始化和配置微控制器的各个模块。开发人员只需设置相应的参数并调用相应的函数即可完成初始化和配置工作。 2. 中断处理:HAL库提供了用于中断处理的函数,并且简化了中断的使用。开发人员可以使用HAL库提供的函数注册中断处理函数,并可以方便地配置中断触发条件和优先级。 3. 外设驱动:HAL库提供了各种外设的驱动函数,使开发人员可以方便地配置和操作外设。开发人员只需简单地调用相应的函数即可实现对外设的控制。 4. 时钟管理:HAL库提供了函数用于设置各个模块的时钟。开发人员可根据需求调整时钟频率和分频系数,从而优化系统性能。 5. 低功耗模式:HAL库支持低功耗模式,可以帮助开发人员优化系统功耗。通过调用相应的函数,开发人员可以将系统进入低功耗模式,并在必要时唤醒系统。 总之,STM32F4xx HAL库是一套强大而灵活的软件库,它简化了STM32F4系列微控制器的驱动和操作。通过HAL库,开发人员可以更加轻松地进行嵌入式系统开发,提高开发效率并降低开发成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值