OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15837|回复: 15

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

[复制链接]

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2015-4-5 18:25: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;
                }
    }



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-4-5 22:55:03 | 显示全部楼层
这个不错,cool
搞步进电机用这个爽。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
 楼主| 发表于 2015-4-6 14:26:34 | 显示全部楼层
今天发现个新现象,

如果在延时之后,重新启动 TIM1 之前,插入对 CNT 计数器的清零程序,TIM1 -> CNT = 0,就会多产生一个脉冲,从 5 个变成 6 个。

好奇怪啊。
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2015-4-6 15:42:58 | 显示全部楼层
又学了一招!
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-4-6 18:52:24 | 显示全部楼层
回复【3楼】xuande:
---------------------------------
下次我研究下,哈哈
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

342

帖子

0

精华

高级会员

Rank: 4

积分
544
金钱
544
注册时间
2014-4-24
在线时间
20 小时
发表于 2015-5-22 18:55:21 | 显示全部楼层
mark~~~搞步进电机估计很有用哦~
回复 支持 反对

使用道具 举报

0

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2014-1-11
在线时间
23 小时
发表于 2015-12-12 12:06:55 | 显示全部楼层
正打算需要这篇文章。
回复 支持 反对

使用道具 举报

8

主题

47

帖子

0

精华

高级会员

Rank: 4

积分
649
金钱
649
注册时间
2015-11-7
在线时间
192 小时
发表于 2016-3-1 12:18:10 | 显示全部楼层
keil仿真器可以仿真出来吗
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-1 12:45:45 | 显示全部楼层
TIM1 -> SR &= ~0x0001;                   //实验发现,必须软件清除标志;而手册说“rc”,只要读就自动清除,很奇怪。
TIM->SR[UIF]的属性是rc_w0,其含义是:

0.png

翻译:软件可以读取,也可以通过写入0来清除它。

再附上UIF的详细描述:

1.png

也没提到别的清零方法。

所以并非你想的那样,一旦读取就被清零。

(或许是你的手册误导了你。。)

坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-1 12:54:33 | 显示全部楼层
xuande 发表于 2015-4-6 14:26
今天发现个新现象,

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

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

a.png


b.png
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-2 11:47:44 | 显示全部楼层
今天突然想起来,你这种情况最适合One pulse mode,这种模式可以使问题极大地简化
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-15
在线时间
1 小时
发表于 2016-3-2 15:21:59 | 显示全部楼层
这个不错,强
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-15
在线时间
1 小时
发表于 2016-3-4 11:26:01 | 显示全部楼层
问下楼主,这个RCR,一共支持几路PWM输出?是否可以单独设置它的输出频率?
回复 支持 反对

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
 楼主| 发表于 2016-3-4 11:39:10 | 显示全部楼层
qzy 发表于 2016-3-4 11:26
问下楼主,这个RCR,一共支持几路PWM输出?是否可以单独设置它的输出频率?


1、RCR应当是控制计数器cnt的动作,而每一路都是根据cnt而动作,
     所以,各路是同步动作的,RCR对每路都有效。

2、各路都以同一个cnt为基础,单独改频率有点够呛。


回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-15
在线时间
1 小时
发表于 2016-3-4 12:08:06 | 显示全部楼层
嗯,了解了,如果是这样,三轴的控制还不能用这个方法来做,不然画曲线就不行了
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2014-12-3
在线时间
14 小时
发表于 2016-4-4 12:31:23 | 显示全部楼层
Mark 一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 18:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表