新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2018-4-18
- 在线时间
- 3 小时
|
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;//位置二
}
如上图代码框架,通过多次试验发现,当中断服务函数中执行较少时,把中断清除操作放到位置二,一般也是没有问题,但当服务函数中执行较多时,会发现进行中断的周期会被缩小一半,当把中断清除操作放到位置一时,会发现定时准了。
想请教下原子哥这是什么原因造成的?
|
|