13671|10

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8中TIM2,3,4同时开启定时,第一次中断时间不准 [复制链接]

void TIM2_INIT(void)
{
TIM2_PSCR = 2;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM2_ARRH = 0x27; /*50ms中断一次*/
TIM2_ARRL = 0x10;
TIM2_IER = 0x01; /*更新中断使能*/
TIM2_CR1 = 0x81; /*使能计数器*/
}
void TIM3_INIT(void)
{
TIM3_PSCR = 1;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM3_ARRH = 0x27; /*50ms中断一次*/
TIM3_ARRL = 0x10;
TIM3_IER = 0x01; /*更新中断使能*/
TIM3_CR1 = 0x81; /*使能计数器*/
}
void TIM4_INIT(void)
{
TIM4_PSCR = 1;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/
TIM4_ARR = 0x64; /*100us中断一次*/
TIM4_IER = 0x01; /*更新中断使能*/
TIM4_CR1 = 0x81; /*使能计数器*/

@far @interrupt void TIM2_Interrupt (void)
{
  tm2++;
  TIM2_SR1 = 0x00;
    return;
}

@far @interrupt void TIM3_Interrupt (void)
{

  tm3++;
  TIM3_SR1 = 0x00;
    return;
}

@far @interrupt void TIM4_Interrupt (void)
{
   tm4++;

  TIM4_SR1 = 0x00;
    return;
}

上面是我的定时器初始化和中断函数。TIM4每100us中断一次,TIM3是10ms中断一次,TIM4是20ms中断一次。结果每次都是TIM2先中断,此时tm4才49,然后马上进入TIM3中断,此时tm4还是49。按F5下一次还是进入TIM3中断,此时tm4就是149了。现在就是有问题了啊。这定时器TIM2、TIM3的第一次中断总是预定值的一半,后面再进中断的时候就正常了,这是怎么回事啊?有人说是预装载开了没,我现在开了也没用,还是这样。希望知道的人说说看啊,花不了您几分钟的。
}
此帖出自stm32/stm8论坛

最新回复

多个定时器怎么同时启动,需要怎么配置  详情 回复 发表于 2016-3-30 20:25
点赞 关注
 

回复
举报

126

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是否正确设置了预装载功能。

请看我的博客:STM32定时器的预装载寄存器与影子寄存器之间的关系
此帖出自stm32/stm8论坛
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 必须软件更新一次才行。ug
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 如果没有计数器更新(溢出),预分器值仍然是0而不是你设置的2,所以你第一次计数值肯定是你设想的一半
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 啥叫软件更新一次啊???
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 应该重新装载一次
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 软件更新寄存器TIMx_EGR,其中第0位是产生更新事件,手册上特别说到预分频器的计数器也被清零,但是预分频系数不变,我的理解是,预分频器要经过一次更新(溢出)事件后才真正生效!我每次配置定时器在启动之前都会执行一次软件更新事件以确保全部预转载值在定时器开启后马上生效!
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 软软件更新是否就是重新初始化呢
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 我就是这样认为的,要不怎么会翻译成“更新”呢
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 
你的TIM2_PSCR = 2;  /*2分频得到1MHZ的定时器时钟,定时器加1就是1us*/ 不对,其实是2^2=4分频。中断周期是2us, 中断周期是10000x2us=20ms.
TIM3按你的设置,中断周期是10ms,
你没改优先级,这几个定时器都是3级,谁也不能中断谁。谁先到谁中断。
此帖出自stm32/stm8论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

11
 
多个定时器怎么同时启动,需要怎么配置
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表