发 帖  
原厂入驻New
[问答] 求帮忙看看这个stm8呼吸灯代码有什么错误
854 STM8 单片机 STM8S STM32
分享
主函数
void main(void)
{
  LED_Init(LED3);
  clock_Hse(CPUDIV1);//设置系统时钟为 HSE 的一分频,即 16M
  tiMER2_PWMInit(1000,0);//初始化 TIM2 参数
  uint16_t i=0, PWM=0;
  while (1)
  {  
    IF(i == 0)
    {
      PWM+=10;
      if(PWM == 1000)
      {
        i=1;
      }
    }
    else
    {
      PWM-=10;
      if(PWM == 0)
      {
        i=0;
      }
    }
    TIM2_SetCompare3(PWM);
  }
}

pwm.c
void TIMER2_PWMInit(unsigned short timebase,unsigned short t)
{
    TIM2_DeInit();  
    /*
     * TIM2 Frequency = TIM2 counter clock/(ARR + 1)
     * 这里设置TIM2的计数频率为 16M/8/(timebase+1)=1K
     */
    TIM2_TimeBaseInit(TIM2_PRESCALER_16, timebase);//分频和ARRL、ARRH初始化TIME2时基单元        
   
    /*
     * PWM1 Mode configuration: Channel1
     * TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%
     * TIM2 Channel2 duty cycle = [TIM2_CCR2/(TIM2_ARR + 1)] * 100 = 50%
     */
   
    /* 测试通道1 */
    TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, t, TIM2_OCPOLARITY_HIGH);//CCER的控制
    TIM2_OC3PreloadConfig(ENABLE);//开启预装载
    TIM2_Cmd(ENABLE);
}

附上原理图
0
捕获.PNG
2019-3-20 17:07:56   评论 分享淘帖 邀请回答
4个回答
个人感觉是PWM或者是分频的代码问题
2019-3-20 18:01:06 1 评论

举报

1 条评论
你应该说明一下是编译有错误,还是达不到预期的效果,程序跑起来有什么现象
2019-3-20 23:14:24 1 评论

举报

1 条评论
  • 2019-3-21 10:02

    编译是没错误的,但是运行起来达不到呼吸的效果,led只是亮,但是不会呼吸

呼吸灯用PWM是有2个时间参数的,一个是PWM的周期,一个是PWM的占空比,这个时间要慢慢调的,你现在的现象有可能是PWM周期太短,而无法看到效果,可以先尝试把PWM周期调大,让LED出现间断亮灭的效果,证明PWM有效,然后再调节PWM占空比和PWM的周期
2019-3-21 12:42:53 1 评论

举报

1 条评论
你这个PWM在while里进行,导致时间太快,你应该将每次改变PWM的时间间隔改大一点
2019-3-22 08:56:55 3 评论

举报

3 条评论

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表