版权声明:喝水不忘挖井人,转载请注明出处,[email protected]。 https://blog.csdn.net/qq_18842031/article/details/78568508
本篇博文最后修改时间:2018年05月24日 13:43。
一、简介
本文以STM32F103编程为例,介绍STM32F103Timer2 PWM输出。
二、实验平台
电脑平台:Windows7 64位旗舰
编译软件:IAR
硬件平台:STM32F103CB
三、版权声明
博主:_懵懂
声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。
原文地址:http://blog.csdn.NET/qq_18842031
懵懂之MCU交流群:136384801
四、实验前提
1、在进行本文步骤前,请先安装IAR Embedded Workbench 5.4版本;准备好STM32F103CB硬件平台。
五、基础知识
暂无
六、源码地址
暂无
七、关联文章
暂无
八、实验内容
1.初始化Timer2
void Hal_Init_Pwm(uint16 period,uint16 Prescaler)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /*开定时器2时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /*GPIO时钟开启*/
/*引脚配置*/
GPIO_InitTypeDef GPIO_InitStructure; /*配置GPIO*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*复用输出*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*配置TIMER2*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /*配置TIMER2*/
TIM_DeInit(TIM2); /*初始化定时器2*/
TIM_TimeBaseStructure.TIM_Period = period; /*重装值 计数到最大为3600-1 然后从0开始*/
TIM_TimeBaseStructure.TIM_Prescaler = Prescaler; /*分频系数*/
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; /*时钟分割*/
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*向上计数*/
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*配置TIMER2PWM输出*/
TIM_OCInitTypeDef TIM_OCInitStructure; /*配置TIMER2PWM输出*/
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /*PWM2模式输出*/
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /*比较输出使能*/
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /*输出极性高 输出高电平*/
/*通道1*/
// TIM_OCInitStructure.TIM_Pulse =40*36;
// TIM_OC1Init(TIM2, &TIM_OCInitStructure);
// TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*通道2*/
TIM_OCInitStructure.TIM_Pulse =0; /*设置占空比*/
TIM_OC2Init(TIM2, &TIM_OCInitStructure); /*初始化外设TIMx 通道*/
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);/*CH1预装载使能*/
/*通道3*/
// TIM_OCInitStructure.TIM_Pulse =90*36;
// TIM_OC3Init(TIM2, &TIM_OCInitStructure);
// TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*通道4*/
// TIM_OCInitStructure.TIM_Pulse =0*36;
// TIM_OC4Init(TIM2, &TIM_OCInitStructure);
// TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE); /*使能TIMx在ARR上的预装载寄存器*/
TIM_Cmd(TIM2, ENABLE); /*使能定时器2*/
}
2.编写主函数
void main(void)
{
Init_Clock(); /*初始化时钟*/
Hal_Init_Pwm(64000-1,0); /* F = PLL / (64000-1) */
TIM_SetCompare2(TIM2,50*640); /*输出占空比为50%*/
while(1);
}