HAL库的输入捕获以及ADC(基础)

输入捕获:

输入捕获简介:

IC(Input Capture)输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模式,同时测量频率和占空比 可配合主从触发模式,实现硬件全自动测量

输入捕获的HAL库配置:

1、选择对应引脚的时钟

2、选择时钟通道并改成输入模式

3、更改分频系数(PSC)

4、开启中断

输入捕获相关函数:

HAL_TIM_IC_Start(htim,TIM_CHANNEL_1)【开启输入捕获】

(要写入的值:先确认哪个时钟,再选择哪个通道)

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)【捕获中断回调函数】

(写入捕获到之后,执行的函数)

注意:写完后要加上HAL_TIM_IC_Start(htim,TIM_CHANNEL_1)重新开启一下定时器

ADC:

ADC简介:

ADC全称为Analog-to-Digital Converter,中文名称为模数转换器。ADC是一种将模拟信号转换为数字信号的电路设备,它在电子系统中扮演着非常重要的角色。(模拟信号转化为数字信号为了增强信号保密性,提高信号抗干扰能力,方便信号的传输和处理,以及提高信号的储存和复制效果)

模拟信号是以连续的方式变化的信号,例如声音、温度等,而数字信号是以离散的方式表示的信号,它是由“0”和“1”两种状态组成。ADC将模拟信号的大小和时间上的连续性转化为数字信号来进行处理,因此在很多电子系统中都需要使用ADC。

在单片机中ADC的用处:

单片机内部集成有ADC模块,我们可以通过配置单片机的寄存器操作,将外部的模拟信号输入到ADC输入端口,ADC会将其转换成数字信号,并将结果保存在特定的寄存器中。通过读取这些寄存器的值,我们就可以得到正在测量的模拟量的数字化值

 单片机中常使用ADC技术的应用包括温度和湿度测量、光强度检测、电压和电流测量、电池电量测量等。在这些应用中,ADC会将模拟量信号转换为数字信号,然后通过单片机内部的处理器进行处理、分析、存储等操作,实现各种不同的智能化应用。

ADC的HAL库配置:

在引脚配置中选择对应引脚并找到ADC_IN

在Analog功能中找到对应的ADC控制器,并开启对应的通道

其他参数不用改,以上是基础配置

下面是对配置的更多了解

1 单次转换模式:ADC只执行一次转换;

2 连续转换模式:转换结束之后马上开始新的转换;

3 扫描模式:ADC扫描被规则通道和注入通道选中的所有通道,在每个组的每个通道上执行单次转换。在每个转换结束时,这一组的下一个通道被自动转换。如果设置了CONT位(开启了连续 转换模式),转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。

4 间断模式:触发一次,转换一个通道,在触发,在转换。在所选转换通道循环,由触发信号启动新一轮的转换,直到转换完成为止。

ADC通道在转换时分为规则通道注入通道

规则通道:规则通道相当于你正常运行的程序,就是正常执行程序
注入通道:注入通道可以打断规则通道,如果在规则通道转换过程中,有注入通道进行转换,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程

Scan Conversion Mode( 扫描模式 ) :DISABLE  如果只是用了一个通道的话,DISABLE就可以了(也只能DISABLE),如果使用了多个通道的话,会自动设置为ENABLE。 就是是否开启扫描模式

Continuous Conversion Mode(连续转换模式):ENABLE   设置为ENABLE,即连续转换。如果设置为DISABLE,则是单次转换。两者的区别在于连续转换直到所有的数据转换完成后才停止转换,而单次转换则只转换一次数据就停止,要再次触发转换才可以进行转换

Discontinuous Conversion Mode(间断模式):DISABLE  因为我们只用到了1个ADC,所以这个直接不使能即可

STM32F1的ADC最大的转换速率为1MHz(F4是2.4Msps),也就是说最快转换时间为1us,为了保证ADC转换结果的准确性,ADC的时钟最好不超过14MT = 采样时间 (Sampling Time)+ 12.5个周期

ADC的使用:

可以重新写一个ADC的调用函数:

double getADC(ADC_HandleTypeDef*pin)
{
    unsigned int adc;
    HAL_ADC_Start(pin);//开启ADC
    adc=HAL_ADC_GetValue(pin);//读取ADC
    return adc*3.3/4096;//公式计算
}

使用函数时要注意选取对应的ADC控制器

如:getADC(&hadc1) ;getADC(&hadc2)

资料来源:

CSDN博主:Z小旋

原文链接:https://blog.csdn.net/as480133937/article/details/99627062

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值