玩好了TFT,NRF24后,兴备的我们开始回归蕊片的本身学习了. 我们开始学习它的定时器.
我写了定时器3的初始化代码:
void Timer3_init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //time3 使能 参考手册 P92
TIM3->ARR=arr; //设定计数器自动重装值 P254
TIM3->  SC=psc; //分频器值
TIM3->DIER |=1<<0; //可见TIMx的值一上默认是0x00
TIM3->DIER |=1<<6;
TIM3->CR1 |=0X01;
NVIC->ISER[0]|=1<<29; //使能TIM3的中断函数
}
然后是定时器中断服务代码:
void TIM3_IRQHandler(void)
{
LCD_LED=!LCD_LED; <<==============简简单单我们就用屏的LED
TIM3->SR&=0xfffe; //清除中断标志位
}
主函数很简单,啥都不做就等中断:
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
LCD_IO_Init();
LCD_init();
Timer3_init(5000,7199);
B_COLOR=color(30,60,30);
clear_lcd();
LCD_LED=0;
while (1)
{
;
}//end of while(1)
}
编译后丢板子,发现没,没有动静!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
51民工们,是不是很奇怪,不动!!我查了几次,代码没有错!!!!!! 为啥没反应!!!!!!! 经验告诉我 LED跳得太快是不会动的 这和电路图中接的三极管的频率参数有关,变化太快!!!!
于是我将服务代码变了下:
void TIM3_IRQHandler(void)
{
LCD_LED=1; <<==============简简单单我们就用屏的LED
TIM3->SR&=0xfffe; //清除中断标志位
}
编译后丢板子,发现没,有动静!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!屏亮了!!!
就是说 有进中断!!! 为啥呢??? 我猜了一下,是不是这蕊片无时无刻地跑进来??? 好,我又改了下代码.
void TIM3_IRQHandler(void)
{
LCD_LED=!LCD_LED;
delay_ms(200);
TIM3->SR&=0xfffe;//~(1<<0);//清除中断标志位
}
编译后丢板子,发现没,有动静!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!屏闪了!!!
明白了,傻片片以某种我们菜鸟们不清楚的速度进来中断服务程式!!!!!!!囧了呀.......... 这不是无时无刻地进入中断吗,我们51民工真不明白咧..........不是条件到了才进来的吗???
就象MM在房里换衣服,说好过一定的时间进去接她,但这里是一秒进去N次看MM换好衣服没.那之前说好的条件有鸟用呀~~~~~~~~囧囧囧~~~~~~~~~~
望各位高人指点.
现在只能这样了, MM在房里换衣服,说好过一定的时间进去接她,然后在门口申个头进去(上边的头不是下边的头)看,对了,只是眼睛飞快去眨而已,看到MM换完衣服了,就敲敲门说:MM,时间到,我进来了!
囧了~~~~~~~
代码如原子的没什么分别:
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
LCD_LED=!LCD_LED;
}
TIM3->SR&=0xfffe;//~(1<<0);//清除中断标志位
}
if(TIM3->SR&0X0001)<<==盯着MM换衣服眼睛飞快去眨呀眨忆 ^-^ 新片片就是有爱呀,MM换衣服的房间木有门哟~~~~~~~~~ |