首页 > 代码库 > ADC

ADC

#include "sys.h"#include "delay.h"#include "adc.h"//PF6  ADC3  通道4void my_adc3_init(){    ADC_InitTypeDef  ADC_InitStruct;    GPIO_InitTypeDef GPIO_InitStruct;    ADC_CommonInitTypeDef ADC_CommonStruct;    //1.打开ADC时钏    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);        //配置成模拟模式    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;    GPIO_Init(GPIOF, &GPIO_InitStruct);    /*    配置CR1 CR2寄存器 每个ADC控制器,配置对应的CR1,CR2    使用 void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)    来初始化ADC控制器    ADC_TypeDef* ADCx  选择对应的控制器        uint32_t ADC_Resolution;      功能:配置分辨率    范围:ADC_Resolution_6b ~12    寄存器:CR1 24~25位        FunctionalState ADC_ScanConvMode;    功能:是否开启扫描模式    范围:ENABLE DISABLE        FunctionalState ADC_ContinuousConvMode;    功能:是否开启连续模式    范围:ENABLE DISALBE        uint32_t ADC_ExternalTrigConvEdge;    功能:触发方式    范围:ADC_ExternalTrigConvEdge_None    寄存器:CR2 28~29位        uint32_t ADC_ExternalTrigConv;    功能:触发源的选择    范围:……。    寄存器:CR2 24~27        uint32_t ADC_DataAlign;     功能:数据对齐方式    范围:ADC_DataAlign_Right  ADC_DataAlign_Left    寄存器CR2  11        uint8_t  ADC_NbrOfConversion;     功能:规则通道的选择    范围:    寄存器:SQR1寄存器 20-23位     */        ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;    //ADC_InitStruct.ADC_ExternalTrigConv =     ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;    ADC_InitStruct.ADC_NbrOfConversion = 1; //1个规则通道    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;    ADC_InitStruct.ADC_ScanConvMode = DISABLE;    ADC_Init(ADC3, &ADC_InitStruct);    /*void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);主要配置通用寄存器 CCR,配置该寄存器三个ADC控制器都有效uint32_t ADC_Mode;功能:配置ADC模式范围:ADC_Mode_Independent ……。寄存器:CCR  0~4uint32_t ADC_Prescaler;功能:配置分频系数范围:ADC_Prescaler_Div2~8  最后分率不能超过36MHz 寄存器:16~17位uint32_t ADC_DMAAccessMode;功能:是否开启DMA模式范围:ADC_DMAAccessMode_Disabled寄存器:CCR 14~15位uint32_t ADC_TwoSamplingDelay;功能:两次采样延迟时间范围: ADC_TwoSamplingDelay_5Cycles~20寄存器CCR 8~11位*/    ADC_CommonStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;    ADC_CommonStruct.ADC_Mode = ADC_Mode_Independent;    ADC_CommonStruct.ADC_Prescaler = ADC_Prescaler_Div4;    ADC_CommonStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;    ADC_CommonInit(&ADC_CommonStruct);        //使能ADC控制器    //CR2 0位 开启ADC控制器    ADC_Cmd(ADC3, ENABLE);            //规则通道的配置    ADC_RegularChannelConfig(ADC3,ADC_Channel_4,1 ,ADC_SampleTime_480Cycles);/*void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)ADC_TypeDef* ADCx 1~3通道:ADC_Channel_0~4Rank:  1ADC_SampleTime_3Cycles~480   周期转换周期*/    }//手动开启ADC的转换uint16_t get_val(){/*    开启转换    void ADC_SoftwareStartConv(ADC_TypeDef* ADCx);    */        //ADC_SoftwareStartConvCmd;    ADC_SoftwareStartConv(ADC3);        //转换ADC值,需要一定时间     //delay_ms(10);/*    FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);*/        //等待时间必须要有    while(ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC) == RESET)    {            }            return ADC_GetConversionValue(ADC3);}

 

ADC