STM32F030F4 之ADC 单通道单次采集

https://www.cnblogs.com/beiyhs/p/11412273.html
STM32F030F4 之ADC 单通道单次采集
以STM32F030F4P6,uVision开发环境为例,注意了,若使用其它相近芯片,本文仅供参考。

需要在PA1口给入可调的模拟电压,程序在uVision仿真环境下运行,仿真编程器为ST-LINK2,程序在主环

while (1)处设断点,查看dyzh的值即为PA1口输入的电压值。

// STM32F030F4P6的ADC只有ADC1通道,有9路,分别是:
// 6 脚PA0 ADC_IN0
// 7 脚PA1 ADC_IN1
// 8 脚PA2 ADC_IN2
// 9 脚PA3 ADC_IN3
// 10脚PA4 ADC_IN4
// 11脚PA5 ADC_IN5
// 12脚PA6 ADC_IN6
// 13脚PA7 ADC_IN7
// 14脚PB1 ADC_IN9

下面是main.c文件

#include “stm32f0xx.h”

#include “stm32f0xx_rcc.h”
#include “stm32f0xx_gpio.h”
#include “stm32f0xx_adc.h”

float adc_data=0,dyzh=0; //采集值变量,电压显示值变量

//*******************************************************************************************************************

//引用请指明出处 https://www.cnblogs.com/beiyhs/p/11412273.html

//*********************************************************************************************** 北有寒山 ******

void ADC_GPIO_Init(void) //ADC-GPIO输入引脚配置,在此可以设置9路外部输入通道
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //使能GPIOA时钟

GPIO_InitTypeDef GPIO_InitStructure; //声明结构变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 ; //定义PA0,PA1脚为AD输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //IO口为模拟输入模式
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //AD口设置为浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //按以上参数设置A口 A0/A1
}

//*****************************************************************************************************
void ADC1_Init(void) //配置ADC参数及采集
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能AHB预分频器到外设ADC1的开关
RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4) ; //时钟分频48M/4=12M 最大时钟不超过14M

ADC_DeInit(ADC1); //ADC复位
ADC_DMACmd(ADC1, DISABLE); //禁止DMA

ADC_InitTypeDef ADC_InitStuctrue; //声明ADC结构变量
ADC_StructInit(&ADC_InitStuctrue); //根据ADC_InitStuctrue中指定参数初始化ADC1的寄存器
ADC_InitStuctrue.ADC_Resolution=ADC_Resolution_12b; //采集设为12位精度即4095
ADC_InitStuctrue.ADC_ContinuousConvMode=DISABLE; //禁止持续ADC,设为单次ADC采集
ADC_InitStuctrue.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;

                                                                                                              //不用外部触发,软件触发转换

ADC_InitStuctrue.ADC_DataAlign=ADC_DataAlign_Right; //数据右对齐
ADC_InitStuctrue.ADC_ScanDirection=ADC_ScanDirection_Backward; //数据覆盖/浏览方向
ADC_Init(ADC1,&ADC_InitStuctrue); //按以上参数设置ADC1

ADC_ChannelConfig(ADC1,ADC_Channel_1,ADC_SampleTime_239_5Cycles); //配置ADC1通道1即PA1,

                                                                                                                            //采样周期239.5个周期

ADC_GetCalibrationFactor(ADC1); //校准ADC1
ADC_Cmd(ADC1,ENABLE); //使能ADC1
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN)==RESET); //等待ADC准备
ADC_StartOfConversion(ADC1); //软件启动ADC转换
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET); //等待ADC完成

adc_data=ADC_GetConversionValue(ADC1); //所得数据即为ADC数据

//**********************************************************************************************

int main(void)
{
ADC_GPIO_Init(); //配置ADC的IO口
ADC1_Init(); //配置ADC参数及采集
dyzh=(adc_data*3.288)/4095; //转换采集值为电压值

                                                                     //参考电压3.288V,12位分辨率4095

while (1) //此处可以设断点,查看上面dyzh值
{ }
}

//**********

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值