OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4612|回复: 1

关于定时器和串口中断函数里面判断语句的疑问和串口接收和发送数据的问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-6-6
在线时间
1 小时
发表于 2017-6-6 22:52:54 | 显示全部楼层 |阅读模式
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单片机做些小项目没有什么帮助(对于一个非电类的学生),我却很想弄明白,希望有人能解答一下,或者指点我一下有什么资料能查,谢谢了!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-6-6
在线时间
1 小时
 楼主| 发表于 2017-6-6 22:55:16 | 显示全部楼层
不好意思,第二次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
}
这里面printf("hanyunhai")打错了,应该是printf("a")
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 21:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表