STM32L0开发系列——01 ADC采集
前言
使用芯片:STM32L051C8T6
软件平台:KEIL V5、STM32CubeL0
库函数:HAL
一、原理图
本文介绍在STM32上使用ADC1的第1通道,对电池电量进行采集。
二、ADC通道与引脚对应关系
三、ADC相关
1、 ADC 可由 APB 时钟或 HSI16 时钟提供。
2、 ADC 转换时间: 12 位分辨率对应的转换时间为 0.87 µs (1.14 MHz), 10 位分辨率
对应的转换时间为 0.81 µs,若降低分辨率,可进一步缩短转换时间。
四、实验步骤
1、系统时钟配置
- //******************************************************************************
- //name: SystemClock_Config
- //introduce: 系统时钟配置
- //parameter: none
- //return: none
- //changetime: 2019.05.21
- //******************************************************************************
- void SystemClock_Config(void)
- {
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_PeriphCLKInitTypeDef PeriphClkInit;
- RCC_OscInitTypeDef RCC_OscInitStruct;
- __PWR_CLK_ENABLE();
- __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.HSIState = RCC_HSI_ON; //ADC的时钟源
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_8;
- RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
- HAL_RCC_OscConfig(&RCC_OscInitStruct);
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
- HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);
- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
- PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
- HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
- __SYSCFG_CLK_ENABLE();
- }
复制代码
注意:一开始程序中没有配置HSI时钟,采集不到电压
2、ADC文件
3、main中测试
- while(1)
- {
- BATTER_VALUE = GET_ADC(ADC_CHANNEL_1);
- temp=(float)BATTER_VALUE*(3.3/4096)*2;
- printf("temp=%0.2f\r\n",temp);
-
- HAL_Delay(100);
- }
复制代码
四、实验结果
由于ADC的精度是12bit(4096)、参考电压为3.3V,因此实际读出的电量值为BATTER_VALUE3.3/40962.
试验成功
|