7073|12

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32在USB应用中的IWDG复位处理问题 [复制链接]

STM32在USB应用中,发生IWDG复位,如何保证USB设备继续工作,而不
发生USB的复位?可否将相关的寄存器保存在电池后备SRAM中?在初始化过程中
恢复。
此帖出自stm32/stm8论坛

最新回复

                                 这样保证所有寄存器初始化为原始状态。Joystick_Reset()应该会被复位中断调用,但看门狗复位后,是否你的中断还没有开启?   详情 回复 发表于 2009-3-26 22:06
点赞 关注
 

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

基本不可能恢复,因为你不知道发生看门狗复位时USB处于什

                                 发生看门狗复位时USB可能处于任何状态,你不可能恢复到那一点上,回复到USB初始化后的状态没有意义。
此帖出自stm32/stm8论坛
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

那么USB应用应当如何处理IWDG复位

                                 进行USB的复位吗?
此帖出自stm32/stm8论坛
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

4
 

复位并重新枚举

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

5
 

谢谢香版主

谢谢!这样必须可控制上拉D+,即除D+,D-外还需要一个IO口,
对吗?
可否只用D+,D-来完成USB复位工作?
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 

看门狗复位包括USB复位,程序中不需要特别做什么事情

ST提供的USB库处理了复位。

USB模块复位后,它不再响应PC来的属于旧连接的请求,PC收不到设备的响应就会自动地从新复位枚举,你不需要做特别的操作。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 

好像不是这样的

当D+一直维持上拉到3。3V时,PC并不会再次枚举。
我用BUSHOUND观察不到再次枚举的情况,当人为进入死循环产生IWDG复位后,
USB完成复位后,PC没有再枚举,使用BUSHOUND向设备发送请求也得不到回应,
当HotPlug后,才能正常通信。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 

PC不进入再次枚举是因为没有任何通讯

此时PC不知道设备是否能够响应请求。

请看我在6楼的说明:“USB模块复位后,它不再响应PC来的属于旧连接的请求,PC收不到设备的响应就会自动地从新复位枚举”,如果PC不试图与设备通信,它当然不会知道设备是否能够响应请求。


这种情况下,需要强制地插拔设备,强迫PC做出反应。实现这个强制插拔,需要把D+的1.5K上拉电阻的另一端接到某个GPIO口,这个GPIO配置为推挽输出;输出高时表示插入USB设备,输出低时表示拔出USB设备。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 

情况是这样的

当初设计时为了少用一个IO口,直接D+上拉1.5K到3.3V的,现在
麻烦了,不用IWDG又担心干扰问题。
不过复位后,端口1的HID的输出好像没问题,但端口0的请求不能响应。
可不可以在IWDG复位时将D+配置成普通IO,强制输出0,延时
一段时间,再重新配置为USB D+功能,以模拟D+的上拉为低电平?
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 

用的是BUSHOUND

用BUSHOUND来调试的,程序改自JOYSTICK,香版主在10楼说
的办法似乎没有影响
  u16 usb_cntr;
  if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) {
    usb_cntr = GetCNTR();
    SetCNTR((usb_cntr | 0x0001);
    Delay_1ms();
    SetCNTR((usb_cntr & 0xFFFE));
  }
有没有以上语句ENDP1的输出在BUSHOUND上是有的,鼠标也随动,但
BUSHOUND上的GetDescriptor等请求则invalid command,也许这是
BUSHOUND的问题。

理论上,在没有配置USB的情况下,让D+拉低对STM32应当不会有影响,对PC端也
不会有太大影响,只是不知道哟有没有时序问题。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 

理论上,拉低D+不会影响PC,这是什么理论

                                 USB协议里哪里允许这样?你的理论基础是什么?
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 

发一个远程唤醒信号试试。

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

13
 

请在操作完FRES位后,调用Joystick_Reset()

这样保证所有寄存器初始化为原始状态。

Joystick_Reset()应该会被复位中断调用,但看门狗复位后,是否你的中断还没有开启?
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表