OpenEdv-开源电子网

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

求救版主,定时器问题!

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2011-8-8
在线时间
0 小时
发表于 2011-8-19 14:24:53 | 显示全部楼层 |阅读模式
版主,你好!
我想把开发板的定时器实验改成输出比较模式的!
但是我对自动重装载这个寄存器一直搞不明白,假如我用输出比较模式,不用到自动重装载寄存器可以吗?我用向上计数方式,他计数器的工作是不是从0到65535,然后又从0开始这样一直循环下去?
例如我把代码改成:
void Timerx_Init(u16 psc)
{
 RCC->APB1ENR|=1<<1;     //TIM3时钟使能
 TIM3->SC=psc;          //预分频器7200,得到10Khz的计数时钟

 TIM3->DIER|=1<<1;       //允许捕获/比较1中断  
 TIM3->DIER|=1<<6;       //允许触发中断
 TIM3->CR1|=0X01;        //使能定时器3
 MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
}
在主函数循环那里就这样:
 while(1)
 {
  TIM3->CCR1=TIM3->CNT+0X3E8;
 }
其他地方不改,但下载到板上面那LED灯一点反应也没有,我的意思是想TIM3->CCR1与TIMx_CNT比较后中断循环点亮DS1灯。
请问版主我错在哪里了?有没有输出比较的例程啊,发来看看?

还有这句:根据TIMx_CR1 寄存器中 APRE 位的设置:APRE=0 时,预装载寄存器的内容可以随时传送到影子寄存器,此时 2者是连通的;而 APRE=1 时,在每一次更新事件(UEV)时,才把预装在寄存器的内容传送到影子寄存器。是怎么理解的???
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-19 15:13:39 | 显示全部楼层

回复【楼主位】 huan_home :
---------------------------------
各种模式的应用,在:\Keil3.80\ARM\Examples\ST\STM32F10xFWLib\Examples\TIM 都有范例.
你的那个配置完全就是普通定时器配置,压根就没配置什么输出比较模式!!
关于这个,我建议你好好看看<<STM32参考手册>>的定时器部分,相信对你帮助比较大.
另外,你在while里面频繁的修改TIM3->CCR1,不明白你的目的.

最后,APRE这个,看看<<STM32参考手册>>上的描述及几个图就比较好理解了.
看下图:


从上图可以看出,当ARPE=0时,写入重装载寄存器的值,立马被更新了,计数器的值,时刻同重装载寄存器的值比较.
而ARPE=1的时候,计数器的值是和影子寄存器比较的,而影子寄存器的值,只在发生更新事件的时候与预装载寄存器的值进行同步,这样,虽然我们在预装载寄存器写入了0X36,但是,他必须等待CNT与影子寄存器的值相等之后,才会更新.
这个ARPE就是起这个作用的.



 

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

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2011-8-26
在线时间
0 小时
发表于 2011-9-2 13:41:44 | 显示全部楼层
哦 我之前这个地方也迷糊 现在懂了 谢谢原子
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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