STM32
直播中

tr12345

8年用户 891经验值
擅长:制造/封装
私信 关注
[问答]

stm8s003的TIM2_CH3输出pwm,PWM无输出是为什么?

求各位大神解救,此PWM无输出,已经将PD2设置了推挽输出方式,并且在optionbyte中也设置了PORT D2 alternate function=TIM2_CH3了,但是下载到芯片无输出呢,求大神帮帮忙~~
程序如下:
#include "stm8s103f.h"


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(void)
{
        CLK_CKDIVR=0x11;
}

void TIM2_Init(void)
{
        TIM2_CCMR3|=0x70;
        TIM2_CCER1|=0x30;
        TIM2_ARRH=0;
        TIM2_ARRL=0xFF;
        TIM2_CCR3H=0;
        TIM2_CCR3L=0;
        TIM2_PSCR=0;
        TIM2_CR1|=0x01;
}

main()
{
        unsigned char i;
        PD_DDR=0x04;
        PD_CR1=0x04;
        PD_CR2=0x00;
        CLK_Init();
        TIM2_Init();
        while(1)
        {
                for(i=0;i<128;i++)
                {
                        TIM2_CCR3H=0;
                        TIM2_CCR3L=i;
                        delayms(5);
                }
                for(i=128;i>0;i--)
                {
                        TIM2_CCR3H=0;
                        TIM2_CCR3L=i;
                        delayms(5);
                }
        }
}

回帖(1)

石飞鹏

2024-5-15 16:51:24
首先,让我们分析一下您提供的代码和描述,以确定可能的问题所在。

1. 您已经将PD2设置为推挽输出方式,这是正确的。
2. 您已经在optionbyte中设置了PORT D2 alternate function=TIM2_CH3,这也是正确的。

现在,让我们检查一下您的代码。由于您只提供了部分代码,我们将关注这部分代码:

```c
#include "stm8s103f.h"
void delayms(unsigned int ms){
    unsigned char i;
    while(ms!=0){
        for(i=0;i<250;i++);
    }
}
```

这段代码定义了一个延时函数,但是它并没有配置TIM2以生成PWM信号。为了解决这个问题,您需要添加以下步骤:

1. 初始化TIM2的时钟源和预分频器。
2. 设置TIM2的自动重载寄存器(ARR)和捕获/比较模式寄存器(CCR3)以生成所需的PWM占空比。
3. 配置TIM2的通道3(CH3)为PWM模式。

以下是一个示例代码,展示了如何配置TIM2以生成PWM信号:

```c
#include "stm8s103f.h"

void TIM2_PWM_Init(void)
{
    /* 启用TIM2 时钟 */
    CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);

    /* 配置TIM2 预分频器和时钟源 */
    TIM2_PrescalerConfig(TIM2_Prescaler_1, TIM2_PSCReloadMode_Immediate);
    TIM2_TimeBaseInit(TIM2_Prescaler_1 - 1, TIM2_CounterMode_Up, 10000 - 1, 0);

    /* 配置TIM2 通道3 为PWM模式 */
    TIM2_OC3Init(TIM2_OCMode_PWM1, TIM2_OutputState_Enable, TIM2_OutputNState_Disable,
                 TIM2_Pulse_Low, 50, TIM2_OCPolarity_High, TIM2_OCNPolarity_High);
    TIM2_OC3PreloadConfig(ENABLE);

    /* 启动TIM2 */
    TIM2_Cmd(ENABLE);
}

void delayms(unsigned int ms)
{
    unsigned char i;
    while (ms != 0)
    {
        for (i = 0; i < 250; i++);
        ms--;
    }
}

int main(void)
{
    /* 初始化TIM2 以生成PWM信号 */
    TIM2_PWM_Init();

    /* 主循环 */
    while (1)
    {
        /* 执行其他任务 */
    }
}
```

请将此代码添加到您的项目中,并确保在主函数中调用`TIM2_PWM_Init()`以初始化TIM2。这应该能够解决您的问题。如果仍然没有输出,请检查您的硬件连接和设置。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分