• 13-STM32 ADC单通道单次采集


    ADC结构体

     1  typedef struct
     2 {
     3  uint32_t ADC_Mode; // ADC 工作模式选择
     4  FunctionalState ADC_ScanConvMode; /* ADC 扫描(多通道)或者单次(单通道)模式选择 */
     6  FunctionalState ADC_ContinuousConvMode; // ADC 单次转换或者连续转换选择
     7  uint32_t ADC_ExternalTrigConv; // ADC 转换触发信号选择
     8  uint32_t ADC_DataAlign; // ADC 数据寄存器对齐格式
     9  uint8_t ADC_NbrOfChannel; // ADC 采集通道数
    10  } ADC_InitTypeDef;
    ADC_Mode:当使用一个 ADC 时是独立模式,使用两个 ADC 时是双模式,在双模式下还有很多细分模式可选 
    ADC_ScanConvMode:配置是否使用扫描。如果是单通道 AD 转 换 使 用 DISABLE , 如 果 是 多 通 道 AD 转 换 使 用 ENABLE , 具 体 配 置ADC_CR1:SCAN 
    ADC_ContinuousConvMode:可选参数为 ENABLE DISABLE,配置是启动自动连续转换还是单次转换。使用 ENABLE 配置为使能自动连续转换;使用 DISABLE 配置为单次转换,转换一次后停止需要手动控制才重新启动转换, 具体配置 ADC_CR2:CON 位。
    ADC_ExternalTrigConv:外部触发选择,可根据项目需求配置触发来源。实际上,我们一般使用软件自动触发。
    ADC_DataAlign:转换结果数据对齐模式,可选右对齐ADC_DataAlign_Right或者左对齐 ADC_DataAlign_Left。一般我们选择右对齐模式。
    ADC_NbrOfChannelAD 转换通道数目

    单通道单次采集:
     1 //ADC单通道单次转换
     2 void ADC_Config(void)
     3 {
     4     GPIO_InitTypeDef GPIO_InitStructure;
     5     ADC_InitTypeDef ADC_InitStructure;
     6     NVIC_InitTypeDef NVIC_InitStructure;
     7 
     8      //开启ADC1和GPIO的时钟,两者都在APB2总线上挂载着
     9     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_ADC1, ENABLE);     
    10 
    11     
    12     GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;
    13     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
    14     GPIO_Init(GPIOC, &GPIO_InitStructure);
    15     
    16     
    17     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//第二组
    18     NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
    19     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;//抢占优先级
    20     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //响应优先级
    21     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
    22     NVIC_Init(&NVIC_InitStructure);
    23     
    24     
    25     ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;     //独立模式(一个ADC工作)
    26     ADC_InitStructure.ADC_ScanConvMode = DISABLE;     //单通道扫描模式(只有一个通道)
    27     ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //DISABLE--单次转换模式  ENABLE--连续转换模式
    28     ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不受外界决定,软件触发模式
    29     ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐
    30     ADC_InitStructure.ADC_NbrOfChannel = 1;     //扫描通道数--1
    31     RCC_ADCCLKConfig(RCC_PCLK2_Div8);//配置ADC采样参考时钟的预分频值 72M÷8=9M <14M  
    32     ADC_Init(ADC1,&ADC_InitStructure);
    33     
    34     ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);//使能ADC中断
    35     
    36   //规则通道配置(ADCx 通道 采样次序 采样时间)    
    37     ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);//ADC1,
    38     ADC_Cmd(ADC1,ENABLE);//使能ADC1
    39     
    40     
    41     //采样校准
    42     ADC_ResetCalibration(ADC1); //初始化ADC采样校准器
    43     while(ADC_GetResetCalibrationStatus(ADC1));//等待初始化完成
    44     ADC_StartCalibration(ADC1);  //开始校准
    45     while(ADC_GetCalibrationStatus(ADC1));//等待校准完成
    46     
    47     
    48     ADC_SoftwareStartConvCmd(ADC1,ENABLE);//启动软件转换(没有采用外部触发)
    49 }
    50 
    51 
    52 
    53 void ADC1_2_IRQHandler(void)
    54 {
    55   if(ADC_GetITStatus(ADC1,ADC_IT_EOC)==SET)
    56           
    57     ADC_Value =ADC_GetConversionValue(ADC1);//获取转换的结果
    58      
    59     ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
    60 }
     
     

     

  • 相关阅读:
    怎样判断某个分辨率是不是 16:9
    最简单的判断是否为IE浏览器的方法
    S4 smartforms切换到非word编辑器
    字符串中数字和汉字之前打空格
    elasticsearch 中term查询
    小程序 反编译 pc微信
    vue-element-admin vue-amap使用高德地图 文档没有示例代码
    高德地图 自适应 显示多个点标记
    laravel5 清理 bootstrap/cache/config.php
    element-admin 上传 跨域 问题 http-request
  • 原文地址:https://www.cnblogs.com/darren-pty/p/14094076.html
Copyright © 2020-2023  润新知