HAL库的学习 —— ADC的使用

首先将要进行AD采集的脚配置为AD通道:

进行一些参数的配置在这里只配置了AD采集的位数以及数据对启齐方式其它保持默认:

数据右对齐的话能保证AD采集的数组是以高位在前低位在后的存放方式 ADCH:ADCL。

接着在代码里加入如下函数去读取采集的值:

            HAL_ADC_Start(&hadc);
            HAL_ADC_PollForConversion(&hadc,10);    //等待转换完成,第二个参数表示超时时间,单位ms        
            if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc), HAL_ADC_STATE_REG_EOC))
            {
                AD_Value = HAL_ADC_GetValue(&hadc);
            }    

AD_Value的值就是采集到的数字量。

### STM32 HAL配置ADC方法 在STM32微控制器中,通过HAL来配置和使用ADC能够简化开发过程并提高代码可移植性。下面提供了一个简单的例子说明如何初始化和读取ADC值。 #### 初始化ADC外设 为了启动ADC转换,在程序里首先要创建一个`ADC_HandleTypeDef`类型的句柄变量用于保存ADC的状态和其他参数设置。接着调用函数`HAL_ADC_Init()`完成硬件资源分配以及默认参数设定[^1]。 ```c // 定义全局的ADC句柄对象 ADC_HandleTypeDef hadc; void MX_ADC_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; // ADC初始化结构体赋初值 hadc.Instance = ADC1; // 这里的Init成员可以根据具体需求调整, 如时钟模式、分辨率等 hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ScanConvMode = DISABLE; hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc.Init.LowPowerAutoWait = DISABLE; hadc.Init.ContinuousConvMode = DISABLE; hadc.Init.NbrOfConversion = 1; hadc.Init.DiscontinuousConvMode = DISABLE; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; if (HAL_ADC_Init(&hadc) != HAL_OK) { Error_Handler(); } // 配置通道 sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { Error_Handler(); } } ``` 这段代码展示了怎样定义和初始化ADC实例,并设置了单次转换模式下的基本工作条件,比如选择了第零号模拟输入作为测量源并且指定了采样时间为三个周期长度。 #### 启动一次性的ADC转换 当一切准备就绪之后就可以执行具体的模数转换了。这里展示的是最基础的方式——软件触发的一次单独转换: ```c uint32_t adc_value; if(HAL_ADC_Start(&hadc) != HAL_OK){ /* Start conversion error */ } if(HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY)!= HAL_OK){ /* Conversion timeout error */ } adc_value = HAL_ADC_GetValue(&hadc); ``` 上述片段实现了开始ADC采集流程并通过轮询方式等待直到获取有效的数字量输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值