打印
[STM8]

STM8S105S6单片机 关于TIM1输出PWM信号 疑问

[复制链接]
2832|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
scott_skl|  楼主 | 2014-3-18 20:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    不使用库函数
#include "stm8s105s6.h"
_Bool LED @PD_ODR:0;
/**************************实现函数********************************************
*函数原型:                void Delay(unsigned int time)
*******************************************************************************/
void Delay(unsigned int time)
{
        volatile unsigned int i;
        while(time--){
                i=300;
                while(i--);
        }
}

void CLK_Init(void)
{
        CLK_CKDIVR = 0x00;  //16M晶振
}

void GPIO_Init(void)
{

        PD_DDR = 0xff;
        PD_CR1 = 0xff;
        PD_CR2 = 0x00;
        PC_DDR = 0xff;
        PC_CR1 = 0xff;
        PC_CR2 = 0x00;
}
/**************************实现函数********************************************
*函数原型:                main() 主程序
*功  能:                配置定时器1,改变PWM的占空比,以调节LED1的亮度
*******************************************************************************/
main()
{
  int i;
        GPIO_Init();
        CLK_Init();
       
        //
        CLK_PCKENR1 =0x80;
        //CLK_PCKENR2 =0xff;
  //
  TIM1_CCER1 = 0x03; //通道1极性,有效电平为低电平
        TIM1_CCMR1 = 0x60; //配置通道1 模式PWM 1
        TIM1_BKR |= 0x80; //使能PWM输出
        TIM1_PSCRH = 0x00;
        TIM1_PSCRL = 0x00;  //预分频系数 1
        TIM1_ARRH = 0x00;
        TIM1_ARRL = 0xff; //最大计数值
        TIM1_CCR1H = 0x00;
        TIM1_CCR1L = 0x06; //通道1的比较值

        TIM1_CR1 = 0x01; //启动Tim1 向上计数模式
        //
       
        //
        while (1)
    {  //LED1的亮度会慢慢亮,然后熄灭.
            for(i=0;i<20;i++)
            {
                           Delay(100);
                                                        LED=0;
                          TIM1_CCR1H = 0x00;//改变PC1输出的PWM的占空比,
                          TIM1_CCR1L = 0x3f; //通道1的比较值
                  }
                                                Delay(100);
                                        for(i=0;i<20;i++)
            {
                           Delay(100);
                                                        LED=1;
                          TIM1_CCR1H = 0x00;//改变PC1输出的PWM的占空比,
                          TIM1_CCR1L = 0xef; //通道1的比较值
                  }
          }
}
怎么  没有输出  PWM信号   求大侠指点!!    要说外设时钟 和  使能都打开了,为啥 输出还是没有?
沙发
scott_skl|  楼主 | 2014-3-18 20:35 | 只看该作者
     求大神!

使用特权

评论回复
板凳
nienianhong| | 2014-3-18 23:25 | 只看该作者
看一下,需不需要配置OPTION  BYTE?

使用特权

评论回复
地板
ye955| | 2014-3-19 16:20 | 只看该作者
void CLK_init(void)    //系统时间配置
{
  CLK_HSICmd(ENABLE);    //启动内部高速振荡器
  CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV2); //配置系统时钟分频器(内部高速振荡器2分频=8M)
}

  GPIO_Init(GPIOC, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);  //PC1高速推挽输出低电平(PWM输出口)
  GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);  //PC2高速推挽输出低电平(PWM输出口)

void TIM1_init(void)   //定时器1配置(PWM输出)
{
  TIM1_PSCRH=0x00;
  TIM1_PSCRL=0x02;//
  TIM1_ARRH=0x00;
  TIM1_ARRL=0x82;//自动重装载寄存器,决定频率82=130

  TIM1_CCMR1=0X78;//PWM2模式,CC1配置为输出,为了操作正确,在PWM模式下必须使能预装载功能(68低电平为有效,78为高电平有效)
  TIM1_CCR1H=0x00;
  TIM1_CCR1L=0x00;//捕获/比较寄存器,决定占空比(CCR1H+CCR1L不能大于ARRH+ARRL=130)0x60
  
  TIM1_CCMR2=0X78;//PWM2模式,CC1配置为输出,为了操作正确,在PWM模式下必须使能预装载功能
  TIM1_CCR2H=0x00;
  TIM1_CCR2L=0x00;//捕获/比较寄存器,决定占空比 0x60

  TIM1_CCER1=0X33;//OC1\OC2高电平有效,OC1\OC2信号输出到对应输出引脚
  TIM1_EGR=0X01;
  TIM1_BKR=0x80; //使能刹车寄存器
  TIM1_CR1=0X01;//TIM1控制寄存器,有预装载缓冲ARPE=1,CEN=1使能计数器
}


TIM1_CCR1L=0x82;

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
scott_skl + 1 20
5
scott_skl|  楼主 | 2014-4-3 15:46 | 只看该作者
ye955 发表于 2014-3-19 16:20
void CLK_init(void)    //系统时间配置
{
  CLK_HSICmd(ENABLE);    //启动内部高速振荡器

多谢大神!     发现这边一个管脚PC1已坏,怪不得没反应。   

使用特权

评论回复
6
FAQ| | 2014-4-3 17:34 | 只看该作者
scott_skl 发表于 2014-4-3 15:46
多谢大神!     发现这边一个管脚PC1已坏,怪不得没反应。

可以结贴了

使用特权

评论回复
7
scott_skl|  楼主 | 2014-4-14 19:19 | 只看该作者
FAQ 发表于 2014-4-3 17:34
可以结贴了

大哥   怎么结贴啊?  不会弄啊

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝