打印
[应用相关]

STM32 通用定时器示例详解—OnePulse

[复制链接]
1089|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前言
基于学习的目的,详细讲解关于标准外设库中的定时器的 17 个示例项目函数文件。 本次介绍 OnePulse。  

使用特权

评论回复
沙发
药无尘|  楼主 | 2021-11-8 16:28 | 只看该作者
一、 示例详解
基于硬件平台: STM32F100B-EVAL, MCU 的型号是 STM32F100VBT6。
软件则是其标准外设库。
单脉冲模式(OPM)允许计数器在受到一个激励时启动,在一个可编程的延时后产生一个宽度可编程的脉冲。  


使用特权

评论回复
板凳
药无尘|  楼主 | 2021-11-8 16:30 | 只看该作者
1、 One Pulse 的寄存器配置
软件配置,运行程序可以发现, 系统时钟设置为 24MHz,定时器使用到的是 TIM4;  


根据时钟树的图谱及其程序, 该示例选择的是内部时钟源作为定时器的时钟源; TIM4 的时钟源来自 APB1 的分频。
  


AHB 时钟 (HCLK)在 RCC_CFGR 寄存器中的分频系数 HPRE 的值为 0, 即 SYSCLK not divided, 即/1, 所以 HCLK 就是
24MHz;
APB1 的 prescaler 的系数是 PPRE1: 0x0, HCLK not divided,即/1, APB1CLK 为 24MHz; 由于 APB1 的 prescaler 系数部
分频, 即/1, 所以倍频器不起作用, 即为上图中的 TIMxCLK = 24Mhz。


使用特权

评论回复
地板
药无尘|  楼主 | 2021-11-8 16:32 | 只看该作者
二、示例演练




综合上述, 本案例中, Timer 的时钟源选择的是 Internal clock, CK_PSC 的时钟频率其实就是时钟树图中的输出 TIMxCLK,
然后 TIMxCLK 或 CK_PSC 经过预分频器,才是最终用于计数的时钟基本单位(clock input, 输入时钟)。
另外,

设置 PrescalerValue = 0 和 ClockDivision = 0, 不分频, 即 TIMxCLK = 24Mhz, 即 TIM1 counter clock at 24 MHz。

OPM = 1, 设置为单脉冲模式,在下一次更新事件发生时计数器将停止计数(清零 CEN 位) 。
对于 OPM 这一位, 默认值是 0, 即更新事件发生时计数器不被停止。 所以如果成 OPM=0, 则相应的波形如下图所示:

即受到外部触发信号的上升沿后, 产生的不是一个脉冲, 而是多个脉冲, 即 PWM 的波形。 从另一方面来说, 如果 OPM=0,
外部的触发信号也就在第一次上升沿的时候用于触发其他通道输出。 之后, 由于 OPM=0,即计数器不停止, 则会一直输出
PWM 波形。


使用特权

评论回复
5
药无尘|  楼主 | 2021-11-8 16:35 | 只看该作者
我们接下来看其他的寄存器配置:  


SMS = 0x06,从模式选择位,设置为触发模式,在触发 TRGI 出现上升沿时(但未被复位)计数器启动,只有计数器的启动
是受控的。
TS = 0x06,触发选择,设置的是被过滤的定时器输入 2( TI2FP2) 。

IC2S(CC2S) = 0x01,设置的是 CC2 通道被配置为输入, IC2 映射到 TI2 上;

CC2P = 0x00,设置的是 0,表示无反转, IC2 上出现上升沿时发生捕获。
所以结合下图,最终的结果是,选择的 TIM4_CH2 作为触发输入,其上升沿发生捕获, 用于启动 TIM4。 TIM4_CH2 的引脚对
应的是 PB7。
在程序中,配置的单脉冲模式, TIM4_CH1 用于输出,对于其的初始化如下图的代码,这儿并没有类似的
TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;的语句,相应的 TIM_OC1Init,这个函数名就是相应的初始化
channel_1,如果 TIM_OC2Init 则是初始化 channel_2。


下图的波形时运行源程序, OPM=1 的情况下的波形, 因为 OPM = 1, 在下一次更新事件发生时计数器将停止计数(清零 CEN
位) 。 所以只会看到一个脉冲

上面黄色的线表示 PB6,TIM4_CH1; 红色的是 PB7,TIM4_CH2;
测量后发现,黄色的脉宽宽度是 2.1ms,符合描述。


对于单脉冲, 也可以同时触发几路的输出:
原因如下图:

在一般的单脉冲模式中, 设置的是, TIMx_SMCR 寄存器中的 SMS 从模式选择位, 其中的触发模式, 是在触发 TRGI 出现上
升沿时( 但未被复位) 计数器启动, 只有计数器的启动是受控制的。 注意这里控制的是计数器的启动, 所以从一点上说明了
可以同时输出几路波形的可能性。
另一面, 从上图的框架中可以看出, 作为定时器通道本身的触发输入, 可能的只有两个: TI1FP1 和 TI2FP2, 即 TIMx_CH1
和 TIMx_CH2 作为触发输入源的选择。 就是输入。
对于输出, 按照上面的框图, 由于选择了 TI1FP1 或 TI2FP2, 接下来走的路径是: Reset,Enable,up\down,Count----
>CK_PSC, 开始捕捉 CNT, 从 CNT 框框中往下的箭头, 对于 TIMx_CH1, TIMx_CH2, TIMx_CH3, TIMx_CH4,是并行的, 也
就是可以同时输出几路的波形。
理论上是可以的, 那么实际呢, 只要在初始化一路通道, 波形测试如下, 也是可以的。

使用特权

评论回复
6
skyred| | 2021-11-11 14:54 | 只看该作者
有点意思~~
学习了

使用特权

评论回复
7
t1ngus4| | 2021-11-11 15:04 | 只看该作者
写的好详细,涨知识了

使用特权

评论回复
8
晓伍| | 2021-12-4 13:55 | 只看该作者
输出脉冲是吗

使用特权

评论回复
9
八层楼| | 2021-12-4 13:55 | 只看该作者
使用的是标准库吗

使用特权

评论回复
10
观海| | 2021-12-4 14:05 | 只看该作者
单脉冲模式非常有用处

使用特权

评论回复
11
guanjiaer| | 2021-12-4 14:08 | 只看该作者
讲解的非常详细啊

使用特权

评论回复
12
tpgf| | 2021-12-4 14:31 | 只看该作者
所有定时器都可以实现这个功能的吧

使用特权

评论回复
13
heimaojingzhang| | 2021-12-4 14:33 | 只看该作者
还有多脉冲模式吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

492

帖子

2

粉丝