zoukankan      html  css  js  c++  java
  • ADC

    #include "sys.h"
    #include "delay.h"
    #include "adc.h"
    
    
    //PF6  ADC3  通道4
    void 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~4
    
    uint32_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~4
    
    Rank:  1
    
    ADC_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);
    }
  • 相关阅读:
    反转链表 16
    CodeForces 701A Cards
    hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)
    hdu 1241 Oil Deposits(水一发,自我的DFS)
    CodeForces 703B(容斥定理)
    poj 1067 取石子游戏(威佐夫博奕(Wythoff Game))
    ACM 马拦过河卒(动态规划)
    hdu 1005 Number Sequence
    51nod 1170 1770 数数字(数学技巧)
    hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
  • 原文地址:https://www.cnblogs.com/baoshulin/p/6217714.html
Copyright © 2011-2022 走看看