打印
[STM8]

求助:PWM信号调不出来

[复制链接]
2649|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiangfeizi|  楼主 | 2010-10-27 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯片:STM8S903S
TIMER5的CH1通道输出占空比可调(256档)的PWM信号,程序如下:
void out_pwm1(void)//由定时器TIM5的第一通道输出一路PWM信号,控制输出脉宽
{
          pwm_pot1=0x7f;(设个常值,实际为可调变量)
         TIM5_EGR|=0x01;//给一次更新,初始化所有寄存器
         TIM5_ARRH=0X00;
         TIM5_ARRL=0Xff;//给预装寄存器赋值,确定PWM信号的频率
         TIM5_CCR1H=0X00;
          TIM5_CCR1L=pwm_pot1;//确定有效电平的计数次数
          TIM5_CR1|=0x80;//使能预装载寄存器
             //TIM5_CNTRH=0X00;//计数器初使值为256,计数器周期为128us
          //TIM5_CNTRL=0x00;
               TIM5_PSCR=0X00;//对时钟不进行分频,计数器单次记数周期为0.5US
               TIM5_CCMR1|=0X60;//选择PWM输出模式1
                TIM5_CCER1|=0X03;//PWM比较输出,低电平有效,使能引脚输出
                TIM5_CR1|=0x01;//使能计数器       
}

现在用示波器检测,怎么都不出信号,请各位大侠不吝指点。
沙发
jgphu| | 2010-10-27 18:21 | 只看该作者
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**        TIM1初始化, 更新时间为40uS(PWM输出周期/25MHz)
**
**  Parameters:
**        None
**
**  Returns:
**        None
**
**-----------------------------------------------------------------------------
*/
void TIM1_Init(void)
{
        CLK_PCKENR1 |= 0x80;                       //开启定时器1外设时钟
       
        TIM1_EGR |= 0x01;                          //重新初始化TIM1
       
        TIM1_ARRH = (UCHAR)(TIM1_Period >> 8);     //设定重装载值
        TIM1_ARRL = (UCHAR)(TIM1_Period);

        TIM1_PSCRH = 0x00;                         //设定预分频为1 = 16M
        TIM1_PSCRL = 0x00;

        TIM1_CR1 = 0x00;                           //边沿对齐,向上计数
        TIM1_RCR = 0x00;
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**        TIM1_CC2 PWM输出初始化
**
**  Parameters:
**        None
**
**  Returns:
**        None
**
**-----------------------------------------------------------------------------
*/
void TIM1_OC2Init(void)
{
        TIM1_CCER1 = 0x30;                           //CC2E开启,高电平有效
        TIM1_CCMR2 = 0x70;                           //PWM模式1,CC1配置入输出
        TIM1_OISR &= ~0x03;
        TIM1_CCR2H = (UCHAR)(TIM1_Pulse >> 8);
        TIM1_CCR2L = (UCHAR)(TIM1_Pulse);
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**        TIM1使能或禁止
**
**  Parameters:
**        None
**
**  Returns:
**        None
**
**-----------------------------------------------------------------------------
*/
void TIM1_Cmd(FunctionalState NewState)
{
        if(NewState != DISABLE)
        {
                TIM1_CR1 |= 0x01;                          //使能计数器
        }
        else
        {
                TIM1_CR1 &= ~0x01;                         //禁止计数器
        }
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**        TIM1_CC2 PWM输出控制
**
**  Parameters:
**        None
**
**  Returns:
**        None
**
**-----------------------------------------------------------------------------
*/
void  TIM1_CtrlPWMOutPuts(FunctionalState NewState)
{
        if(NewState != DISABLE)
        {
                TIM1_BKR |= 0x80;
        }
        else
        {
                TIM1_BKR &= ~0x80;
        }
}

这是我写的TIM1 PWM输出

使用特权

评论回复
板凳
t.jm| | 2010-10-28 09:02 | 只看该作者
最近我有个项目也在用STM8S903K(32脚的,20脚的TIM1_CH1不是默认选项),用到TIM1_CH2驱动蜂鸣器,相关代码:
TIM5_CCMR2 |= 0x60;            /* TIM5 CC2 output mode: PWM mode 1.  */
TIM5_CCER1  = 0x10;            /* OC2 active high,CC2E=1 */
                                                       
TIM5_ARRH   = TIM5_Reload_CONST >> 8;            /* Buzzer PWM period */
TIM5_ARRL   = TIM5_Reload_CONST;                  /* Buzzer PWM period */
       
TIM5_CCR2H  = TIM5_Reload_CONST >> 9;            /* TIM5 CC2 Dutycycle */
TIM5_CCR2L  = TIM5_Reload_CONST >> 1;
       
TIM5_CR1   |= 0x01;          /* Counter enable */

使用特权

评论回复
地板
t.jm| | 2010-10-28 09:07 | 只看该作者
STM8的寄存器太多了,一个TIM的相关寄存器就有10几个,其它模块也是如此。
好处是更能强,坏处是配置太麻烦了。

使用特权

评论回复
5
xiangfeizi|  楼主 | 2010-10-28 10:14 | 只看该作者
现在超级鄙视ST的芯片,管脚的复用功能居然还是几个功能关联的,根本就是没办法用。试想下,如果有个特色的超市,你去买肥皂的话还必须和拖把和卫生巾打包一起买,零买不卖,不知道你还会怎么想。ST的芯片的复用功能就是这么打包操作的,堪称所有芯片里的一绝;P!

使用特权

评论回复
6
t.jm| | 2010-10-28 10:32 | 只看该作者
这个比喻不恰当,假如是 买肥皂 送 拖把,毛巾....送的东西你要不要,你会不会嫌拿拖把,毛巾还累着你的身体?
而STM8的芯片超级便宜啊就这个903我的邮购价都吗才4.0 ,比AVR的M8便宜多少!
其实我讨厌STM8的寄存器真是太多了,TIM如此就连端口的寄存器都超级的多(Px_ODR,Px_IDR,Px_DDR,Px_CR1,Px_CR2,而一般的MCU也就3个。)
但是寄存器多就能配置出更多的功能,使用就更方便。

使用特权

评论回复
7
xiangfeizi|  楼主 | 2010-10-28 10:44 | 只看该作者
问题是送吗?那叫做强制执行,知道不?

使用特权

评论回复
8
8bit_MCU| | 2010-10-28 12:01 | 只看该作者
此楼有点歪

使用特权

评论回复
9
jack_shine| | 2010-10-28 17:34 | 只看该作者
PWM波形可以用软件实现的:)

使用特权

评论回复
10
yulri| | 2010-10-31 14:58 | 只看该作者
----------------------------------------------
█〓██▄▄▄▄▄▄ ●●●  
▄▅██████▅▄▃▂  
██████████████  
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

使用特权

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

本版积分规则

12

主题

62

帖子

0

粉丝