OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4318|回复: 4

定时器进入中断的频率或者周期不对

[复制链接]

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-3-22
在线时间
0 小时
发表于 2015-1-19 20:46:19 | 显示全部楼层 |阅读模式
5金钱
我把定时器设配置100us产生一个中断,程序如下:
void TIM_Configuration(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
  TIM_DeInit(TIM2);
  TIM_TimeBaseStructure.TIM_Period = 720; /* 自动重装载寄存器周期的值(计数值) */
/* 累计 TIM_Period个频率后产生一个更新或者中断 */
  TIM_TimeBaseStructure.TIM_Prescaler= (10 - 1);    /* 时钟预分频数   例如:时钟频率=72MHZ/(时钟预分频+1) */
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频 */
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);    /* 清除溢出中断标志 */
  TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
  TIM_Cmd(TIM2, ENABLE); /* 开启时钟 */
}
我在定时器中断函数里面设个断点,在调试模式下可以看到每次运行到断点的时间。按照定时器的配置应该是每100us进一次中断,但是实际调试中,进入中断的周期偏差极大,甚至根本没有一个固定的周期,我根据记录算出来的时间间隔为:60us、80us、50us、66us、40us、24us、41us、95us...浮动极大。问题在哪呢?请大家指点下。
在“Target options”中我也对相关的参数进行了设置:
设置第二项“Target”中,晶振选72MHz;
“Debug”选项,点击“Settings”:

选项debug下:选择“SW”模式,速率可选“500khz”;
选项“Trace”下:芯片工作频率选择“72MHZ”,”SW0 Settings”的选项“Autodetect max SW0 C1”打勾选中,然后“Enable”选项打勾选中。



最佳答案

查看完整内容[请看2#楼]

测试方法不对. 在中断里面取反IO,然后用示波器看IO波形.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-19 20:46:20 | 显示全部楼层
测试方法不对.
在中断里面取反IO,然后用示波器看IO波形.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-1-19 20:46:20 | 显示全部楼层
回复【3楼】mtianzhao:
---------------------------------
代码前后段IO取反,用示波器看吧

或者代码前定时器清零,代码后读取定时器的值,然后计算,还是示波器的方便些
学无止境
回复

使用道具 举报

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2014-3-22
在线时间
0 小时
 楼主| 发表于 2015-1-20 09:03:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
---------------------------------
那怎么查看一段代码的精确执行时间呢?
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-2-4
在线时间
1 小时
发表于 2015-2-6 19:27:16 | 显示全部楼层
TIM_DeInit(TIM2)要放在RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE)前吧!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 01:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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