新闻  |   论坛  |   博客  |   在线研讨会
STM8L101F3P6 TIM4 实现呼吸灯效果(1)
电子禅石 | 2017-06-23 14:54:25    阅读:9413   发布文章

要实现呼吸灯效果,主要就是确定 频率,两个方面的频率:①以多快的频率开关LED,②以多块的频率 修改脉冲宽度。我们的例子的频率是:产生100us 中断 来开关LED, 每10ms 修改一次  脉冲宽度,100个等级,1s的频率呼吸。

有两种实现方式:直接PWM 输出   另一种 是用定时器 模拟PWM  优点是任意引脚都可以实现。这里先用后一种方式实现。

主要代码:

#define LED_GPIO_PORT  GPIOD
#define LED_GPIO_PINS  GPIO_Pin_0 
#define led_on    GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PINS)
#define led_off   GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PINS)

 

void led_pwm_init(void)
{
    GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_Low_Slow);//初始化LED,GPD0低速推挽输出
    
    CLK_PeripheralClockConfig (CLK_Peripheral_TIM4,ENABLE); //使能外设时钟,STM8L外设时钟默认关闭,使用前需使能
    
   
     TIM4_TimeBaseInit(TIM4_Prescaler_2, 0x64);//16M/8/2=1M,0xff=255,100*(1/1M)=100uS,大约61次中断是1S
   // Clear TIM4 update flag 
    TIM4_ClearFlag(TIM4_FLAG_Update);//向上清除溢出标志
	
    //Enable update interrupt 
    TIM4_ITConfig(TIM4_IT_Update, ENABLE);//向上溢出中断使能,中断向量号25
   TIM4_Cmd(ENABLE);//TIM4使能
   enableInterrupts();//开启中断总开关     
}

 

/**
  * @brief  Timer4 Update/Overflow Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 25)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
   /*  i++;
 if(i==61)
    {
	GPIO_ToggleBits(GPIOD, GPIO_Pin_0);//翻转GPD0输出状态
	i=0;
    }*/
  
  if((++timenum)>=100)//每10mS调整一下led的占空比  100us中断;
 {
    time_second_count++;
    timenum=0;
  if(leddirection==0)  //如果是渐亮方向变化,则占空比递增
  {
    ledpwm++;
   if (ledpwm > pwm_max)
  {
  ledpwm = pwm_max;
   // leddirection =1;
  }
  }

 if(leddirection==1) //如果是渐暗方向变化,则占空比递减
 {
 ledpwm--;
   if(ledpwm<=pwm_min)
  {
   ledpwm=pwm_min;
 //leddirection=0;
  }
 }

  ledpwm_temp=ledpwm;//获取LED的占空比
}
 
  if(ledpwm_temp>0)//占空比大于0,则点亮led,否则熄灭led 
 {
 //led_on;
  led_off;
   ledpwm_temp--; //? 就是来控制亮的时间 
 }
 else
 { 
   led_on;
 //led_off;
 }
    TIM4_ClearITPendingBit(TIM4_IT_Update);
}

 


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客