STM32 - HAL笔记(五):ADC

基础知识

ADC分类
  • 逐次逼近型
  • 双积分型
  • Sigma-Delta型

技术指标

量程:指ADC所能输入模拟信号的类型和电压范围,即参考电压

转换位数:量化过程中的量化位数 n

分辨率:ADC 能够分辨的模拟信号最小变化量,分辨率 = 量程 / 2^n

转换时间:ADC完成一次完整的A/D转换所需要的时间,包括采样、保持、量化、编码的全过程

板载ADC
  • 12位逐次逼近型,可测量内、外信号源
  • 各个通道的 A/D 转换可以单次、连续、扫描或间断模式执行
  • ADC的模拟输入通道分为规则组注入组两种
  • A/D转换结果有两种存储方式:左对齐右对齐

API

/*
 * @Descript			阻塞式ADC开启函数
 * @param		hadc	句柄,用于选择ADC
 * @return				成功返回HAL_OK
*/
HAL_StatusTypeDef 	HAL_ADC_Start(ADC_HandleTypeDef* hadc);


/*
 * @Descript			非阻塞式ADC开启函数
 * @param		hadc	句柄,用于选择ADC
 * @return				成功返回HAL_OK
*/
HAL_StatusTypeDef 	HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);


/*
 * @Descript				阻塞式ADC转换函数
 * @param		hadc		句柄,用于选择ADC
 * @param		Timeout		超时时间
 * @return					成功返回HAL_OK
*/
HAL_StatusTypeDef 	HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);


/*
 * @Descript			ADC采样值读取函数
 * @param		hadc	句柄,用于选择ADC
 * @return				采样值
*/
uint32_t 			HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);


/*
 * @Descript			非阻塞式ADC回调函数
 * @param		hadc	句柄,用于选择ADC
 * @return		void
*/
void 				HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);

Demo

  1. 在 STM32Cube 中设置相关管脚

在这里插入图片描述

  1. 选择左侧 Analog,进行配置

在这里插入图片描述
在这里插入图片描述

Disable:失能

Differential:差分输入

Single-ended:单端输入

  1. 在 Parameter Settings 中设置具体参数

    在这里插入图片描述

    Data Alignment:数据对齐方式

  2. 在NVIC Settings中使能ADC

  1. 配置时钟树时注意 ADC 时钟

    在这里插入图片描述

  2. 阻塞式 ADC

    void ADCx_Get_Value(){
        //打开对应的ADC
        HAL_ADC_Start(&huartx);
        
        //判断ADC转换是否完成
        if(HAL_ADC_PollForConversion(&hadcx, 10) == HAL_OK){
            //读取采样值
            ADC_value = HAL_ADC_GetValue(&hadcx);
            
            //将采样值转换为电压 (voltage = value * 分辨率)
            ADC_voltage = ADC_value * 3300 / (2^12); 
        }
    }
    
  3. 非阻塞式

    //打开ADC
    HAL_ADC_Start_IT(&huartx);
    
    //复写回调函数
    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
        switch(hadc->Instance){
            case ADCx:
                ADC_value = HAL_ADC_GetValue(&hadcx);
                ADC_voltage = ADC_value * 3300 / (2^12);
                break;
            //...    
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值