赞
踩
使用STM32F103ZET6核心板,此核心板主控芯片为LQFP144封装。STM32F103ZET6有8个定时器,其中TIM1,
TIM8为高级定时器,TMI2,TIM3,TIM4,TIM5为通用定时器,TIM6,TIM7为基本定时器。因为通用定时器的重映射
功能只能在100脚或144脚芯片使用,所以使用此型号,后续举例也以通用定时器功能为主。
1.GPIO设置并初始化;
2.定时器设置并初始化;
3.输出比较结构体设置并初始化;
以PWM波为例实现两个功能:
1.四路频率,占空比可调的PWM波;
2.四路频率,相位差可调的PWM波;
PWM波频率 = 72M / (arr+1) / (pre+1) = 72M /(1000-1+1) /(72-1+1) = 1000Hz
(72M为系统默认频率)
均采用TIM2的部分重映射2,一个定时器开启四个通道
//四路频率,占空比可调的PWM波; #include "pwm.h" #include "stm32f10x.h" void TIM2_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定义时基结构体 TIM_OCInitTypeDef TIM_OCInitStructure; //定义输出比较结构体 /*********************************************CH1*******************************************/ //使能GPIOA外设,使能复用功能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO , ENABLE); //TIM2部分重映射2使能 GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE); //选择定时器2的CH1通道作为PWM波的输出引脚,TIM2-->PA0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽复用模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//带宽10MHz GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化结构体GPIOA //初始化定时器 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定时器2 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);//定时器2结构体初始化 //设置TMI2_CH1的PWM模式,使能TMI2的CH1输出 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择PWM模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //极性为高 TIM_OC1Init(TIM2, &TIM_OCInitStructure); //根据结构体初始化 TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR2上的预装值 /*********************************************CH2************************
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。