这次来分享上次没说完的输入捕获的知识点
实验中用到两个引脚,一个是通用定时器?TIM3?的通道?1,即?PA6,用于输出?PWM?信号,另一
个是高级控制定时器?TIM1?的通道?1,即?PA8,用于?PWM?输入捕获,实验中直接用一根杜邦线
短接即可?PA6?和?PA8?即可,同时可用示波器监控?PA6?的波形,看看实验捕获的数据是否正确。
PA6:用定时器的输出比较功能输出波形。
PA8:用定时器的输入捕获功能捕获波形。
1.通用定时器产生?PWM?配置
2.高级定时器?PWM?输入配置
3.编写中断服务程序,计算测量的频率和占空比,并仿真调试看是否一致。
编程的要点主要分成两部分,一个是通用定时器的?PWM?信号输出,另一个是?PWM?信号输入捕
获。
下面就贴出代码,全文跟着我操作,可以和我实现一样的效果
1.1 配置GPIO
由于我们用到的是PA6,那么就配置PA6复用推挽输出就行,因为他用的不是普通GPIO口的功能,而是TIM3_CH1所以要用到复用功能,同时开启复用的时钟。
1.2 初始化定时器
1.3 初始化输出比较
最后在最上面加上,使能一下TIM3的时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
这样就可以产生50%占空比的波形了,周期频率那些由Psc, arr来决定
那么现在我们用示波器量一下看看到底是不是50%的占空比
实际测量,的确是的。那么下面就开始写输入捕获的代码
1.1 配置GPIO
由于我们用到的是PA8,那么就配置PA8,但是这次要配置成浮空输入模式
1.2配置中断(因为我们要用到捕获和溢出处理中断)
中断通道别选错
1.3 初始化定时器
我们可以算出计数器的计数周期为?T=72M/72=1uS,1us*1000=1MS,这个是定时
器在不溢出的情况下的最大计数周期,也就是说周期小于?1ms?的?PWM?信号都可以被捕获到,转
换成频率就是能捕获到的最小的频率为?1KHZ。
1.4 初始化输入捕获功能
因为是?PWM?输入模式,只能使用通道?1?和通道?2?,假如我们使用的是通道?1,即?TI1,输入
的?PWM?信号会被分成两路,分别是?TI1FP1?和?TI1FP2,两路都可以是触发信号。如果选择
TI1FP1?为触发信号,那么?IC1?捕获到的是?PWM?信号的周期,IC2?捕获到的是占空比,这种
输入通道?TI?和捕获通道?IC?的映射关系叫直连,输入捕获结构体的?TIM_ICSelection?要配置为
TIM_ICSelection_DirectTI。如果选择?TI1FP2?为触发信号,则?IC2?捕获到的是周期,IC1?捕获到的是占空比,这种输入通道?TI?和捕获通道?IC?的映射关系叫非直连,输入捕获结构体的?TIM_ICSelection要配置为?TIM_ICSelection_IndirectTI。有关输入通道?TI?和捕获通道?IC?的具体映射关系见图输入通道?TI?和捕获通道?IC?的映射图?,有直连和非直连两种。
好,我们来分析上上面的一大堆术语。
中断复位函数中,我们获取输入捕获寄存器?CCR1?和?CCR2?寄存器中的值,当?CCR1?的值不为?0
时,说明有效捕获到了一个周期,然后计算出频率和占空比。在计算的时候?CCR1?和?CCR2?的值
都必须要加?1,因为计数器是从?0?开始计数的。
现在我们全速跑代码看看是否一致,还是很准的
全文就是这样,非常的简单易懂