zoukankan      html  css  js  c++  java
  • 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 }
     
     

     

  • 相关阅读:
    Java 实现 蓝桥杯 生兔子问题
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    深入探究VC —— 资源编译器rc.exe(3)
    深入探究VC —— 编译器cl.exe(2)
    深入探究VC —— 编译器cl.exe(1)
  • 原文地址:https://www.cnblogs.com/darren-pty/p/14094076.html
Copyright © 2011-2022 走看看