OpenEdv-开源电子网

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

求助原子哥,USB读卡器程序初始化失败……

[复制链接]

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
发表于 2015-3-26 13:52:20 | 显示全部楼层 |阅读模式
5金钱
原子哥,我的是103VE,移植的是你的程序,具体操作是看你的书《原子教你玩STM32(库函数)》,整个程序编译的时候通过。由于我用的是TF卡,又参考了论坛里一位前辈关于这方面的程序。SD卡读取正常,可以读取到正确的容量,然后我就借鉴你的USB读卡器程序。
[mw_shl_code=c,true] USB_Interrupts_Config(); printf("USB_Interrupts_Config "); Set_USBClock(); printf("Set_USBClock "); USB_Init(); printf("USB_Init "); delay_ms(1800); while(1) { delay_ms(1); ……[/mw_shl_code]
上面的串口都能打出,但是最后的printf("USB_Init "); 串口是打不出来的
[mw_shl_code=c,true]void USB_Init(void) { pInformation = &Device_Info; pInformation->ControlState = 2; pProperty = &Device_Property; pUser_Standard_Requests = &User_Standard_Requests; printf("User_Standard_Requests "); /* Initialize devices one by one */ pProperty->Init(); printf("Init "); }[/mw_shl_code]
那个
printf("User_Standard_Requests ");可以打出,但是printf("Init ");打不出。各方面的头文件都包含进去了,Init指的是第一个……
[mw_shl_code=c,true]typedef struct _DEVICE_PROP { void (*Init)(void); /* Initialize the device */ void (*Reset)(void); /* Reset routine of this device */ /* Device dependent process after the status stage */ void (*Process_Status_IN)(void); void (*Process_Status_OUT)(void); ……[/mw_shl_code]
原子哥,反复看了程序,不知到为什么初始化这里程序过不去。
我的整个代码编译是通过的。但是这句初始化,貌似程序通不过去……这是为什么???
请原子哥和各位大神帮忙,毕业设计,极度焦虑中……


最佳答案

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

不知道LZ解决了没?我也遇到这个问题。注释  wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM; _SetCNTR(wInterrupt_Mask);和Init函数中的  wInterrupt_Mask = IMR_MSK;  _SetCNTR(wInterrupt_Mask); /* set interrupts mask */ 就可以了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-3-20
在线时间
2 小时
发表于 2015-3-26 13:52:21 | 显示全部楼层
不知道LZ解决了没?我也遇到这个问题。注释  wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM; _SetCNTR(wInterrupt_Mask);和Init函数中的  wInterrupt_Mask = IMR_MSK;
 _SetCNTR(wInterrupt_Mask); /* set interrupts mask */
就可以了。
一分耕耘一分收获
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-3-26 20:05:47 | 显示全部楼层
插上USB线后能不能打印出来呢?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-26 21:03:59 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
前辈,您好!我的USB线和电源线是共用的,不过有设置了USB_Port_set函数的。我看了书,那个初始化pProperty->Init();我知道主要是调用MASS_inti那个函数,那个初始化的程序就是参考官方的,头文件什么的都加上去了,但是那一句pProperty->Init()用串口调试,貌似程序通不过,以至于最后在主函数里,USB初始化的程序也通不过了。不知大神知道是什么原因
PS:之前参考了大神您的程序,调通了TF卡的读取,非常感谢,我刚学习STM32,还有很多要向你们学习!
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-26 21:19:18 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
前辈您好!我试了一下,发现那个pProperty->Init()程序,本来应该调用MASS_inti,然后我在这个程序里面打印一个东西,却打不出来喔,真么办?这个出初始化的程序跟您的还有原子的,以及官方的都一样啊……
心力交瘁中,望大神给小女子指教一二
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-26 22:28:46 | 显示全部楼层
仿真跟踪代码
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-3-27 08:21:44 | 显示全部楼层
回复【4楼】thmcgkl:
---------------------------------
jtag仿真看下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-27 10:40:21 | 显示全部楼层
用JTAG仿真追踪,发现程序执行过 pUser_Standard_Requests = &User_Standard_Requests;就会在串口上打印“User_Standard_Requests  ”   
但是执行过
 pProperty->Init();却不打印东西。于是我就执行进pProperty->Init();里面
[mw_shl_code=c,true] pInformation->ControlState = 2; pProperty = &Device_Property; pUser_Standard_Requests = &User_Standard_Requests; printf("User_Standard_Requests "); /* Initialize devices one by one */ pProperty->Init(); printf("Init ");[/mw_shl_code]
在里面, owerOn();之后,程序就执行不下去了,
[mw_shl_code=c,true]void MASS_init() { /* Update the serial number string descriptor with the data from the unique ID*/ Get_SerialNum(); pInformation->Current_Configuration = 0; /* Connect the device */ PowerOn(); /* Perform basic device initialization operations */ USB_SIL_Init(); bDeviceState = UNCONNECTED; printf("MASS_init "); }[/mw_shl_code]
然后我就进入 owerOn();里面
[mw_shl_code=c,true]RESULT PowerOn(void) { uint16_t wRegVal; /*** cable plugged-in ? ***/ USB_Cable_Config(ENABLE); /*** CNTR_PWDN = 0 ***/ wRegVal = CNTR_FRES; _SetCNTR(wRegVal); /*** CNTR_FRES = 0 ***/ wInterrupt_Mask = 0; _SetCNTR(wInterrupt_Mask); /*** Clear pending interrupts ***/ _SetISTR(0); /*** Set interrupt mask ***/ wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM; _SetCNTR(wInterrupt_Mask); return USB_SUCCESS; }[/mw_shl_code]
可是PowerOn();里每句话都执行得下去呀,执行完这里之后跳出去,回到了上面,就执行PowerOn();下面的函数USB_SIL_Init();最后执行完MASS_init函数,跳出去后执行了串口打印“Init”以及主函数里我早设定好的“USB_Init”。但事实上,整个程序仿真的时候,不进去函数里面,是打印不出“USB_Init”
怎么会这样呢?如果是PowerOn();函数有问题,那么进去里面每个都可以执行得下去,每句函数都检查过,已经定义了的,那问题是出在哪里呢?
请大神帮帮我,我调试了很久,不知道问题出在哪里




回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-28 00:09:23 | 显示全部楼层
回复【6楼】八度空间:
---------------------------------请问前辈能帮忙看一下吗?我重新配置了一次代码,还是不行……无比郁闷中……
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-3-28 01:09:21 | 显示全部楼层
回复【8楼】thmcgkl:
---------------------------------
你的中断服务函数加上没?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-28 13:24:42 | 显示全部楼层
回复【9楼】八度空间:
--------------------------------
被自己蠢哭……中断函数真是没加上去!
不过,前辈,我加上中断函数之后,发现初始化成功了,但是在while函数里面又不行了,仿真追踪,发现USB没有在读或者写,在i++那里循环。当然最终也没看到有有U盘了。
前辈能再帮我一下,你能帮我看看我的程序么?我传上来,您帮我看看行么?我又检查了其他的配置,不知道出错在那里!
不好意思,经验不足,可能有所疏漏没有发现。
非常感谢!
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-28 13:32:41 | 显示全部楼层
真是不好意思,麻烦您有空的时候帮我看一下行么?
可能程序有点乱,不好意思,主要是USB初始化之后的while里面……
非常非常感谢!

女生写程序真是有些难,我是菜鸟,望见谅……

USB读卡器.rar

8.04 MB, 下载次数: 332

回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-3-28 22:27:59 | 显示全部楼层
回复【11楼】thmcgkl:
---------------------------------
我在论坛有发过历程的,战舰板子上面的,你可以参考一下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-29 21:36:15 | 显示全部楼层
回复【12楼】八度空间:
---------------------------------
前辈,真是不好意思!我是参考您那个“战舰USB40测试(SDIO+FLASH)”的程序的,TF卡,我今天又检查了一下这个程序,和您的程序对照,可是还是没发现问题所在。SD卡已读出,按道理,我看了原子之前一个帖子的介绍,在初始化了PoweOn()函数之后,计算机应该能检测出这个设备的。可是现在还是没有显示出U盘啊!仿真追踪能通过初始化那里了。我真是没办法才求您的,我的同学都不会,导师又没空,我自己应该是基础不好,所以一直没弄明白。我想您对这个程序应该很熟,能不能帮我看一下呢?
对不起啊!我真是很抱歉很抱歉啊!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-3-30 21:44:34 | 显示全部楼层
回复【13楼】thmcgkl:
---------------------------------
你用读卡器将卡插电脑上看下能不能读取到U盘?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-30 21:59:51 | 显示全部楼层
回复【14楼】八度空间:
---------------------------------
能啊,前辈,读卡器能读出我的卡,我也试过换卡还是不行……郁闷死,今天又重新建了一个工程,程序跟你的是一样的,也是TF卡,用的是STM32F103VE的一块最小系统板,只是测试这个读卡器程序,SD卡初始化成功能够读出容量和块大小,USB程序仿真追踪在while函数里兜来兜去绕不出去,却不在读和写。可是中断服务程序加上去了,基本跟你的程序无两样。所以不知道自己究竟忽略了什么……
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-3-30 23:59:41 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,初始化之后,仿真追踪,发现程序在while函数里,一直在if(USB_STA != USB_STATUS_REG)和i++;两句话 循环,没进入if里面进行读和写。之前看过你的一篇帖子,一般在USB_init里的MASS_init函数中的PoweOn()后就能在计算机检测到设备了。可是我的程序通过USB_init后在串口打印出“USB_init”。我也加了中断服务程序了。唉,毕设中,纠结几天,没有人可以指教,导师让我自己研究,八度前辈貌似也很忙,我知道原子哥也很忙,不知你有什么高见呢?真的非常紧急,接近崩溃了……真是抱歉
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-31 23:58:43 | 显示全部楼层
回复【16楼】thmcgkl:
---------------------------------
这个我也不太熟。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2015-4-3 23:33:50 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
原子哥,又来打扰你了。呵呵,上次的那个USB读卡器问题,再修改了程序,现在电脑上可以显示U盘了。但是,电脑上显示了可移动的磁盘。在设备管理器上也可以读到那个我的TF卡了,但是却显示: 
使用驱动器H:中的光盘之前需要将其格式化。提示是否将其格式化?
我点击格式化磁盘后,最后显示无法格式化

电脑上可以看到那个磁盘了,可是没有显示容量,而且也打不开。我的TF卡在手机上是可以正常使用的
USB接口的D+已经加了1.5K上拉电阻了

我在论坛上搜索,发现也有人提出这个问题,但是却没有说明解决方法,不知原子哥有何高见呢?

不好意思,多加打扰了!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-3 23:51:15 | 显示全部楼层
回复【18楼】thmcgkl:
---------------------------------
这个估计你的USB和SD卡的底层接口还存在问题,慢慢调试下看看了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2015-5-6 23:31:12 | 显示全部楼层
回复【20楼】luodanoo:
---------------------------------
这方法我试了不行啊,直接电脑里都没显示sd卡和flash磁盘了。我今晚也试了这个实验,不知为什么flash要格式化
回复

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2015-5-6 23:43:40 | 显示全部楼层
请问楼主解决了吗?我今晚使用这个实验也出现了这个问题,无法格式化
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-3-20
在线时间
2 小时
发表于 2015-5-13 14:16:39 | 显示全部楼层
回复【21楼】zzj:
---------------------------------
LZ搞错我的意思了。我的情况是,注释这两个能正常运行。但是USB枚举不成功。后来修改.s文件,就可以了
一分耕耘一分收获
回复

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2015-5-13 15:42:29 | 显示全部楼层
回复【23楼】luodanoo:
---------------------------------
请问你是怎样修改的?现在可以读取打开flash磁盘了吗?
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-3-20
在线时间
2 小时
发表于 2015-5-13 17:08:12 | 显示全部楼层
回复【24楼】zzj:
---------------------------------
把中断表DCD     USBWakeUp_IRQHandler后面的几个中断删了,就可以了。我也是看别人的。我猜测是USB在枚举的时候进入了某个中断出不来了。我也是新手,不知道怎么进一步分析原因。我的不是读flash磁盘,是stm32通过USB和上位机通信。
一分耕耘一分收获
回复

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2015-5-13 17:25:20 | 显示全部楼层
回复【25楼】luodanoo:
---------------------------------
哦哦,好的。谢谢,等一下回去试试
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-3-20
在线时间
2 小时
发表于 2015-5-13 17:32:06 | 显示全部楼层
回复【26楼】zzj:
---------------------------------
不用客气,我也在这个问题上纠结了好久。没有这方面的经验,没有指导,一个人瞎搞的。希望对你有帮助。
一分耕耘一分收获
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2014-3-20
在线时间
2 小时
发表于 2015-6-3 16:33:57 | 显示全部楼层
回复【26楼】zzj:
---------------------------------
你解决这个问题了没?
一分耕耘一分收获
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 15:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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