您的位置:首页 > 其它

学习笔记————STM32通用定时器TIM实现PWM波配置步骤

2020-02-13 22:47 113 查看

STM32通用定时器TIM实现PWM波配置步骤

//1、开启定时器时钟和需要用到的IO口

void Clock_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,
ENABLE);//因为准备把PB5口作为输出端口,所以接下来AFIO使能,如果使用默认的PA7		 输
//出则不用使能AFIO,但需要使能GPIOA
}

//2、IO口并重映射TIM3
void GPIO_Out_Init(void)
{
GPIO_InitTypeDef    GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//因为启用了AFIO,所以需要配置为复
//用推挽输出;若不进行重映射,使用推挽输出即可,GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//TIM3开启部分重映射

}
//3、初始化定时器
void TIM_PWM_Init(u16 arr,u16 psc);
{
TIM_TimeBaseInit   TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period=arr;
TIM_TimeBaseStructure.TIM_Prescale=psc;
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_Cmd(TIM3,ENABLE);
}
//4、初始化输出通道设置
void OC2_PWM_Init(void);
{
TIM_OCInitTypeDef   TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState=TIM_OutoutState_Enable;
TIM_OCInitStructure.TIM_OCpolarity=TIM_OCpolarity_High;
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
TIM_OC2preloadConfig(TIM3,TIM_OCPreload);
}
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
delay_init();
Clock_Init();
GPIO_Out_Init();
TIM_PWM_Init(899,0);
OC2_PWM_Init();
while(1)
{

delay_ms(10);
if(dir)
led0pwmval++;
else
led0pwmval--;
if(ledopwmval>100)
dir=0;
if(led0pwmval==0)
dir=1;
TIM_SetCompare2(TIM3,ledopwmval);
//因为每个定时器都有四个输出输出通道,上面第四步使用通道二作为输出,因此这里比较输出
//时也使用通道二
}
}

PS:请各位指教,因为是初学有许多不太懂,如果哪里有错误请大家帮忙指出。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
梧寒 发布了1 篇原创文章 · 获赞 0 · 访问量 24 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: