STM32学习-44-[ADC]常规单通道转换

image
测量光敏模块输出的电压 即光线强度

初始化IO引脚

image
需要配置为模拟输入模式

配置ADC时钟

image

ADC的编程接口

image

初始化ADC的基本参数

image

配置常规序列

#include "stm32f10x.h"

void App_ADC1_Init(void);

int main(void)
{
	App_ADC1_Init();

	while(1)
	{
		// 清除EOC标志位
		ADC_ClearFlag(ADC1, ADC_Flag_EOC);

		// 通过软件启动的方式发送脉冲
		ADC_SoftwareStartConvCmd(ADC1, ENABLE);

		// 等到常规序列转换完成
		while(ADC_GetFlagStatus(ADC1, ADC_Flag_EOC) == RESET);

		// 读取转换结果
		uint16_t dr = ADC_GetConversionValue(ADC1);

		// 将结果转换成电压
		float voltags = dr * (3.3f / 4095);

		// 之后根据电压的值做不同的处理就好了
	}
}

void App_ADC1_Init(void){
	// 初始化PA0引脚 模拟模式
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO InitStruct.GPIO Pin = GPIO_Pin_0;
	GPIO InitStruct.GPIO Mode = GPIO_Mode_AIN;
	GPIO_Init(GPIOA, &GPIO_InitStruct);

	// 配置ADC模块的时钟
	// 设置分频器的分频系数(6分频)
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	// 使能ADC1的时钟
	RCC_APB2PeriphCLockCmd(RCC_APB2Periph_ADC1, ENABLE);

	// 初始化ADC的基本参数
	ADC_InitTypeDef ADC_InitStruct;
	ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; // 关闭连续模式
	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 右对齐
	ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	// 常规序列的外部触发信号
	ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; // 独立模式
	ADC_InitStruct.ADC_NbrOfChannel = 1; // 常规序列1个通道
	ADC_InitStruct.ADC_ScanConvMode = DISABLE;
	ADC_Init(ADCl,&ADC_InitStruct);

	// 配置常规序列
	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampléTime_13Cycles5);// 10.24轮
	// 闭合开关
	ADC_ExternalTrigConvCmd(ADC1, ENABLE);

	// 闭合ADC总开关
	ADC_Cmd(ADC1, ENABLE);
}
posted @ 2026-09-03 14:46  灵垚克府  阅读(7)  评论(0)    收藏  举报