ADC新庫


1.單次采集模式

  1.在STM32CUBMX中設置為單次采集模式

  2.在C文件中用HAL_ADC_START()函數啟動ADC

  3.用HAL_ADC_PollForConversion()延時等待采集完成,一般10MS即可

  4.用HAL_IS_BIT_SET(HAL_ADC_STATE(),HAL_ADC_STATE_REG_EOC)判斷ADC轉換是否完成,如果完成置1

  5.接收數據,在主程序中啟動ADC自動校准程序HAL_ADCEx_Calibration_Start(&hadc);注意此程序再HAL_ADC_EX.H中

2.連續采集模式

  1.在STM32CUBMX中設置為連續采集模式

  2.在main函數中只需啟動一次HAL_ADC_START()函數

  3.在C文件中用do while函數反復循環,並需要延時以及判斷標志位

  

#include "bsp_adc.h"


void ADC_Demo(void)
{

    uint16_t ADC_Temp1=0;
    uint32_t ADC_Tempsum=0;
    float ADC_Temp2=0;
    uint8_t i=0;

    do{
        
        HAL_ADC_PollForConversion(&hadc,10);
        if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc),HAL_ADC_STATE_REG_EOC))
        {
            ADC_Tempsum += HAL_ADC_GetValue(&hadc);
            i++;
        }
    }while(i<10); 

            ADC_Temp1 =ADC_Tempsum/10;
            ADC_Temp2 = (float)ADC_Temp1*3.3/4096;
            printf("ADC采集電壓值= %f V\r\n",ADC_Temp2);    
        printf("ADC采集電壓值= %d \r\n",ADC_Temp1);    
}

 

3.連續采集中斷模式

  1.在STM32CUBMX中ADC的選項內部NVIC下面配置中斷打鈎

  2.在main函數中用HAL_ADC_Start_IT(&hadc)函數開啟ADC采集以及ADC中斷;

  3.在pbdata.c中調用中斷回調函數HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);每次采集完成就會中斷一次

  

//下面為公共文件
#include "pbdata.c"
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    static uint8_t i=0;
    if(i<10)
    {
        ADC_try[i++]=HAL_ADC_GetValue(hadc);
    }
    else
        i=0;
}

//下面為bsp_adc.c文件
void ADC_Demo(void)
{
    uint8_t i;
    uint16_t ADC_Temp1=0;
    float ADC_Temp2=0;
    uint16_t ADC_num=0;
    for(i=0;i<10;i++)
    {
        ADC_num+=ADC_try[i];
    }
    ADC_Temp1=ADC_num/10;
    ADC_Temp2=ADC_Temp1*3.3/4096;
    printf("ADC采樣平均值= %f V\r\n",ADC_Temp2);

}

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM