STM32
直播中

李晓鹏

7年用户 1314经验值
私信 关注
[问答]

stm8L怎么使用外部低速时钟作为定时器3的时钟?

我是这样初始化的,可以初始化完成以后,定时器3还是用的内部快速时钟,请问应该怎么使用外部低速时钟作为定时器3的时钟???
void System_timer3_Init(void)
{
    CLK_ECKR |= 0x04;
    while(!(CLK_ECKR   0x08));
    CLK_PCKENR1 |= 0x02;
    SYSCFG_RMPCR2 |= 0x10;
    TIM3_CR1 = 0x00;
    TIM3_SMCR |= 0x77;
    TIM3_ETR = 0xe7;
    TIM3_EGR |= 0x01;

    TIM3_CNTRH = 0xff;
    TIM3_CNTRL = 0x10;
    TIM3_ARRH = 0xff;
    TIM3_ARRL = 0x10;
    TIM3_CR1 |= 0x03;
    TIM3_IER |= 0x01;
}


回帖(1)

王越建

2024-5-17 18:16:37
在STM8L系列微控制器中,要使用外部低速时钟作为定时器3的时钟,您需要进行以下步骤:

1. 首先,确保外部低速时钟已经正确配置并连接到微控制器的相应引脚。

2. 接下来,您需要配置系统时钟以允许使用外部低速时钟作为定时器3的时钟源。在您的代码中,您已经设置了一些寄存器,但是可能需要进行一些调整。以下是修改后的初始化代码:

```c
void System_Timer3_Init(void)
{
    // 启用外部低速时钟
    CLK_ECKR |= 0x04;
    // 等待外部低速时钟稳定
    while (!(CLK_ECKR & 0x08));

    // 允许定时器3时钟
    CLK_PCKENR1 |= 0x02;

    // 配置SYSCFG_RMPCR2寄存器以使用外部低速时钟作为定时器3的时钟源
    SYSCFG_RMPCR2 |= 0x10;

    // 禁用定时器3
    TIM3_CR1 = 0x00;

    // 配置定时器3的SMCR寄存器以使用外部低速时钟
    TIM3_SMCR |= 0x77;

    // 设置定时器3的外部触发输入(ETR)
    TIM3_ETR = 0xe7;

    // 重载定时器3的事件以更新寄存器
    TIM3_EGR |= 0x01;

    // 设置定时器3的计数器值
    TIM3_CNTRH = 0xff;
    TIM3_CNTRL = 0xff;

    // 启用定时器3
    TIM3_CR1 |= 0x01;
}
```

3. 在上述代码中,我们使用了`SYSCFG_RMPCR2`寄存器来配置定时器3的时钟源。通过设置`SYSCFG_RMPCR2`寄存器的第4位(值为0x10),我们允许使用外部低速时钟作为定时器3的时钟源。

4. 请注意,您需要根据您的具体硬件配置和需求调整代码中的其他参数,例如定时器3的计数器值、外部触发输入(ETR)等。

5. 最后,确保您的外部低速时钟信号稳定且符合微控制器的要求。如果外部时钟信号不稳定或不符合要求,定时器3可能无法正常工作。

通过以上步骤,您应该可以使用外部低速时钟作为定时器3的时钟。如果仍然遇到问题,请检查您的硬件连接和外部时钟信号,确保它们符合微控制器的要求。
举报

更多回帖

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