打印
[STM32F4]

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

[复制链接]
1457|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
玄德|  楼主 | 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;
                }
    }




评分
参与人数 1威望 +15 收起 理由
mmuuss586 + 15 很给力!
沙发
mmuuss586| | 2015-4-5 19:18 | 只看该作者

谢谢分享,这样做步进加减速控制还是不错的;

使用特权

评论回复
板凳
fanxsd| | 2015-4-5 20:07 | 只看该作者
学习啦!顶一个!

使用特权

评论回复
地板
小浣熊| | 2015-4-6 21:18 | 只看该作者
学习下,多谢分享!!

使用特权

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

本版积分规则

个人签名:有事请找 xuander

152

主题

5899

帖子

44

粉丝