我用的是SysTick_Handler定时中断,然后在main函数中设置定时时钟,结果碰到好几次,两个程序串口配置完全一样,但是其中一个就是不进入定时中断发送数据。开始我还以为是SysTick_Handler初始化有问题,加载了ASF选项中的头文件,Interrupt management,还加载了Timer Counter,但是串口怎么都没有输出。比较了一下两个程序,发现同样是while(1),不工作的测试程序中只有一段语句,像这样:
- while ( 1 )
- {
- if ( UART_UpdataFlag )
- {
- printf( “Hello world!\n” );
- UART_UpdataFlag = 0;
- }
- }
而原来的能输出串口的代码是这样:
- while ( 1 )
- {
- ……
- if ( UART_UpdataFlag )
- {
- printf( “Hello world!\n” );
- UART_UpdataFlag = 0;
- }
- ……
- }
区别就是除了这个意外,还有别的执行代码,于是我就在测试代码里加个延时,比如 delay_ms(1)。果然,可以正常工作了,至于具体原因,还不明白,以后查到再进行说明。