OpenEdv-开源电子网

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

STM32F407移植读卡器 只要插USB就死机

[复制链接]

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
发表于 2017-7-12 16:01:06 | 显示全部楼层 |阅读模式
1金钱
移植代码参考的是原子哥的探索者,只是我不用SPI_FLASH而已,只用SD卡。我就直接把原子哥的关于USB方面的移植过来,去除可以选择SPI_Flash部分,然后main做了修改,基本跟USB读卡器这个例程一样,但是只要插USB,单片机死机,然后等几十秒,电脑显示无法识别,然后单片机就一直死机,不管拔不拔USB线,除非硬件重启。重启后单片机又正常跑,只要一插USB就死机,求助。。。。

最佳答案

查看完整内容[请看2#楼]

我这边 也遇到了和楼主 差不多的情况 就是 我使用USB 虚拟串口 的同时 使用SD卡的FFts文件系统,文件系统 总是被虚拟串口 挂掉。 但是 单独运行 其中任意一个都没问题 。。。估计是 共享了 某个资源
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2016-7-29
在线时间
23 小时
发表于 2017-7-12 16:01:07 | 显示全部楼层
我这边 也遇到了和楼主 差不多的情况 就是 我使用USB 虚拟串口 的同时 使用SD卡的FFts文件系统,文件系统 总是被虚拟串口 挂掉。 但是 单独运行 其中任意一个都没问题 。。。估计是 共享了 某个资源
回复

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2017-7-12 16:21:05 | 显示全部楼层
如果方便建议发工程源码,好方便检查
感觉你这个情况是在USB中断函数中调用了初始化SD卡的函数,而SDIO的通信也需要中断,建议先初始化SD卡后再启动USB,USB中断中不要调用SD卡初始化
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-12 16:38:42 | 显示全部楼层
513393302@qq.co 发表于 2017-7-12 16:21
如果方便建议发工程源码,好方便检查
感觉你这个情况是在USB中断函数中调用了初始化SD卡的函数,而SDIO的 ...

好的,我一会传,不是初始化SD卡的原因,我就是在前面已经初始化一次了,甚至文件系统读写都没有问题
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-12 17:37:39 | 显示全部楼层
全是按照原子哥的视频教程跟例子做的,几乎没有任何改动,除了屏蔽SPI_flash,
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-12 17:47:01 | 显示全部楼层
SD卡操作是没有任何问题的,因为我测试过文件系统,可以在SD卡里面做读写,删除操作,求大神解答
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-12 20:36:48 | 显示全部楼层
USB文件就是原子哥的探索者读卡器实验直接复制过来的,SDIO_SD这个是官方的,不过我可以操作,我在另外一个工程中已经实验过文件系统操作SD卡了,在原子哥的USB中有2个读写SD卡函数,我也把这两个函数加入到SDIO_SD里面了。
系统各个C文件.png
移植的USB文件.png
主函数.png
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-12 21:56:52 | 显示全部楼层
经过调试,发现在USBD_CORE.C 里面把 USB_OTG_BSP_EnableInterrupt(pdev);这句话屏蔽了,就不会死机,大概还是经过30S左右,电脑会显示不识别USB设备,不知原因
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-12 22:13:06 | 显示全部楼层
用原子哥原装的例子程序,原封不动,只是在target里面把芯片换跟F407VG,就可以,实际上原子哥的例程是144管脚的IC,我移植的是100管脚的IC,很多还不能用,但是USB做U盘这部分直接没问题,很奇怪,我原封不动复制过去就是没用,求助啊
QQ图片20170712221025.png
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-13 14:17:22 | 显示全部楼层
今天又测试了,即使在原子哥的读卡器源程序上,哪怕到一下LED灯的IO换一下,都会使得USB无法正常工作,很奇怪,要原子哥的程序几乎一点不能动,大神,求解
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-13 14:22:18 | 显示全部楼层
原子哥的源程序中,SPI定义的时候,本来应该定义B口的,用B口的345,然后反而使能了A口的,下面定义的是B口,在这个地方我把A换成B都会使得USB整个程序有问题,反而将错就错没问题,为什么原子哥的程序一点不能动,原子哥,解答一下啊
SPI定义.png
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-13 16:21:04 | 显示全部楼层
现在分别在D+,D-焊接了外部的上拉电阻1.5K,不死机了,电脑很快就会出现识别失败的提示,还是识别不到,继续,现在就希望原子哥能回复一下
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-13 16:54:32 | 显示全部楼层
焊接了外部电阻反而例程都不能正确使用了,所以还是去掉,发现了一个很大的区别,我的SD卡用的是DMA方式,而原子哥的例程中用的是查询方法,不知道是不是这个地方的影响,我用DMA方式是可以操作的,我已经用文件系统读写SD文件验证过,没任何问题,操作好,把SD用读卡器看一下,全部都是好的。不知道会不会是DMA和查询这个地方的影响?
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2014-9-16
在线时间
26 小时
发表于 2017-7-14 09:38:54 | 显示全部楼层
楼主,我这边调试也遇到跟你一模一样的问题。我的解决办法是,第一,SD别用DMA方式,我的DMA中断会导致U盘识别缓慢甚至打不开的情况;第二,把SD_Init()初始化放在USB_Init前面,把USB_Init里面调用的SD_Init()注释掉;然后再看看这样行不行吧。
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-14 10:09:17 | 显示全部楼层
felix 发表于 2017-7-14 09:38
楼主,我这边调试也遇到跟你一模一样的问题。我的解决办法是,第一,SD别用DMA方式,我的DMA中断会导致U盘 ...

谢谢,我今天就试试SD不用DMA,不过还有一点奇怪的是为什么原子哥的程序,我一改就不行,我本来是想,我移植不成功,我就改原子哥的程序,结果一动就跑不起来
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-16 18:22:09 | 显示全部楼层
最终还是在原子哥的程序上改的,不过现在出现个问题,插拔都能识别USB的U盘,但是我的程序会有时候因为插拔会死机
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-16 18:23:14 | 显示全部楼层
死机后还是还是可以继续插拔USB,电脑能识别,但是程序的其他部分就死掉了,不能执行了,包括定时器,不知道为什么
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-7-12
在线时间
24 小时
 楼主| 发表于 2017-7-16 18:28:33 | 显示全部楼层
原子哥的程序SD那地方没有用DMA方面,所以文件操作的时候感觉特别的慢,没有我之前用DMA快,操作1次要几秒钟,很奇怪,以前是无感的
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-3-1
在线时间
11 小时
发表于 2017-8-25 16:02:37 | 显示全部楼层
楼主解决了吗,我做自定义的HID设备,每次只能枚举一次,拔掉后板子就死机,貌似情况很一样
回复

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2020-2-17
在线时间
25 小时
发表于 2020-6-23 17:55:28 | 显示全部楼层
felix 发表于 2017-7-14 09:38
楼主,我这边调试也遇到跟你一模一样的问题。我的解决办法是,第一,SD别用DMA方式,我的DMA中断会导致U盘 ...

顶一下,按你的方法解决了,但不知道为啥
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-1 08:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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