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

测量光敏模块输出的电压 即光线强度
初始化IO引脚

需要配置为模拟输入模式
配置ADC时钟

ADC的编程接口

初始化ADC的基本参数

配置常规序列
#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);
}

浙公网安备 33010602011771号