<dl id="b4zrn"><label id="b4zrn"></label></dl><thead id="b4zrn"></thead>

    <blockquote id="b4zrn"></blockquote>

      <strike id="b4zrn"></strike>
        1. <div id="b4zrn"><label id="b4zrn"></label></div>
          您好,歡迎訪問上海意泓電子科技有限責(zé)任公司網(wǎng)站!
          4新聞資訊
          您的位置: 首頁(yè) ->  新聞資訊 -> 單片機(jī)

          ?STM32F0 ADC學(xué)習(xí)

          文章出處:?jiǎn)纹瑱C(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時(shí)間:
          2020
          11-10

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

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


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



          我這里使用了polling的方式來獲取多通道的數(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;  

            

          }  


          上海意泓電子科技有限責(zé)任公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

          CopyRight 2020-2025 m.frontgate.com.cn All rights reserved   滬ICP備2021005866號(hào)

          久艹视频在线观看这里只有精品,国语自产拍在线视频普通话94,久久婷婷综合缴情亚洲狠狠,亚洲不卡永远在线精品无码
          <dl id="b4zrn"><label id="b4zrn"></label></dl><thead id="b4zrn"></thead>

            <blockquote id="b4zrn"></blockquote>

              <strike id="b4zrn"></strike>
                1. <div id="b4zrn"><label id="b4zrn"></label></div>