5015|11

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请大家帮我看看定时器的程序 [复制链接]

我想用STM32F103ZE的TIM2定时器做基本的定时器用,产生4ms左右的中断。定时器的初始化程序如下:
void TIM2_Configuration(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 33333;//4.165ms
  TIM_TimeBaseStructure.TIM_Prescaler = 8;//72/(8+1)=8M
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  /* TIM IT enable */
  TIM_ITConfig(TIM2, TIM_IT_Trigger, ENABLE);
  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);
}

NVIC的配置如下:
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif
  /* Enable the TIM2 gloabal Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

这样配置后程序执行时却进不了void TIM2_IRQHandler(void)中断函数,在调试器中查看TIM2发现显示时钟禁止,是怎么回事呢?

还需要设置什么地方才能进入中断呢?
此帖出自stm32/stm8论坛

最新回复

                                 看不到打开定时器时钟的语句  详情 回复 发表于 2009-10-23 08:29
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 打开定时器的时钟了吗?
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如何打开定时器的时钟呢?
我在技术手册、例程中都没有找到相关的说明和语句,STM32的各个外围模块的时钟默认是关闭的吗?
此帖出自stm32/stm8论坛
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

4
 
TIM2的时钟已经打开,在调试器中也看到能开始循环计时,但是不能进入中断。
TIM_ITConfig(TIM2, TIM_IT_Trigger, ENABLE);这个语句不就是开启中断的吗?为什么不能进入中断呢?
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
TIM2的时钟已经打开,在调试器中也看到能开始循环计时,但是不能进入中断。
TIM_ITConfig(TIM2, TIM_IT_Trigger, ENABLE);这个语句不就是开启中断的吗?为什么不能进入中断呢? ...
你改成TIM_IT_Update试试
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢大家帮忙!
现在虽然已经可以进入和退出中断,但是中断程序的入口处设置断点,在调试器中观察每次刚进入中断时TIM2_CNT的值都不固定,而且大多数是0x7000以上的很大的数值,TIM2_ARR中的值为0x8235。
这是不是说明每次进入中断的时候有延时呢?怎么解释这个现象呢?
定时器是设置的向上计数模式,当TIM2_CNT计数到0x8235时溢出,然后产生更新中断,CPU转入中断服务程序,这个时间应该很短啊,为什么刚进入中断的时候TIM2_CNT就已经是个很大的值了呢?
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
这个算不算是进入中断的时候延时了呢?
是正常的情况吗?
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
调试软件需要花很长时间刷新界面显示的数据。

你可以在中断开始用程序语句读出CNT的数值,再保存到全局变量中,然后在这个语句之后设置断点,这样才能看到真实的情况。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 哦,好的,谢谢版主!
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 不太明白
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 定时器时钟肯能有个使能位啊
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 看不到打开定时器时钟的语句
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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