zoukankan      html  css  js  c++  java
  • STM32_adc

    static void RCC_Configuration(void);
    static  void GPIO_Configuration(void);
    static  void ADC_Configuration(void);
    static  void DMA_Configuration(void);
     
      void SetupADC(void)
      {
       
        RCC_Configuration();
        GPIO_Configuration();
        DMA_Configuration();
        ADC_Configuration();
      
      }
     
     
      void RCC_Configuration(void)
      {
        
         
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//开启DMA1外设时钟
       
     
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE); //开启APB2外设时钟
     
      }
     
      void GPIO_Configuration(void)
      {
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOC, &GPIO_InitStructure);    
       
       
      }
     
     
      void ADC_Configuration(void)
      {
        ADC_InitTypeDef   ADC_InitStructure; 
        ADC_DeInit(ADC1);
        ADC_InitStructure.ADC_Mode               = ADC_Mode_Independent;  //独立模式
        ADC_InitStructure.ADC_ScanConvMode       = ENABLE;      //连续多通道模式
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;      //ADC转换工作在连续模式
        ADC_InitStructure.ADC_ExternalTrigConv   = ADC_ExternalTrigConv_None; //转换不受外界决定
        ADC_InitStructure.ADC_DataAlign          = ADC_DataAlign_Right;   //右对齐
        ADC_InitStructure.ADC_NbrOfChannel       = 16;       //用于转换的通道数
        ADC_Init(ADC1, &ADC_InitStructure);        //初始化ADC
       
       
       
        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);//选择通道1,次序1,采样239.5周期
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_239Cycles5);//选择通道1,次序1,采样239.5周期
        ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 7, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 8, ADC_SampleTime_239Cycles5); 
        ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 9, ADC_SampleTime_239Cycles5);//选择通道1,次序1,采样239.5周期
        ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 10, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 11, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 12, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 13, ADC_SampleTime_239Cycles5);//选择通道1,次序1,采样239.5周期
        ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 14, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 15, ADC_SampleTime_239Cycles5);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 16, ADC_SampleTime_239Cycles5);   
       
       
        ADC_DMACmd(ADC1, ENABLE);//使DMA与ADC1建立有效联系
       
        ADC_Cmd   (ADC1, ENABLE);              //使能或者失能指定的ADC
        //ADC_SoftwareStartConvCmd(ADC1,ENABLE); //使能或者失能指定的ADC的软件转换启动功能
        ADC_ResetCalibration(ADC1);//重置ADC1校准寄存器
        while (ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成
        ADC_StartCalibration(ADC1);//开始ADC1校准
        while (ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能ADC1软件开始转换
      
      }
      void DMA_Configuration(void)
      {
        DMA_InitTypeDef DMA_InitStructure;
        DMA_DeInit(DMA1_Channel1);//开启DAM通道1
        DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//外设地址
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;//内存地址,自己开辟的数组
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//DMA单向传输方式
        DMA_InitStructure.DMA_BufferSize =320;//使序列1结果放在ADC_DualConvertedValueTab[0],序列2结果放在ADC_DualConvertedValueTab[1]
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//设置DMA外设递增模式
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //设置DMA内存递增模式
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设字长
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存地址
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //设置传输模式连续不断的循环模式,循环模式开启,Buffer写满后,自动回到初始地址开始传输
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;//设置DMA优先级
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//设置DMA的2个memory中的变量互相访问
        DMA_Init(DMA1_Channel1, &DMA_InitStructure);//配置完成后,启动DMA通道
        DMA_Cmd(DMA1_Channel1, ENABLE);
       
      }

  • 相关阅读:
    一文带你了解接口测试价值与体系
    干货|app自动化测试之设备交互API详解
    干货|app自动化测试之Appium问题分析及定位
    干货| app自动化测试之Andriod微信小程序的自动化测试
    如果你也有这些职场困惑,周六一直线上答疑
    文末福利 | 团队管理第一步之高效招聘
    精准化测试原理简介与实践探索
    文末有福利 | 面试时如何命中面试官的考题?
    Visual studio prebuild/postbuild 设置条件不生效
    使用腾讯地图api获取定位信息经纬度(需要浏览器支持,且需要https)
  • 原文地址:https://www.cnblogs.com/crazyxu/p/2294448.html
Copyright © 2011-2022 走看看