void Init_Tim4(void) //定时器4初始化
{
TIM4_CR1=0x02;//关闭中断标志(如果你软件写入更新事件,不关闭将导致开启定时器中断及总中断后马上先进入中断函数)
TIM4_CNTR=0; //计数器初值
TIM4_ARR=0xFf; //自动重装寄存器值255,从0-255供计数256次
TIM4_PSCR=0x07; //预分频系数为128 ,2的7次方,因为定时器4的时钟就等于主时钟Fmaster,如果你的主频fmaster是2MHZ的话,那么计数器就是2MHZ除以128
TIM4_EGR=0x01; //手动产生一个更新事件,让ARR寄存器的值送影子寄存器,使TIM4_ARR里的值生效(因为之前关闭了中断标志,所以TIM4_SR里的中断标志不会置位)
TIM4_IER=0x01; //定时器4中断使能
TIM4_CR1=0x01; //使能计时器,并使能中断标志
_asm("rim");//开总中断(这里因为中断标志位为0,所以不会马上开始进入中断函数,要等下一个更新时,中断标志位才会置位,并进入中断函数,在中断函数里要清除中断标志位)
}
上面几部中不管你有没使能ARPE位都通用,如果你不使能ARPE位,TIM4_CR1=0x02;TIM4_EGR=0x01;这两句可以不要,也不会马上进入中断函数 |