PWM驱动LED呼吸灯)
文章目录1.PWM基本结构2.函数代码1.PWM基本结构蓝线CNT黄线ARR红线CCR1.RCC开启 时钟2.选择内部时钟源TIM_InternalClockConfig()3.配置时基单元——预分频器、自动重装器、计数模式等TIM_TimeBaseInit()4.配置输出比较单元TIM_OC1Init()TIM_OC2Init()TIM_OC3Init()TIM_OC4Init()5.配置GPIO6.运行控制配置完需要使能计数器TIM_Cmd()2.函数TIM_OC1Init()TIM_OC2Init()TIM_OC3Init()TIM_OC4Init()输出比较函数一个函数配置一个单元TIM_OCStructInit()给输出比较函数赋默认值TIM_ForcedOC1Config()1-44个函数用来配置强制输出模式的高or低电平TIM_CCxCmd()TIM_CCxNCmd()单独已修改输出使能参数TIM_SelectOCxM()选择输出比较模式TIM_SetCompare1()1-4。单独用来更改CCR寄存器值的函数重点输出比较模式CCR只写所以用TIM_SetCompare代码里面三个数字部分就是根据上面的公式求代码根据上一章的代码进行一部分修改#includestm32f10x.h// Device headervoidPWM_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//TIM2在APB1总线上RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_ModeGPIO_Mode_AF_PP;//复用推挽输出把控制权交给片上外设PWM波形才能通过引脚输出GPIO_InitStructure.GPIO_PinGPIO_Pin_0;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivisionTIM_CKD_DIV1;//分频模式TIM_TimeBaseInitStructure.TIM_CounterModeTIM_CounterMode_Up;//计数模式TIM_TimeBaseInitStructure.TIM_Period100-1;//周期ARR自动重装器的值.定时频率72M/(PSC1)/(ARR1)TIM_TimeBaseInitStructure.TIM_Prescaler720-1;//预分频器(PSC)的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter0;//重复计算器的值这是高级才用直接给0TIM_TimeBaseInit(TIM2,TIM_TimeBaseInitStructure);TIM_OCInitTypeDef TIM_OC1InitStructure;TIM_OCStructInit(TIM_OC1InitStructure);//先赋初始值再修改想修改的参数TIM_OC1InitStructure.TIM_OCModeTIM_OCMode_PWM1;//设置输出比较模式TIM_OC1InitStructure.TIM_OCPolarityTIM_OCPolarity_High;//设置输出比较极性TIM_OC1InitStructure.TIM_OutputStateTIM_OutputState_Enable;//设置输出使能TIM_OC1InitStructure.TIM_Pulse50;//设置CCRTIM_OC1Init(TIM2,TIM_OC1InitStructure);TIM_Cmd(TIM2,ENABLE);}voidPWM_SetCompare1(uint16_tCompare){TIM_SetCompare1(TIM2,Compare);}主函数部分uint8_ti;intmain(void){OLED_Init();PWM_Init();while(1){for(i0;i100;i){PWM_SetCompare1(i);Delay_ms(10);}for(i0;i100;i){PWM_SetCompare1(100-i);Delay_ms(10);}}}