今天验证了高级定时器的重复次数寄存器 RCR,有图有真相。

2019-07-20 23:03发布


今天用了三个小时,终于验证:
1、高级定时器的 RCR 寄存器可以产生指定数量的脉冲。
2、中断更新标志 UIF 只有在所有脉冲之后才会产生。这一点很重要。

验证的方法很重要。

全部相关程序如下,只省略了 GPIO 配置。注释不能对齐,没办法了。

RCC -> APB2ENR |= ( 0x01 << 0 );             //Enable clock of TIM1.
TIM1 -> PSC = 0;
TIM1 -> ARR = 2 * 168;                              //周期为 2uS 。这里也有个奇怪的问题,APB2的时钟频率,还没搞清。
TIM1 -> RCR = 4;                                        // 每次产生 4+1 = 5 个脉冲。

//PB1, CH3N configuration.
TIM1 -> CCMR2 = 0x60 << 0;                 //OCM = b110 ( PWM mode 1 ).
TIM1 -> CCER |= 0x4 << 8;                    //Enable output of CH3N.
TIM1 -> BDTR |= 1 << 15;                      //!!!
TIM1 -> CCR3 = 8;                               //CCR3 = 8, for 100nS pulse width. 

(省略PB1管脚配置程序)

TIM1 -> CR1 |= 0x0001;                        //Startup TIM1.

while (1)
        {
        if ( TIM1 -> SR & 0x1 )
                {                                                   //只有产生更新中断,才进行延时。

                 TIM1 -> CR1 &= ~0x0001;
                 TIM1 -> SR &= ~0x0001;                   //实验发现,必须软件清除标志;而手册说“rc”,只要读就自动清除,很奇怪。

                 for ( i=0; i<0x200; i++ );                     // 5个脉冲之后,延时一段时间,以便区别。

                 TIM1 -> CR1 |= 0x0001;
                }
    }



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
星迹
1楼-- · 2019-07-21 18:03
 精彩回答 2  元偷偷看……
xkwy
2楼-- · 2019-07-21 21:27
 精彩回答 2  元偷偷看……
xkwy
3楼-- · 2019-07-21 23:30
xuande 发表于 2015-4-6 14:26
今天发现个新现象,

如果在延时之后,重新启动&nbsp;TIM1&nbsp;之前,插入对&nbsp;CNT&nbsp;计数器的清零 ...

可能是REP_CNT计数器的问题,如果你想重新开始一轮波形,请通过对TIM->EGR[UG]置位来复位CNT,而不是手动强暴地设置TIM->CNT。

a.png


b.png
xkwy
4楼-- · 2019-07-22 01:06
今天突然想起来,你这种情况最适合One pulse mode,这种模式可以使问题极大地简化
qzy
5楼-- · 2019-07-22 01:39
这个不错,强
qzy
6楼-- · 2019-07-22 04:05
 精彩回答 2  元偷偷看……

一周热门 更多>