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

[复制链接]
 楼主| 玄德 发表于 2015-4-5 18:31 | 显示全部楼层 |阅读模式
本帖最后由 玄德 于 2015-4-5 18:34 编辑

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

验证的方法很重要。

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

RCC -> APB2ENR |= ( 0x01 << 0 );             //Enable clock of TIM1.
TIM1 -> PSC = 0;
TIM1 -> ARR = 2 * 168;                              //周期为 2uS 。这里也有个奇怪的问题,还没搞清。
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;
                }
    }


IMG_20150405_175401.jpg

评分

参与人数 1威望 +15 收起 理由
mmuuss586 + 15 很给力!

查看全部评分

mmuuss586 发表于 2015-4-5 19:18 | 显示全部楼层

谢谢分享,这样做步进加减速控制还是不错的;
fanxsd 发表于 2015-4-5 20:07 | 显示全部楼层
学习啦!顶一个!
小浣熊 发表于 2015-4-6 21:18 | 显示全部楼层
学习下,多谢分享!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:有事请找 xuander

153

主题

5971

帖子

44

粉丝
快速回复 在线客服 返回列表 返回顶部