打印
[STM8]

stm8的定时器1利用PWM输出控制LED ,程序不知道哪里出问题

[复制链接]
4251|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gpjun2008|  楼主 | 2013-10-28 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手,希望大神解答下。程序是别人TIM2的我改过来TIM1,我的LED在PC2口所以用的TIM1的通道2,刚学不知道哪里出问题了。麻烦帮看下程序哪错了
请教个问题啊,网上找的利用tim1的通道2来pwm控制led怎么控制不了啊
#include "ioSTM8.h"

void CLK_Init(void);
void TIM_Init(void);

// 函数功能:延时函数
// 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ
// 输出参数:无
// 返 回 值:无
// 备    注:无
void DelayMS(unsigned int ms)
{
  unsigned char i;
  while(ms != 0)
  {
    for(i=0;i<250;i++)
    {
    }
    for(i=0;i<75;i++)
    {
    }
    ms--;  
  }     
}

// 函数功能:初始化时钟
// 输入参数:无
// 输出参数:无
// 返 回 值:无
// 备    注:无
void CLK_Init()
{
  CLK_CKDIVR = 0x11;          // 10: fHSI = fHSI RC output/ 4
                              //          = 16MHZ / 4 =4MHZ
                              // 001: fCPU=fMASTER/2. = 2MHZ
}

// 函数功能:初始化定时器2的通道2,用于控制LED的亮度
// 输入参数:无
// 输出参数:无
// 返 回 值:无
// 备    注:无
void TIM_Init()
{
  TIM1_CCMR2 = TIM1_CCMR2 | 0x70;// Output mode PWM2.         
                                 // 通道2被设置成比较输出方式
                                 // OC2M = 111,为PWM模式2,
                                 // 向上计数时,若计数器小于比较值,为无效电平
                                 // 即当计数器在0到比较值时,输出为1,否则为0
  TIM1_CCER1 = TIM1_CCER1 | 0x30;// CC polarity low,enable PWM output      */
                                 // CC2P = 1,低电平为有效电平
                                 // CC2E = 1,开启输出引脚                 
   
//初始化自动装载寄存器,决定PWM方波的频率,Fpwm=4000000/256=15625HZ        
  TIM1_ARRH = 0;
  TIM1_ARRL = 0xFF;
        
//初始化比较寄存器,决定PWM方波的占空比              
  TIM1_CCR2H = 0x00;
  TIM1_CCR2L = 0x00;
        
// 初始化时钟分频器为1,即计数器的时钟频率为Fmaster=4MHZ
  TIM1_PSCRH = 0;
    TIM1_PSCRL = 0x00;

// 启动计数
  TIM1_CR1 = TIM1_CR1 | 0x01;

}

main()
{
  unsigned char i;
  
  CLK_Init();                 // 初始化时钟
  TIM_Init();                 // 初始化定时器      
  while(1)                    // 进入无限循环
  {
    // 下面的循环将占空比逐渐从0递增到50%
    for(i=0;i<128;i++)
    {
      TIM1_CCR2H = 0;
      TIM1_CCR2L = i;
      DelayMS(5);
    }

    // 下面的循环将占空比逐渐从50%递减到0
    for(i=128;i>0;i--)
    {
      TIM1_CCR2H = 0;
      TIM1_CCR2L = i;
      DelayMS(5);
    }
}  
}

发现stm8寄存器好复杂啊
沙发
gpjun2008|  楼主 | 2013-10-28 17:21 | 只看该作者
本帖最后由 gpjun2008 于 2013-10-28 17:22 编辑

逛了下论坛解决了,谢谢某个版主的资料。定时器1比较特殊点,要价格刹车语句才行。

使用特权

评论回复
板凳
huangxz| | 2013-10-28 17:31 | 只看该作者

使用特权

评论回复
地板
jackwugaopei| | 2014-3-21 09:52 | 只看该作者
gpjun2008 发表于 2013-10-28 17:21
逛了下论坛解决了,谢谢某个版主的资料。定时器1比较特殊点,要价格刹车语句才行。 ...

你好,能共享一下你的TIM1 PWM是如何搞好的,改了哪里?我现在也在做PWM TIM2的是可以,但是就是TIM1的一个口都没法输出PWM,急死了,搞了好久!!都没搞好,请指点,谢谢!!

使用特权

评论回复
5
gpjun2008|  楼主 | 2014-3-21 14:00 | 只看该作者
jackwugaopei 发表于 2014-3-21 09:52
你好,能共享一下你的TIM1 PWM是如何搞好的,改了哪里?我现在也在做PWM TIM2的是可以,但是就是TIM1的一 ...
// 启动计数
  TIM1_CR1 = TIM1_CR1 | 0x01;
  TIM1_BKR|=0x80;


启动计数之后加个刹车语句

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

267

帖子

3

粉丝