打印
[STM32F1]

STM32 USB开发的疑问

[复制链接]
1290|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
czcpx|  楼主 | 2015-7-29 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本人使用STM32F105R8开发一款带USB功能的仪表,遇到一个奇怪的现象。请教一下各位前辈。我是使用IAR,ST-link仿真。
1、程序首次下载全速运行可以成功,USB成功识别并可以进行通信。
2、停止运行重新下载再运行USB就识别不到了,程序停在USB中断中出不来。
3、随后再停止,重新下载运行就又可以。就是反复出现一次可以一次不行。
4、程序中有个TIM5定时出发ADC转换的功能,如果关掉TIM5,则程序就都可以运行,不会出现上述情况。
5、我将USB识别不到的那一次产生的HEX文件用ST Visual Programmer 下载时可以运行的,这应该可以确定程序本身没问题了。
这样的现象我一直想不通时哪里出问题。
请各位前辈指导下,谢谢!
沙发
mmuuss586| | 2015-7-29 12:28 | 只看该作者
如果程序没问题,那通过其它下载方式应该也都可以啊;

程序开始运行后,都延时一段时间,再初始化USB部分;

使用特权

评论回复
板凳
czcpx|  楼主 | 2015-7-30 15:27 | 只看该作者
感谢大家的回复。我查找到下面的资料,感觉可能跟这个有些关系,不过我写了TIM的DeInit,并没有什么卵用。然而找不到有USB的DeInit。问题还是没解决,郁闷。
在调试那些可以在CPU不干预的时候自动运行的模块时,
或在调试低功耗模式的程序时,往往碰到重新下载程序失
败、调试器不能停止CPU运行等问题。
例如:定时器,DMA模块,ADC的连续转换模式等
这个问题的根源是:
调试器需要在RAM执行一段程序,对Flash进行擦写操作,如果不
停止这些自动运行的模块,它们会干扰程序在RAM中的执行,致
使下载失败。
低功耗是通过停止CPU的时钟而实现,JTAG调试是通过与CPU的
通信实现,停止了CPU的时钟致使调试器会失去与CPU的通信。
解决办法:
1. 退出调试状态时或main()开始时执行DeInit(),或
2. 下载程序或进入调试前,手工做硬件复位,或
3. 进入main()后,推迟启动自动运行的模块,或
4. 进入main()后,通过外设复位寄存器执行外设
复位并推迟启动相应外设

使用特权

评论回复
地板
dobinIce| | 2015-7-31 16:54 | 只看该作者
兄弟你好,可以向你请教几个关于STM32 USB问题不?

使用特权

评论回复
5
Thor9| | 2015-8-2 22:42 | 只看该作者
进入main()后,推迟启动自动运行的模块

使用特权

评论回复
6
pattywu| | 2015-8-3 00:16 | 只看该作者
肯定是进入低功耗了。

ST的USB库,是有这个毛病。不操作USB设备,ST的USB库就启用低功耗模式。然后,就没有然后了。^_^
要么重新上电,要么远程唤醒USB设备。

在USB的库文件里面找"__WFI()",并这个注释掉,就可以了。

使用特权

评论回复
7
FireRiver9| | 2015-8-4 09:41 | 只看该作者
低功耗是通过停止CPU的时钟而实现,JTAG调试是通过与CPU的
通信实现

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝