• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32 定时器使用

liangeeg 2019-02-21 浏览量:903

定时器定时去处理接收到的数据,现在问题是,执行完  Recv_ServerData();后发现回不去了,不知道程序跑到哪里了。求解


 if ( TIM_GetITStatus( BASIC_TIM6 TIM_IT_Update) != RESET ) { 
  printf("Tim6 Delay 2s.\r\n");
  TIM_ClearITPendingBit(BASIC_TIM6 TIM_FLAG_Update);  //Clear TIM6 IT Flag
  Recv_ServerData();
 }  


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 调试时,在调用Recv_ServerData()的位置设置断点,然后使用单步跟踪看程序执行到哪里跑飞了,应该就能大致确定问题了。
    • 发布于 2019-02-21
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:12
  • 看看你的Recv_ServerData()是不是有什么问题
    • 发布于2019-02-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 进去调试模式看看,看看具体卡在哪里,会不会卡到硬件错误中断里面
    • 发布于2019-02-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 可能是进了错误中断了,要看你的这个函数中运行的代码的
    • 发布于2019-02-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 你没贴这个函数的代码无法判断,先贴出来才好判断程序执行位置。
    • 发布于2019-02-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 要看你的这个函数里是什么代码了,是不是函数运行的问题
    • 发布于2019-02-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 你在调试模式下看一下,是否重复进入中断,有可能是Recv_ServerData函数阻塞了,下一次定时器中断过来上一次的还没退出
    • 发布于2019-02-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 建议你把  printf("Tim6 Delay 2s.\r\n"); 这个语句去掉试试


    • 发布于2019-02-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 那是因为你没有把中断的FLAG都清干净  或者是你的外部信号一直在触发了中断,导致卡死在了某个中断里
    • 发布于2019-02-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 单步调试看程序卡在哪里,对照原子例程看看那些方面不合理,参照改改!
    • 发布于2019-02-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 应该是这个语句引起的, printf("Tim6 Delay 2s.\r\n");

    建议把这一句删掉,或者替换成一个 led 闪灯语句,再试试

    • 发布于2019-02-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 用硬件调试仿真模式。在这里设置断点就可以看到程序跑到哪里了
    • 发布于2019-02-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 要看一下这个函数中的具体的程序是怎么写的了,是不是有跳不出循环逻辑存在。
    • 发布于2019-03-14
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32 定时器使用