1.实验说明
PA4口作为ADC采集口,PA4口接地或者接3.3V。下载运行程序,PA4口接地,会发现VolDta值为0,然后把 PA4口接3.3V,会发现VolDta值为3300
2.主要程序
直接上main.c
#include "delay.h"
#include "sys.h"
//ADC配置,ADC1通道4
void ADC_Config_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
/* ADC1 regular channel4 configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_13Cycles5);
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//启动ADC1,软件方式
}
//GPIO初始化,PA4配置成ADC模拟输入
void GPIO_Config_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1|RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
int ADCData;//ADC寄存器值
uint16_t VolDta;//ADC电压值
//主函数,采用外部8M晶振,72M系统主频,可以在void SetSysClock(void)函数中选择主频率设置
int main(void)
{
delay_init(); //延时函数初始化,通过Systick中断实现1ms延时功能
GPIO_Config_Init();//PA4引脚配置成模拟输入
ADC_Config_Init();//ADC配置,ADC1通道4
while(1)
{
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC ));//等待转换结束
ADCData=ADC_GetConversionValue(ADC1);//获取ADC采集值
VolDta=ADCData*3300/4095;//ADC采集值转换成电压值,单位mV
delay_ms(200);//等待200ms
ADC_SoftwareStartConvCmd(ADC1,ENABLE); //启动ADC1 的软件转换功能
delay_ms(200);
}
}
标签:PA4,例程,void,InitStructure,ADC,ADC1,GPIO,STM32F1
From: https://blog.csdn.net/m0_63679833/article/details/139611799