OpenEdv-开源电子网

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

PWM中一个ARPE使能问题0x8000,0x0080

[复制链接]

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2011-5-25
在线时间
4 小时
发表于 2011-5-27 18:37:59 | 显示全部楼层 |阅读模式
TIM3->CR1=0x8000;   //ARPE使能 


这个应该是:0x0080???
我来了~~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-11-7 23:54:30 | 显示全部楼层
  
看下面两幅图:





图53和图54分别为ARPE为0和1时的计数器时序图.
由图可以看出:当arpe=0的时候,影子寄存器不起作用计数器的值直接与ARR(auto reload register)的值比较,当某个时刻你更新了ARR的值,那么这个值将会立即生效,体现在图53中就是本来应该计数到0XFF的,在某时刻更新为0X36的时候立即生效,这样导致此次计数并没有计数到0XFF,而是在计数途中就被更改为0X36了.
而当arpe=1的时候,ARR实际上由2个寄存器组成ARPR和ARSR(ARPR的影子寄存器),与CNT比较的是ARSR寄存器,ARPR只在软件更新ARSR的时候起作用,同图53的操作,更新ARR的值将会写入到ARPR中,此写入的值不会立即起作用,而要等到一个更新事件的到来,才把ARPR的值写入ARSR.在图54中的效果就是只有当CNT的值到达0XF5之后,ARSR的值才为0X36.从而精确控制波形.

事实上,如果我们只用来产生一般的PWM,比如用来控制LED亮度什么的,这两种方法基本就没有区别了.只有需要用到精确控制波形的时候,这两种写法才会体现出真正的区别.

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 2 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-27 22:27:11 | 显示全部楼层
回复【楼主位】yunzhitaolian:
---------------------------------
这里是0X0080.
我写错了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2011-5-25
在线时间
4 小时
 楼主| 发表于 2011-5-28 10:11:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
呵呵,主要是太辛苦了,写那么长的文档。加油哦,把它不断完善,成为学stm32的最好最完美的教材
我来了~~
回复 支持 反对

使用道具 举报

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2011-9-2
在线时间
4 小时
发表于 2011-9-2 15:38:34 | 显示全部楼层
。。奇怪啦。。为什么0x8000也可以的?我的程序仿真的时候0x80和0x8000竟然是同样的结果。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-9-2 15:49:37 | 显示全部楼层
回复【4楼】newmandirl:
---------------------------------
这个问题,论坛有答案,你搜索下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2011-11-7
在线时间
3 小时
发表于 2011-11-7 20:38:05 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
搜不到哎,链接有吗?我也想知道呢
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-16 21:38:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

12

主题

432

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2012-6-21
在线时间
59 小时
发表于 2013-7-17 13:49:00 | 显示全部楼层
mark。
回复 支持 反对

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-7-16
在线时间
0 小时
发表于 2013-7-31 21:06:36 | 显示全部楼层
留名
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-20 19:06:19 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
是不是如果ARR在PWM输出过程中不去人为的改变,那么ARPE为1或者为0都不会对PWM的输出占空比产生任何影响?也就是说,如果不人为的改变ARR的值,那么设置ARPE位是可有可无的操作?
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-20 19:23:05 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
还有一个问题。就是在TIM3_CCMR1中,OC1M位为111时:PWM模式2,向上计数时,只要TIMx_CNT<TIMx_CCR1通道都是有效的,之后也说了无效的情况,我想问的是,这个有效和无效是指什么?有效是指高电平,无效是指低电平?还是有效是指有效电平(有效电平未必是高电平),无效是指无效电平(无效电平未必是低电平)?>
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-20 19:32:43 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
我天,怎么看程序越看越有问题啊。。。。。

那什么,这里还有一个。

开发指南PWM输出部分在结尾部分由这么一段话:这里,我们从死循环函数可以看出,我们控制LED0_PWM_VAL的值从0变到300,然后又从300变到0,如此循环,因此DS0的亮度也会跟着从暗变到亮,然后又从亮变到暗,至于这里的值,我们为什么取300,是因为PWM的输出占空比达到这个值的时候,我们的LED亮度变化就不大了(虽然最大值可以设置到899),因此设计过大的值在这里是没必要的。至此,我们的软件设计就完成了。

我的问题是,这个最大值899是怎么得出来的,不应该是65535么?
(因为 led0pwmval是u16的,还因为#define LED0_PWM_VAL TIM3->CCR2 )
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-20 21:23:30 | 显示全部楼层
回复【13楼】Evil_Defender:
---------------------------------
因为初始化的时候,就设置了ARR的值是899,所以是899!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-21 09:57:47 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
开发板上的HSE是8MHz的吧?
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-21 10:37:51 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
CK_PSC与CK_INT的频率是相同的么? 他们俩什么关系啊。
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-21 11:18:28 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
CCR2其实是可以大于ARR值的,即大于899的,只不过,大于ARR值的结果是使LED常量,和正常点亮LED的结果一样的,失去了调节亮度的功能,是吧?
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-21 15:09:38 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
中文参考手册里面说OC1REF决定了OC1的值,OC1REF是高电平有效,而OC1的有效电平取决于CC1P位。

我的问题是:OC1REF怎么决定OC1的值呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-21 22:34:08 | 显示全部楼层
回复【18楼】Evil_Defender:
---------------------------------
内部电路设计的问题了。。。
你只需要记住,要是刨根问底,只能去看看芯片内部的原理图,看看是经过了什么电路,得到这个控制的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-7-20
在线时间
8 小时
发表于 2016-7-26 10:35:16 | 显示全部楼层
正点原子 发表于 2011-11-7 23:54
&nbsp;&nbsp; 看下面两幅图:

在参考手册上也看到了这两幅图,但没看懂,看了你的解释才明白ARPE的作用,受教了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 04:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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