今天用了三个小时,终于验证:
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;
}
} |