写在前面——

        本文将介绍嵌入式竞赛实训平台(CT117E-M4)开发板上ADC的使用。

目录

一、硬件平台

二、软件平台

三、原理图

四、配置过程

五、函数编写

六、总结


一、硬件平台

嵌入式竞赛实训平台(CT117E-M4)是北京国信长天科技有限公司设计、生产的一款“蓝桥杯全国软件与信息技术专业人才大赛–嵌入式设计与开发科目”专用竞赛平台,平台以STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提供丰富的实验场景。

CT117E-M4产片图片

二、软件平台

        KEIL5,STM32CubeMX

三、原理图

 

 在硬件平台上,ADC一般用于测量R37,R38上的电压,查阅手册:

PB12  --> ADC1_IN11

PB15  --> ADC2_IN15

四、配置过程

基本配置步骤:

  1. 选择ADC1
  2. 选择通道11
  3. 选择独立模式
  4. 选择12位数据,右对齐
  5. 使能连续转换
  6. 规则通道如图设置

五、函数编写

1.常规方法: 

 ADC初始化后进行ADC校准:

ADC_HandleTypeDef hadc1; //声明两个ADC结构体

HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准

ADC获取函数:

uint16_t getADC1(void) // 获取PB12引脚的电压(对应R38电阻)
{
    uint16_t adc = 0;
    
    HAL_ADC_Start(&hadc1);

    HAL_ADC_PollForConversion(&hadc1, 50);   //等待转换完成,50为最大等待时间,单位为ms,可有可无应该
    adc = HAL_ADC_GetValue(&hadc1);
    
    return adc;
}

主函数:

char buf[64] = {0};

sprintf(buf , "ADC1(R38): %.2f V", (3.3 * getADC1())/4096);
LCD_DisplayStringLine(Line8, (uint8_t *)buf);

sprintf(buf , "ADC2(R37): %.2f V", (3.3 * getADC2())/4096);
LCD_DisplayStringLine(Line9, (uint8_t *)buf);

2.中断方法:

使用定时器: 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)    //定时器中断回调
{
    HAL_ADC_Start_IT(&hadc1); //定时器中断里面开启ADC中断转换,1ms开启一次采集    
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)    //ADC转换完成回调
{
    HAL_ADC_Stop_IT(&hadc1);        //关闭ADC
    HAL_TIM_Base_Stop_IT(&htim3);    //关闭定时器
    AD_Value=HAL_ADC_GetValue(&hadc1);  //获取ADC转换的值

    printf("ADC1 Reading : %d \r\n",AD_Value);
    printf("%.4f V\r\n",(AD_Value*3.3/4096));     //串口打印电压信息
    HAL_TIM_Base_Start_IT(&htim3);       //开启定时器
}

六、总结

 ADC配合CubeMX,还是比较好用的~

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐