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);
    }
  • 相关阅读:
    富文本,NSAttributedString,当需要改变的内容有相同的时候的解决方法
    iOS 如何将证书和描述文件给其他人进行真机调试(Provisioning profile "描述文件的名字" doesn't include the currently selected device "你的手机名字".)
    iOS 去除字符串中的H5标签
    The dependency `AMapSearch (~> 3.0.0)` is not used in any concrete target. cocoapods在update或者install的时候报错解决办法
    iOS 3D Touch 五个快捷键的问题
    根据内容计算cell的高度
    iOS UIPickerView 可能会出现选中行不显示或者去掉上下两条横线的问题解决,
    iOS 开发 常用的正则验证表达式:电话 、邮箱等等
    使用MLeaksFinder检测项目中的内存泄露
    iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0
  • 原文地址:https://www.cnblogs.com/baoshulin/p/6217714.html
Copyright © 2011-2022 走看看