OpenEdv-开源电子网

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

配置TIM4输出两路 PWM,倒腾一天出不来。

[复制链接]

19

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2011-11-6
在线时间
1 小时
发表于 2012-5-13 15:58:21 | 显示全部楼层 |阅读模式

RCC->APB1ENR|=1<<2;

GPIOB->CRL&=0X00FFFFFF;    // PB6,7复用输出
GPIOB->CRL|=0XBB000000;
GPIOB->ODR|=3<<6;    // PB6,7上拉
TIM4->ARR=arr;
TIM4->SC=psc;
TIM4->CCMR1|=6<<12;    // 模式2
TIM4->CCMR1|=1<<11;
TIM4->CCMR1|=6<<4;
TIM4->CCMR1|=1<<3;
TIM4->CCER|=1<<4;
TIM4->CCER|=1<<0;
TIM4->CR1|=0X0080;
TIM4->CR1|=0X01;    // 使能TIM4


这是PWM_Init的配置,头文件也改了。就是不出来PWM,郁闷啊。

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

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2012-5-1
在线时间
0 小时
发表于 2012-5-13 17:54:45 | 显示全部楼层
回复【楼主位】rfw8797:
---------------------------------
这个是我用timer3写的可以输出4路PWM你可以看看

void WM_Init(u16 arr,u16 psc)
{    
//此部分需手动修改IO口设置
RCC->APB2ENR|=1<<2;        //PA口时钟使能
RCC->APB2ENR|=1<<3;        //PB口时钟使能
RCC->APB1ENR|=1<<1;       //TIM3时钟使能    
 
GPIOA->CRL&=0X00FFFFFF;//PA7,PA6输出
GPIOA->CRL|=0Xbb000000;//复用功能输出    
GPIOA->ODR|=1<<6;//PA6上拉
GPIOA->ODR|=1<<7;//PA7上拉

GPIOB->CRL&=0XFFFFFF00;//PB0,PB1输出
GPIOB->CRL|=0X000000BB;//复用功能输出    
GPIOB->ODR|=1<<0;//PB0上拉
GPIOB->ODR|=1<<1;//PB1上拉

TIM3->ARR=arr;//设定计数器自动重装值 
TIM3->SC=psc;//预分频器不分频

TIM3->CCMR1|=6<<4;  //CH1 WM模式  
TIM3->CCMR1|=1<<3; //CH1预装载使能

TIM3->CCMR1|=7<<12;  //CH2 WM模式  
TIM3->CCMR1|=1<<11; //CH2预装载使能

TIM3->CCMR2|=6<<4;  //CH3 WM2模式  
TIM3->CCMR2|=1<<3; //CH3预装载使能

TIM3->CCMR2|=7<<12;  //CH4 WM2模式  
TIM3->CCMR2|=1<<11; //CH4预装载使能    

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

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

TIM3->CCR1 = 200;
TIM3->CCR2 = 500;
TIM3->CCR3 = 700;
TIM3->CCR4 = 900;   
}    

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-13 20:41:38 | 显示全部楼层
回复【楼主位】rfw8797:
---------------------------------
TIM4的时钟都没开启. 怎么输出波形?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2012-11-7
在线时间
3 小时
发表于 2012-11-7 12:35:20 | 显示全部楼层
你这回复的一点价值都没有 你告诉人家怎么开启TIM4时钟啊 而且他上面那个不是开启了吗?
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2012-11-7 15:17:22 | 显示全部楼层

我这个程序应该是没有问题的,因为已经在用,不过中断你可以去掉就得了。                                            

/*PWM输出初始化*/
void Timer4_Init(u16 arr,u16 psc)
{    
//此部分需手动修改 IO口设置  
RCC->APB2ENR|=1<<0;    //复用  
RCC->APB1ENR|=1<<2;    //TIM4 时钟使能  
RCC->APB2ENR|=1<<3;    //使能PORTB时钟 
  
GPIOB->CRL&=0XF0FFFFFF;//PB6 输出  
GPIOB->CRL|=0X0B000000;//复用功能输出       
GPIOB->ODR|=1<<6;//PB6 上拉   
  
GPIOB->CRL&=0X0FFFFFFF;//PB7 输出  
GPIOB->CRL|=0XB0000000;//复用功能输出       
GPIOB->ODR|=1<<7;//PB7 上拉   

GPIOB->CRH&=0XFFFFFFF0;//PB8 输出  
GPIOB->CRH|=0X0000000B;//复用功能输出       
GPIOB->ODR|=1<<8;//PB8 上拉  

GPIOB->CRH&=0XFFFFFF0F;//PB9 输出  
GPIOB->CRH|=0X000000B0;//复用功能输出       
GPIOB->ODR|=1<<9;//PB9 上拉   
  
TIM4->ARR=arr;//设定计数器自动重装值   
TIM4->SC=psc;//预分频器不分频  

TIM4->CCMR1|=6<<4;  //CH1 WM1模式      
//TIM4->CCMR1|=1<<3; //CH1 预装载使能       
TIM4->CCER|=1<<0;  //OC1  输出使能     
TIM4->CR1=0x0080;  //ARPE使能   

TIM4->CCMR1|=6<<12;  //CH2 WM1模式      
//TIM4->CCMR1|=1<<11; //CH2 预装载使能       
TIM4->CCER|=1<<4;   //OC2  输出使能      
TIM4->CR1=0x0080;   //ARPE使能 

TIM4->CCMR2|=6<<4;  //CH3 WM1模式      
//TIM4->CCMR2|=1<<3; //CH3 预装载使能    
TIM4->CCER|=1<<8;  //OC3  输出使能      
TIM4->CR1=0x0080;   //ARPE使能 

TIM4->CCMR2|=6<<12;  //CH4 WM1模式      
//TIM4->CCMR2|=1<<11; //CH4 预装载使能       
TIM4->CCER|=1<<12;   //OC4  输出使能      
TIM4->CR1=0x0080;   //ARPE使能 

TIM4->DIER|=1<<0;   //允许更新中断
TIM4->DIER|=1<<6;   //允许触发中断
MY_NVIC_Init(9,0,TIM4_IRQChannel,4);//抢占1,子优先级1,组1
TIM4->CR1|=0x01;    //使能定时器4

TIM4->CCR1 = 3035;  //CH1占空比初值  
TIM4->CCR2 = 3035;  //CH2占空比初值
TIM4->CCR3 = 3035;  
//TIM4->CCR4 = 3035;  //CH6占空比初值 
               

?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
发表于 2012-12-28 14:53:01 | 显示全部楼层
回复【2楼】stc-mp3:
回复【楼主位】rfw8797: --------------------------------- 这个是我用timer3写的可以输出4路PWM你可以看看 void WM_Init(u16 arr,u16 psc) {     //此部分需手动修改IO口设置 RCC->APB2ENR|=1<<2;        //PA口时钟使能 RCC->APB2ENR|=1<<3;        //PB口时钟使能 RCC->APB1ENR|=1<<1;       //TIM3时钟使能       GPIOA->CRL&=0X00FFFFFF;//PA7,PA6输出 GPIOA->CRL|=0Xbb000000;//复用功能输出     GPIOA->ODR|=1<<6;//PA6上拉 GPIOA-&g
......
---------------------------------
你这主函数怎么写呢?
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2012-12-28
在线时间
5 小时
发表于 2012-12-28 20:46:31 | 显示全部楼层
回复【楼主位】rfw8797:
---------------------------------
void Bsp_TIM3_Config(void)
{
           
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);   //Open TIM3  Clock
/*******************************************************************************
TIM3 Config:generate 4 WM Signals
TIM3CLK(CK_PSC)=2*PCLK1=2*SYSCLK/4=SYSCLK/2=84MHZ

To get TIM3 counter clock at 21 MHz, the prescaler is computed as follows:
TIM3CLK(CK_CNT)=Fclk_psc/(psc[15:0]+1);
psc[15:0]=(Fclk_psc/Fclk_cnt)-1;
prescaler=psc[15:0]=(Fclk_psc/Fclk_cnt)-1=(84/21)-1=3;

To get TIM3 output clock at 30 KHz, the period (ARR)) is computed as follows:
Fout_clk=Fclk_cnt/(ARR+1);
ARR=(Fclk_cnt/Fout_clk)-1=(21000000/30000)-1=699;

TIM3 Channelx duty cycle=(TIM3_CCRx/ TIM3_ARR)*100;
TIM3 Channel1 duty cycle=(TIM3_CCR1/ TIM3_ARR)*100=350/699=50%
TIM3 Channel2 duty cycle=(TIM3_CCR2/ TIM3_ARR)*100=200/699=28.6%
TIM3 Channel3 duty cycle=(TIM3_CCR3/ TIM3_ARR)*100=100/699=14.3%
TIM3 Channel4 duty cycle=(TIM3_CCR4/ TIM3_ARR)*100=500/699=71.5%
********************************************************************************/
TIM_TimeBaseStructure.TIM_Prescaler=3;          //clk_cnt prescale
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;   //TIM3 Count mode
TIM_TimeBaseStructure.TIM_Period=699;         //Fout_clk=Fclk_cnt/(ARR+1)=21000000/700=30KHZ
TIM_TimeBaseStructure.TIM_ClockDivision=0;   

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

/* WM1 Mode configuration: TIM3_Ch1 */
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //select WM1 mode
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //config oc1 as output 
TIM_OCInitStructure.TIM_Pulse=350;                            //config TIM3_CCR1 vaule
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //config oc1 high level avaliable
TIM_OC1Init(TIM3, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);         // turn on oc1 preload 

/* WM1 Mode configuration: TIM3_Ch2 */
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //select WM1 mode
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //config oc2 as output 
TIM_OCInitStructure.TIM_Pulse=200;                            //config TIM3_CCR2 vaule
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //config oc2 high level avaliable
TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);         // turn on oc2 preload 

/* WM1 Mode configuration: TIM3_CH3 */
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //select WM1 mode
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //config oc3 as output 
TIM_OCInitStructure.TIM_Pulse=100;                            //config TIM3_CCR1 vaule
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //config oc3 high level avaliable
TIM_OC3Init(TIM3, &TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);         // turn on oc3 preload 

/* WM1 Mode configuration: TIM3_CH4 */
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               //select WM1 mode
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //config oc4 as output 
TIM_OCInitStructure.TIM_Pulse=500;                            //config TIM3_CCR1 vaule
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //config oc4 high level avaliable
TIM_OC4Init(TIM3, &TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);         // turn on oc4 preload 

TIM_ARRPreloadConfig(TIM3, ENABLE);

  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);
}
给你一个TIM3的已经调试出来
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2012-12-28
在线时间
5 小时
发表于 2012-12-28 20:48:44 | 显示全部楼层
            


回复 支持 反对

使用道具 举报

15

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2012-11-26
在线时间
1 小时
发表于 2013-1-8 14:21:24 | 显示全部楼层
楼上详细多了
回复 支持 反对

使用道具 举报

20

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2013-6-30
在线时间
0 小时
发表于 2013-7-31 21:52:34 | 显示全部楼层
回复【2楼】stc-mp3:
---------------------------------
太感谢这个回复了
逐渐成长需要过程!!!
回复 支持 反对

使用道具 举报

20

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2013-6-30
在线时间
0 小时
发表于 2013-7-31 22:03:45 | 显示全部楼层
回复【5楼】suqingxiao:
---------------------------------
太感谢了!!!
逐渐成长需要过程!!!
回复 支持 反对

使用道具 举报

20

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2013-6-30
在线时间
0 小时
发表于 2013-8-9 13:15:26 | 显示全部楼层
回复【2楼】stc-mp3:
---------------------------------
亲  这个稍微错了一点  就是TIM3->CCMR1|=7<<12;  //CH2 WM模式  不应该是7  而是6   下面那个错误同理 ~  同时很感谢你  我借鉴了你的程序~
逐渐成长需要过程!!!
回复 支持 反对

使用道具 举报

9

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2011-7-11
在线时间
49 小时
发表于 2016-1-1 00:52:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

6

主题

359

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1604
金钱
1604
注册时间
2017-12-18
在线时间
173 小时
发表于 2018-5-15 13:56:19 | 显示全部楼层
wfmartin28 发表于 2012-12-28 20:46
回复【楼主位】rfw8797:
---------------------------------
void&nbsp;Bsp_TIM3_Config(void)
{
&nbsp;&nb ...

有帮助,感谢
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2018-7-13
在线时间
17 小时
发表于 2018-9-20 17:36:38 | 显示全部楼层
问一下啊,TIM4->CCMR1|=6<<12; 中的6<<12是什么意思
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2018-7-13
在线时间
17 小时
发表于 2018-9-20 17:39:24 | 显示全部楼层
正点原子 发表于 2012-5-13 20:41
回复【楼主位】rfw8797:
---------------------------------
TIM4的时钟都没开启.&nbsp;怎么输出波形?

原子哥   我理解不了TIM4->CCMR1|=6<<12; 中的6<<12是什么意思
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 01:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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