OpenEdv-开源电子网

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

为什么我的TIM3定时器可以输出PWM,TIM2不能,求大神指教

[复制链接]

13

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2013-11-8
在线时间
5 小时
发表于 2015-5-29 19:40:49 | 显示全部楼层 |阅读模式
5金钱

具体的配置如下,求大神指教

#include "pwm.h"
#include "usart.h"

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 NVIC_InitTypeDef NVIC_InitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

 TIM_TimeBaseStructure.TIM_Period = arr; 
 TIM_TimeBaseStructure.TIM_Prescaler =psc; 
 TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
 
 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );

 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
 NVIC_Init(&NVIC_InitStructure); 

 TIM_Cmd(TIM3, ENABLE);      
}

 

void TIM2_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 NVIC_InitTypeDef NVIC_InitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

 TIM_TimeBaseStructure.TIM_Period = arr; 
 TIM_TimeBaseStructure.TIM_Prescaler =psc; 
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
 
 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );

 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
 NVIC_Init(&NVIC_InitStructure); 

 TIM_Cmd(TIM2, ENABLE);         
}

 


void TIM3_IRQHandler(void)  
{
 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) 
  {
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  
  }
}


void TIM2_IRQHandler(void)  
{
 if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) 
  {
  TIM_ClearITPendingBit(TIM2, TIM_IT_Update  ); 
  }
}

 



void TIM3_PWM_Init(u16 arr,u16 psc)

 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_OCInitTypeDef  TIM_OCInitStructure;
 

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_AFIO, ENABLE); 

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH7
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //???????ì????
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);//??????GPIO
 
 
 TIM_TimeBaseStructure.TIM_Period = arr;
 TIM_TimeBaseStructure.TIM_Prescaler =psc; 
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
 
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
 TIM_OC2Init(TIM3, &TIM_OCInitStructure); 

 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 
 
 TIM_Cmd(TIM3, ENABLE);  //????TIM3
}


void TIM2_PWM_Init(u16 arr,u16 psc)

 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_OCInitTypeDef  TIM_OCInitStructure;
 

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_AFIO, ENABLE); 
 

 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //TIM_CH2
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 
 TIM_TimeBaseStructure.TIM_Period = arr; 
 TIM_TimeBaseStructure.TIM_Prescaler =psc; 
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
 
 
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
 TIM_OC2Init(TIM2, &TIM_OCInitStructure); 

 TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);  
 
 TIM_Cmd(TIM2, ENABLE); 
}

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

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5788
金钱
5788
注册时间
2013-11-22
在线时间
1213 小时
发表于 2015-5-30 22:06:17 | 显示全部楼层
关闭TIM3,单独开TIM2的PWM行不
回复

使用道具 举报

13

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2013-11-8
在线时间
5 小时
 楼主| 发表于 2015-6-5 16:49:39 | 显示全部楼层
还是不可以,现在我改成了用TIM3的两个通道输出PWM
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-28 23:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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