OpenEdv-开源电子网

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

请教原子哥STM32 TIME中断 时间的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-4-18
在线时间
3 小时
发表于 2018-4-18 10:58:15 | 显示全部楼层 |阅读模式
5金钱
问题:在调STM32的程序的时候,发现定时器(timer2)比自己设定的中断周期缩小了一倍。设定为10ms中断一次,但实测发现5ms便中断了一次。
初始化代码如下:
void InitTimer2(void)
{
RCC->APB1ENR|=0x01;   //enable clock,max clock=36M
TIM2->PSC=71;         // counter clock CK_CNT=72M/(71+1)=1M
TIM2->ARR=10000;      // 10000*1us=10ms
TIM2->CR1 |=0x0080;   //Auto-reload preload enable
TIM2->EGR |=0x0001;   //Re-initialize the counter and generates an update of the registers.
TIM2->DIER|= 0x0001;   //Update interrupt enabled
TIM2->CR1 |=0x01;     //enable timer2
}

中断服务函数如下:
void TIM2_IRQHandler(void)
{


TIM2->SR&=0xfffe;//位置一
DS[1].js++;
if(DS[1].js>500)
{
DS[1].en=1;
DS[1].js=0;
}


//TIM2->SR&=0xfffe;//位置二

}

如上图代码框架,通过多次试验发现,当中断服务函数中执行较少时,把中断清除操作放到位置二,一般也是没有问题,但当服务函数中执行较多时,会发现进行中断的周期会被缩小一半,当把中断清除操作放到位置一时,会发现定时准了。


想请教下原子哥这是什么原因造成的?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2018-4-18 12:24:07 | 显示全部楼层
你时钟初始化的时候是不是设置了APB1的分频系数为1,定时器的时钟源就是36M的
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-4-18
在线时间
3 小时
 楼主| 发表于 2018-4-18 13:25:14 | 显示全部楼层
login_FAE 发表于 2018-4-18 12:24
你时钟初始化的时候是不是设置了APB1的分频系数为1,定时器的时钟源就是36M的

如果是1也是变慢,现在周期是变短
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-4-18
在线时间
3 小时
 楼主| 发表于 2018-4-21 16:00:28 | 显示全部楼层
自己顶下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 04:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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