野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9727|回复: 5

移植OTG U盘例程时,遇到BSP_delay永远等于3的死循环:

[复制链接]
发表于 2017-4-18 23:05:50 | 显示全部楼层 |阅读模式
移植OTG U盘例程时,遇到以下死循环:
  1. static void BSP_Delay(uint32_t nTime, uint8_t unit)
  2. {
  3.   
  4.   BSP_delay = nTime;
  5.   BSP_SetTime(unit);  
  6.   while(BSP_delay != 0);
  7.   TIM_Cmd(TIM2,DISABLE);
  8. }
复制代码
在while里面,BSP_delay永远等于3,而不会变成0,导致卡死。
请问是什么原因呢?是时钟频率的问题吗?
回复

使用道具 举报

发表于 2017-4-19 08:47:59 | 显示全部楼层
定时器没有跑
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-19 09:00:12 | 显示全部楼层

谢谢!请问什么原因导致定时器没有跑呢?
我移植的主要是把读写U盘的例程代码移植到MPU6050的例程中,因为我想把MPU6050给出的姿态数据保存到U盘里。是不是MPU6050当中的某些中断或者某些设置把定时器阻断了?
回复 支持 反对

使用道具 举报

发表于 2017-4-19 09:03:30 | 显示全部楼层
suj 发表于 2017-4-19 09:00
谢谢!请问什么原因导致定时器没有跑呢?
我移植的主要是把读写U盘的例程代码移植到MPU6050的例程中,因 ...

你得看看bsp_delay用的是什么定时器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-19 09:03:48 | 显示全部楼层
找了一下BSP_delay,是在这个函数中减的:
  1. void USB_OTG_BSP_TimerIRQ (void)
  2. {
  3. #ifdef USE_ACCURATE_TIME
  4.    
  5.   if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  6.   {
  7.     TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  8.     if (BSP_delay > 0x00)
  9.     {
  10.       BSP_delay--;
  11.     }
  12.     else
  13.     {
  14.       TIM_Cmd(TIM2,DISABLE);
  15.     }
  16.   }
  17. #endif  
  18. }
复制代码

是不是说明USB_OTG_BSP_TimerIRQ这个函数没有被调用?所以无法递减?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-19 09:08:10 | 显示全部楼层
找到原因了,谢谢,是在移植时忘了把中断写进stm32f4xx_it.c当中。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 11:46 , Processed in 0.028286 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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