久久人妻精品人妻视频五月天一区二区三区,,自慰午夜喷水久久久av国产成人a视频高在线,,欧美日韩免费专区在线97精品国产手机

  • <cite id="cwywg"></cite>
    <button id="cwywg"></button>
  • <button id="cwywg"><source id="cwywg"></source></button>
    <button id="cwywg"><tbody id="cwywg"></tbody></button>
  • <button id="cwywg"></button>
  • 
    
  • logo logo
    • BANNER
    • BANNER
    • BANNER
    您的位置 : 首頁(yè) > 新聞資訊 > 技術(shù)支持
    STM32F0 ADC學(xué)習(xí)
    發(fā)布者:江蘇瑞易通電子科技有限公司 人氣:706 發(fā)布日期:2021-04-23 10:10:40

    開(kāi)始時(shí)候使用的是stdlib的庫(kù),最近發(fā)現(xiàn)cube庫(kù)用的越來(lái)越廣泛了,遂開(kāi)始使用cube庫(kù)來(lái)完成ADC的多通道采集實(shí)驗(yàn)。  

    ADC 的driver 在STM32F0XX_HAL_DRIVER當(dāng)中,有stm32f0xx_hal_adc.c文件中,我們可以在stm32f0xx_hal_conf.h中開(kāi)啟 宏定義 ADC 模塊。


    ADC有三種工作模式,polling\ interrupt\DMA



    我這里使用了polling的方式來(lái)獲取多通道的數(shù)據(jù)。



    首先是要聲明兩個(gè)參數(shù)設(shè)置的結(jié)構(gòu)體


    ADC_HandleTypeDef             AdcHandle;

    ADC_ChannelConfTypeDef        sConfig;


    [cpp] view plain copy

    AdcHandle.Instance = ADC1;  

      

    AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV4;  

    AdcHandle.Init.LowPowerAutoWait      = DISABLE;  

    AdcHandle.Init.LowPowerAutoPowerOff  = DISABLE;  

    AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;  

    AdcHandle.Init.ScanConvMode          = ADC_SCAN_ENABLE;  

    AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;  

    AdcHandle.Init.ContinuousConvMode    = ENABLE;  

    AdcHandle.Init.DiscontinuousConvMode = DISABLE;  

    AdcHandle.Init.ExternalTrigConv      = ADC_SOFTWARE_START;  

    AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;  

    AdcHandle.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;  

    AdcHandle.Init.DMAContinuousRequests = DISABLE;//  

    AdcHandle.Init.Overrun               = ADC_OVR_DATA_OVERWRITTEN;  

      

    /* Initialize ADC peripheral according to the passed parameters */  

    if (HAL_ADC_DeInit(&AdcHandle) != HAL_OK)  

    {  

      Error_Handler();  

    }  

      

      if (HAL_ADC_Init(&AdcHandle) != HAL_OK)  

    {  

      Error_Handler();  

    }  

      

    /* ### - 2 - Start calibration ############################################ */  

    if (HAL_ADCEx_Calibration_Start(&AdcHandle) != HAL_OK)  

    {  

      Error_Handler();  

    }  


    基本的參數(shù)設(shè)置


    比較重要的參數(shù)有ADC clock設(shè)置,sample cycle,ADC分辨率,多通道 scan mode設(shè)置。


    ADC clock 有兩個(gè)時(shí)鐘源可以選擇,一個(gè)是內(nèi)部的14MHZ的時(shí)鐘,,另一個(gè)為APB的時(shí)鐘 最大為14MHZ.


    get_ADC_value 為讀取AD值的模塊,形參為通道,輸入通道名稱得到該通道對(duì)應(yīng)的AD值。



    float get_ADC_value(uint32_t channel)  

    {  

     // uint32_t nResultDMA;  

      float  temp;  

      start_adc();  

      config_channel(channel);  

        

      HAL_ADC_Start(&AdcHandle);  

      HAL_ADC_PollForConversion(&AdcHandle,1);  

        

      temp=HAL_ADC_GetValue(&AdcHandle);  

      HAL_ADC_Stop(&AdcHandle);  

      //temp=temp*3/4096;  

      return temp;  

      

    }  


    返回新聞列表