泽州网站设计,网站建设的市场定位,做网络销售太坑人了,贵州app开发公司一、PWM 我们可以通过改变灯的有效电压占空比来实现呼吸灯效果。其中我们要用到PWM#xff08;脉宽调制#xff09;#xff0c;通过pwm我们可以来改变高电平的占空比 占空比#xff1a;在一个周期中#xff0c;高电平所占整个周期的百分比
具体如图#xff1a; 当我们用…一、PWM 我们可以通过改变灯的有效电压占空比来实现呼吸灯效果。其中我们要用到PWM脉宽调制通过pwm我们可以来改变高电平的占空比 ·占空比在一个周期中高电平所占整个周期的百分比
具体如图 当我们用pwm来生成呼吸灯时因为在stm32f103rct6中PA8LED灯是通过给PA8输入一个低电平点亮的所以低电平在一个周期中维持的时间越长灯越亮。
具体实现看代码
void Pwm_Init()
{GPIO_InitTypeDef GPIO_InitStruct;TIM_OCInitTypeDef TIM_OCInitStruct;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;/*1、使能时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA |RCC_APB2Periph_TIM1,ENABLE);/*2、配置GPIO*/GPIO_InitStruct.GPIO_Pin GPIO_Pin_8; //引脚8 LED1GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF_PP; //复用GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; //速度GPIO_Init(GPIOA,GPIO_InitStruct); //4、初始化定时器配置ARR,PSC。TIM_TimeBaseInitStruct.TIM_Prescaler psc; //分频系统 ,每秒数多少个数 TIM_TimeBaseInitStruct.TIM_Period per; //重装值TIM_TimeBaseInitStruct.TIM_CounterMode TIM_CounterMode_Up; //向上计数TIM_TimeBaseInitStruct.TIM_ClockDivision TIM_CKD_DIV1; //分频因子TIM_TimeBaseInitStruct.TIM_RepetitionCounter 0x00;TIM_TimeBaseInit(TIM1,TIM_TimeBaseInitStruct); /*配置pwm*/TIM_OCInitStruct.TIM_OCMode TIM_OCMode_PWM1; //PWM1模式TIM_OCInitStruct.TIM_OutputState TIM_OutputState_Enable;//输出使能TIM_OCInitStruct.TIM_OCPolarity TIM_OCPolarity_Low; //极性低TIM_OCInitStruct.TIM_Pulse 0x00;TIM_OC1Init(TIM1,TIM_OCInitStruct);//5、使能预装载寄存器 TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); //6、使能自动重装载的预装载寄存器允许位 TIM_ARRPreloadConfig(TIM1,ENABLE);/*pwm输出通道使能*/TIM_CtrlPWMOutputs(TIM1,ENABLE);//7、使能定时器。TIM_Cmd(TIM1,ENABLE);} 主函数 void HardWare_Init(void)
{SysTick_Init(72);Pwm_Init(100-1,7200-1);
}int main(void)
{u8 cnt 0;u8 fx 1;HardWare_Init();while(1){if(fx){cnt;if(cnt99){fx 0;}}else{cnt--;if(cnt 1){fx 1;}}TIM_SetCompare1(TIM1,cnt);delay_ms(20);}
}