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);

}

 

 

 

  

posted @ 2019-04-23 00:12  q601785959  阅读(1598)  评论(0编辑  收藏  举报