广东啊鹏 发表于 2016-11-15 17:26:03

求教:STM8L151F2,TIM4分频的问题

我使用STM8L151F2,使用16MHz的内部高速时钟HSI,没有分频;然后对TIM4使用了128分频,填充值为125,我本来想它会1ms中断一次,然后再中断程序中每计数500次(0.5秒)切换一下指示灯。
但在开发板上却发现要增加100倍才达到我想要的效果,对照参考手册翻来覆去都实在找不到问题出在那里,请帮忙看看是哪里搞错了,谢谢!

void Init_TIM4(void)
{
    CLK_ICKCR |=0x01;      //打开内部高速时钟HSI(16MHz);
    CLK_SWR =0x01;      //系统时钟源使用内部高速时钟HSI;0x01=HSI,0x02=LSI,0x04=HSE,0x08=LSE其余保留
    CLK_CKDIVR=0x00;    //系统不分频,使之工作在16MHz的频率下(0=1,1=2,2=4,3=8,4=16)


    CLK_PCKENR1 |= 0x04;      //让TIM4链接上系统时钟。

    //定时器TIM4的初始化,首先将TIM4相关的寄存器全部复位
    TIM4_CR1 = 0x00;      //控制寄存器1
    TIM4_CR2 = 0x00;   //控制寄存器2
    TIM4_SMCR = 0x00;   //从模式控制寄存器
    TIM4_IER = 0x00;    //中断使能寄存器
    TIM4_CNTR = 0x00;   //计数寄存器
    TIM4_PSCR = 0x00;    //分频值寄存器
    TIM4_ARR = 0xFF;    //重装填值寄存器,手册上写的复位值是0xFF,
    TIM4_SR1 = 0x00;    //状态寄存器


   //对TIM4进行设置
    TIM4_PSCR = 0x07;   //对系统时钟进行128分频,当前系统使用16MHz,经128分频后得128KHz(8us/触发)
    TIM4_ARR = 125;   //125次触发×8us=1000us=1ms。就是说1ms产生1次中断
    TIM4_EGR = 0x01;    //TG =0,UG =1; 选择中断类型
    TIM4_IER |= 0x01;   //打开中断
    TIM4_CR1 |= 0x01;   //打开定时器;

}
#pragma vector=TIM4_UIF_vector   //TIM4的中断函数
__interrupt void TIM4_UIF(void)
{
TIM4_count ++;
// if(TIM4_count >= 500){       //一开始以为会1ms中断一次,500次中断得500ms,但实际效果是指示灯常亮
if(TIM4_count >= 50000){      //现在改为五万次中断动作1次,才实现0.5秒指示灯动作一次。
    PB_ODR ^=0x02;               //指示灯的引脚反相,实现开关灯。
    TIM4_count =0;
}
TIM4_SR1 = 0x01;       //清除TIM4的中断标志,以防重复进入
}


谢谢!

广东啊鹏 发表于 2016-11-15 17:30:45

另外,我现在的TIM4跟USART1会冲突。
现象是这样的:

CLK_PCKENR1 |= 0x04;      //让TIM4链接上系统时钟。我加上这行代码后,TIM4有中断,指示灯能闪,但USART1不工作。

如果我屏蔽这行代码,串口能工作,TIM4就不工作了,指示灯不闪。不知道有没有碰到过这个问题?

peter001 发表于 2016-11-20 11:07:54

顶一下,:)

无薪税绵 发表于 2016-11-21 08:16:27

建议楼主查一下PDF,TIM4和USART1是不是共用了。

z258121131 发表于 2016-11-21 09:14:52

帮顶                     

哈佛祖安智 发表于 2016-11-21 09:56:04

:)

sting 发表于 2016-11-21 10:41:47

自动重装载寄存器(TIMx_ARR)
预分频寄存器 (TIMx_PSCR)
傻傻分不清楚

xuezhimeng2010 发表于 2016-11-21 10:46:33

检查下时钟分频,PCLK1和tim用的不是同一个时钟;
对于你的usart,如果你时钟频率不对了,肯定时串口输出乱码或者不输出。

sabaka 发表于 2016-11-21 11:10:30

配置貌似没错,要不你在程序运行起来之后读一次 PSCR 和ARR寄存器的值看看是否正确?

peter001 发表于 2016-11-21 15:49:44

我今天用f103的tim4,中断进的也不太对
页: [1] 2
查看完整版本: 求教:STM8L151F2,TIM4分频的问题