OpenEdv-开源电子网

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

请教PWM输出时定时器开启问题。

[复制链接]

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2012-3-13 10:37:54 | 显示全部楼层 |阅读模式

大家好!对于原子的PWM输出例程中,如果把使能定时器“TIM3->CR1|=0x01; //使能定时器3 “这句话去掉后,首先配置好定时器,然后再使能定时器,结果正常;但是这时再重新配置定时器,定时器就没有输出了,必须重新使能定时器才可以,但是上次也没有关闭定时器,查看参考手册也没有搞明白,恳请大家赐教,谢谢!

//”PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void PWM_Init(u16 arr,u16 psc)
{        
 //此部分需手动修改IO口设置
 RCC->APB1ENR|=1<<1;       //TIM3时钟使能   

 GPIOA->CRH&=0XFFFFFFF0;//PA8输出
 GPIOA->CRH|=0X00000004;//浮空输入
    
 GPIOA->CRL&=0X0FFFFFFF;//PA7输出
 GPIOA->CRL|=0XB0000000;//复用功能输出   
 GPIOA->ODR|=1<<7;//PA7上拉 

 TIM3->ARR=arr;//设定计数器自动重装值
 TIM3->SC=psc;//预分频器不分频
 
 TIM3->CCMR1|=7<<12;  //CH2 PWM2模式  
 TIM3->CCMR1|=1<<11; //CH2预装载使能   

 TIM3->CCER|=1<<4;   //OC2 输出使能   

 TIM3->CR1=0x8000;   //ARPE使能         

void TIM3_ON(void)

{

TIM3->CR1|=0x01; //使能定时器3

}

永远保持一颗学习的心态。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-3-13 11:22:20 | 显示全部楼层
回复【楼主位】科科1987:
---------------------------------
你怎么重新配置的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2012-3-13 13:27:24 | 显示全部楼层
回复【2楼】正点原子:
回复【楼主位】科科1987:
---------------------------------
你怎么重新配置的?
---------------------------------
比如:
PWM_Init(1000,99);
TIM3_ON();//结果正常
delay_ms(1000);
PWM_Init(500,99);//在这之后必须重新使能定时器 TIM3_ON();才可以输出pwm
 
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2012-3-13 14:04:41 | 显示全部楼层

//”PWM输出初始化
 //arr:自动重装值
 //psc:时钟预分频数
 void WM_Init(u16 arr,u16 psc)
 {         
 //此部分需手动修改IO口设置
  RCC->APB1ENR|=1<<1;       //TIM3时钟使能    

 GPIOA->CRH&=0XFFFFFFF0;//PA8输出
  GPIOA->CRH|=0X00000004;//浮空输入
     
  GPIOA->CRL&=0X0FFFFFFF;//PA7输出
  GPIOA->CRL|=0XB0000000;//复用功能输出    
 GPIOA->ODR|=1<<7;//PA7上拉 
 
 TIM3->ARR=arr;//设定计数器自动重装值 
 TIM3->SC=psc;//预分频器不分频
  
  TIM3->CCMR1|=7<<12;  //CH2 WM2模式   
 TIM3->CCMR1|=1<<11; //CH2预装载使能    

 TIM3->CR1=0x8000;   //ARPE使能  
 TIM3->CR1|=0x01; //使能定时器3        
}  

void TIM3_ON(void)
{
 TIM3->CCER|=1<<4;   //OC2 输出使能 
}


改成这样就可以了,但是还是不明白为什么 上面的那种方法不行。

永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-3-13 14:10:05 | 显示全部楼层
TIM3->CR1=0x8000;   //ARPE使能  
这句话,默认就把CR1的最低位给关了。怎么能正常呢?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2012-3-13 14:20:50 | 显示全部楼层
回复【5楼】正点原子:
TIM3->CR1=0x8000;   //ARPE使能  
这句话,默认就把CR1的最低位给关了。怎么能正常呢?
---------------------------------
哦  恍然大悟! 谢谢!
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2012-3-13 14:41:24 | 显示全部楼层
 我觉得这里: 
  TIM3->CR1=0x8000;   //ARPE使能  
  TIM3->CR1|=0x01; //使能定时器3 
改为:
 TIM3->CR1|=0x80;   //ARPE使能  
 TIM3->CR1|=0x01; //使能定时器3       
比较好一些。 
 
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-3-14 20:56:06 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
不过貌似好多时候大家都是直接粘贴的程序,哎……
努力,前进。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 04:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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