[STM32F0xx]的AD转换驱动程序

        STM32F0xx的AD转换程序。

        该例程使用的是PB01引脚,AD功能为ADC_IN9,查数据手册,如下图所示。

        首先初始化引脚:

        

void adc_init( void )
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE );
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init( GPIOB, &GPIO_InitStructure );
    
    ADC_Configuration();
}

 

        然后,初始化ADC的功能:

void ADC_Configuration( void )
{
    ADC_InitTypeDef ADC_InitStructure;
    
    ADC_DeInit( ADC1 );
    ADC_StructInit( &ADC_InitStructure );
    
    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
    ADC_Init( ADC1, &ADC_InitStructure );
    
    ADC_ChannelConfig( ADC1, ADC_Channel_9, ADC_SampleTime_239_5Cycles );
    
    ADC_GetCalibrationFactor( ADC1 );
    
    ADC_Cmd( ADC1, ENABLE );
    
    while ( !ADC_GetFlagStatus( ADC1, ADC_FLAG_ADRDY ) );
    ADC_StartOfConversion( ADC1 );
}

         ADC_ChannelConfig( ADC1, ADC_Channel_9, ADC_SampleTime_239_5Cycles );

        其中ADC的通道配置函数,配置为ADC1,通道9,采样周期为ADC_SampleTime_239_5Cycles。

        

        接下来直接使用获取AD值的函数,ADC_GetConversionValue( ADC1 );  该函数位于#include "stm32f0xx_adc.h"的文件中。

        下述函数为获取8次ADC的值,求和后求平均,然后转换为电压值(单位:V)avg*3300/4096 。


uint32_t ADC_Check( void )
{
    uint32_t ResultVolt = 0;
    uint8_t i;
    
    for ( i = 0; i < 8; i++ )
    {
        while ( ADC_GetFlagStatus( ADC1, ADC_FLAG_EOC ) == RESET );
        ResultVolt += (uint32_t)ADC_GetConversionValue( ADC1 );
    }
    // 求平均
    ResultVolt = ResultVolt >> 3;
    // 求得1000倍电压值
    //ResultVolt = (ResultVolt*3300) >> 12;
    
    return ResultVolt;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值