在这里,为了测量外部信号的频率,我们先得有个信号源,产生一个频率和占空比可调的波形,但是考虑到大家可能没有信号发生器,所以我这里就借用了一下上一小节的代码,先用PWM模块,在PA0端口输出一个频率和占空比可调的波形,然后我们本节的代码,测量波形的输入口是PA6,所以我们直接用一根线,把PAO和PA6连在一起,这样就能测量自己PWM模块产生波形的频率了(如果你还有信号发生器的话,那就不需要PA0自己输出波形了,直接用信号发生器产生可调的测试信号,接在PA6端口,这样就行了),如果想同时测量频率和占空比,STM32的输入捕获还设计了一个PWMI模式,即PWM输入模式,另外它们的CH1到CH4,4个通道的引脚,也是共用的,所以对于同一个定时器,输入捕获和输出比较,只能使用其中一个,不能同时使用
#输出比较和特出捕获区别:
oc(Output Compare) 输出比较:输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
IC (Input Capture)输入捕获:输入捕获模式下,当通道输入引脚出现指定电平跳变瞬间,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
把当前CNT的值读出来,写入到CCR中去
左边是边沿信号输入引脚CH1。一旦有边沿,比如说上升沿那这一块输入滤波和边沿检测电路就会检测到这个上升沿。让输入捕获电路产生动作,所以这一块的作用和外部中断差不多,都是检测电平跳变,然后执行动作。只不过外部中断执行的动作是向CPU申请中断,而这里电路执行的动作就是,控制后续电路让当前CNT的值,锁存到CCR奇存器中。对比一下输出比较,就是,输出比较,引脚是输出端口输入捕获,引脚是输入端口输出比较,是根据CNT和CCR的大小关系来执行输出动作输入捕获是接收到输入信号,执行CNT锁存到CCR的动作,这就是输入捕获的执行流程和与输出比较的区别
PWMI模式
这个PWMI模式就是PWM的输入模式,是专门为测量PWM频率和占空比设计的,把这两个功能结合起来,测量频率占空比就是硬件全自动执行,(后面)软件不需要进行任何千预,也不需要进中断
需要测量的时候,直接读取CCR寄存器就行了
使用非常方便,而且极大地减轻了软件的压力
笔记附录