请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 4138|回复: 2
收起左侧

STM8L TIM4定时器的问题

[复制链接]

1

主题

2

帖子

1

积分

新手上路

积分
1
发表于 2016-5-11 18:41:20 | 显示全部楼层 |阅读模式
#include<iostm8l051f3.h>

#define Work_LedToggle()                   (PA_ODR ^= (1 << 6))     //取反


void SysClock_Init(void)               
{
    CLK_ICKCR |= 0x01;                                                              //开启内部HSI
    while(!(CLK_ICKCR&0x02));                                               //HSI准备就绪读取CLK_ICKCR第一位
    CLK_SWR = 0x01;                                                              //HSI为主时钟源
    CLK_CKDIVR &=~0X03;                                                 //16分频
    CLK_ICKCR |=(1 << 2);  //open LSI clock
}

void Delay_Init(void)
{
    CLK_PCKENR1 |= (1 << 2);                                        //open peripheral clock  打开定时器4
    TIM4_CR1 |= (1 << 7);                                            //enable preload                        
    TIM4_PSCR = (1 << 2) | (1 << 0);                            //prescaler = 32
    TIM4_ARR = 250;                                                   //1MS
    TIM4_SR1 &=~(1 << 0);                                       //clear updata interrupt flag
}

void Delay_ms(u16 ms)
{
    TIM4_CR1 |= (1 << 0);                                         //open TIM4
    while(ms--)
    {
        Feed_Dog();
        while((TIM4_SR1 & (1 << 0)) == 0);
        TIM4_SR1 &=~(1 << 0);
    }
    TIM4_CR1 &=~(1 << 0);                                     //close TIM4
}


void main()
{
        SysClock_Init();
        Delay_Init();
        while(1)
        {
                 Work_LedToggle();
                 Delay_ms(1);
        }        
}

请问一下,这里单片机用HSI内部16MHz的时钟,系统时钟通过16分频后系统时钟为1M TIM4定时为1Ms,为什么这里的初始值是250 看数据手册计算公式应该是:TIM4_ARR = 定时的时间(秒)* 主时钟的频率 / 预分频的系数 按照这样的公式TIM4_ARR = 32,为什么这里是250呢?
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
发表于 2016-5-12 09:48:58 | 显示全部楼层
帮顶,没有用过STM8
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

1

主题

2

帖子

1

积分

新手上路

积分
1
 楼主| 发表于 2016-5-13 13:39:54 | 显示全部楼层
找出原因了!CLK_CKDIVR &=~0X03;                                                 //16分频 这行代码有问题~!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-2-19 13:36 , Processed in 0.168214 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表