赞
踩
步骤:
void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStrue; TIM_OCInitTypeDef TIM_OCInitStrue; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3和相关GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 使能GPIOB时钟(LED在PB5引脚),使能AFIO时钟(定时器3通道2需要重映射到BP5引脚) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5; // TIM_CH2 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; // 复用推挽 GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz; //设置最大输出速度 GPIO_Init(GPIOB,&GPIO_InitStrue); //GPIO端口初始化设置 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); TIM_TimeBaseInitStrue.TIM_Period=arr; //设置自动重装载值 TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //预分频系数 TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //计数器向上溢出 TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; //时钟的分频因子,起到了一点点的延时作用,一般设为TIM_CKD_DIV1 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); //TIM3初始化设置(设置PWM的周期) TIM_OCInitStrue.TIM_OCMode=TIM_OCMode_PWM2; // PWM模式2:CNT>CCR时输出有效 TIM_OCInitStrue.TIM_OCPolarity=TIM_OCPolarity_High;// 设置极性-有效为高电平 TIM_OCInitStrue.TIM_OutputState=TIM_OutputState_Enable;// 输出使能 TIM_OC2Init(TIM3,&TIM_OCInitStrue); //TIM3的通道2PWM 模式设置 TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能预装载寄存器 TIM_Cmd(TIM3,ENABLE); //使能TIM3 }
main功能实现
int main(void) { u16 led0pwmval=0; u8 dir=1; delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口 TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz while(1) { delay_ms(10); if(dir) led0pwmval++; else led0pwmval--; if(led0pwmval>300) dir=0; if(led0pwmval==0) dir=1; TIM_SetCompare1(TIM1,led0pwmval); } } //控制 LED0_PWM_VAL 的值从 0 变到 300,然后又从 300 变到 0,如此循环,因此 DS0 的亮度也会跟着从暗变到亮,然后又从亮变到暗。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。