今天验证了高级定时器的重复次数寄存器 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;
                }
    }



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。