STM32F103RCT6学习之五:ADC
1.ADC基础
- ADC(Analog-Digital Converter)模拟-数字转换器
- ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
- 12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V,转换结果范围:0~4095
- 18个输入通道,可测量16个外部和2个内部信号源
- 规则组和注入组两个转换单元
- 模拟看门狗自动监测输入电压范围
- STM32F103RCT6 ADC资源:ADC1、ADC2,ADC3
ADC数据对齐:
数据右对齐数据左对齐
2.查询方式测量电压
1)进行基本配置
2)编辑代码
除了与串口有关的外,代码主要是在main函数中,主要涉及ADC的转换流程:启动--》等待转换完成--》读取传话数值
int main(void)
{
/* USER CODE BEGIN 1 */
/* 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_USART1_UART_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1); //对 ADC 进行校准,确保采样准确性
uint16_t ADC_Value;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_ADC_Start(&hadc1); //开启ADC转换
if (HAL_ADC_PollForConversion(&hadc1, 50) == HAL_OK) { //等待 ADC 转换完成,超时时间为 50ms
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC)) // 检查ADC是否转换完成 EOC = End Of Conversion,转换完成标志位
{
ADC_Value = HAL_ADC_GetValue(&hadc1); //获取ADC采样值
printf("ADC1 Reading : %d \r\n",ADC_Value); //输出ADC采样值
printf("PA1 True Voltage value : %.2fV \r\n",ADC_Value*3.3f/4096); //根据参考电压,计算并输出采集电压 3.3f表示浮点计算
}
}
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
3)分析