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值
{ }
}

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM