利用中断进行led的5s闪烁中,利用了TIM1,编写中遇到的问题如下
1.利用中断时,main函数中要有除中断外主要运行的函数,while(1)里面是空也可以,但是前提是有这个主函数运行的东西。
2.利用TIM1 进行定时器中断优先级编写时,NVIC_IRQChannel 要选择TIM1_UP_IRQn,同时相应中断服务函数也要改变名称void TIM1_UP_IRQHandler(void) //maybe TIM1与其他TIM进入中断时 其他地方 写的定义不一样 can‘t find it. 如果不改变函数名称不进入中断
3.要配置TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//之前没有配置,计时5s但是单片机计时了25s
参照网上TIM_RepetitionCounter为重复计数器的值,只对TIM1和TIM8起作用,每次RCR向下计数到0,将会生成一个更新事件且将从RCR寄存器值N重新计数。 当TIM_RepetitionCounter=1时;计时5s, TIM_RepetitionCounter ! = 0,不进入中断,TIM_RepetitionCounter值减1; 计时5s, TIM_RepetitionCounter==0, 进入中断,实现10s进入一次中断
当TIM_RepetitionCounter = 2时;计时5s, TIM_RepetitionCounter ! = 0,不进入中断,TIM_RepetitionCounter值减1; 计时5s, TIM_RepetitionCounter ! = 0,不进入中断,TIM_RepetitionCounter值减1; 计时5s, TIM_RepetitionCounter == 0, 进入中断, 实现15s进入一次中断
因此单片机可能默认TIM_RepetitionCounter=4,计时了25s