求帮忙看看这个stm8呼吸灯代码有什么错误

2019-07-14 13:32发布

主函数
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);
}

附上原理图
捕获.PNG
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
人中狼
1楼-- · 2019-07-14 22:56
你应该说明一下是编译有错误,还是达不到预期的效果,程序跑起来有什么现象
人中狼
2楼-- · 2019-07-15 00:42
 精彩回答 2  元偷偷看……
流云舒语
3楼-- · 2019-07-15 01:03
你这个PWM在while里进行,导致时间太快,你应该将每次改变PWM的时间间隔改大一点

一周热门 更多>