输入捕获:
输入捕获简介:
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的时钟最好不超过14M。T = 采样时间 (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