新手入门
- 积分
- 6
- 金钱
- 6
- 注册时间
- 2017-6-6
- 在线时间
- 1 小时
|
1金钱
原点哥通用定时器实验的视频,一个标准的定时器使用问题,定时器中断函数如下:
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
{
LED1=!LED1;//
LED0=!LED0;
printf("a");
}
TIM_ClearFlag(TIM2,TIM_IT_Update);//µÈͬÓÚTIM_ClearITPendingBit
}
其中printf("a");向串口打印一个a,在上面的配置我设的是500ms中断一次,所以我在串口调试助手里每500ms看到一个a
我将这个判断的语句去掉后:
void TIM2_IRQHandler(void)
{
//if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
// {
LED1=!LED1;//
LED0=!LED0;
printf("hanyunhai");
//}
TIM_ClearFlag(TIM2,TIM_IT_Update);//µÈͬÓÚTIM_ClearITPendingBit
}
与一开始的结果很大,也是每隔500ms串口调试助手里出现一次字符,不过一次连着出现两个a,也就导致LED瞬闪一下
这里我有一个疑问,为什么我在上面的函数只激活了定时器的一个中断TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
这个中断函数TIM2_IRQHandler里应该只在计时器数值上溢的时候产生中断,因此我一开始认为不需要这个中断语言判断,结果却有很大区别。
然而我将串口中断USART1_IRQHandler里的接收判断语句 if(USART_GetITStatus(USART1,USART_IT_RXNE))去掉后,只留下:
rec=USART_ReceiveData(USART1);
USART_SendData(USART1,rec);
却依然能实时回收到电脑发送的数据,看上去就没有影响的样子
还有个关于串口传输数据的问题:以下是串口中断的代码
void USART1_IRQHandler(void)
{
u8 rec;
static u8 count=0;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
rec=USART_ReceiveData(USART1);
USART_SendData(USART1,rec);
printf("a");
}
我在串口助手里输入一个字符a,反馈回电脑1个a和一个由pinrtf产生的a,我输入2个a,则是反馈回电脑2个a和一个printf产生的a,所以我想问:无论输入多少字符,都是只进入一次USART1_IRQHandler函数吗?
可能这两个问题对正常用32单片机做些小项目没有什么帮助(对于一个非电类的学生),我却很想弄明白,希望有人能解答一下,或者指点我一下有什么资料能查,谢谢了!
|
|