OpenEdv-开源电子网

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

原子之STM32 MINI版USB通信“怪异”设计和试图解决之困......

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-4-11
在线时间
3 小时
发表于 2019-8-17 10:43:46 | 显示全部楼层 |阅读模式
1金钱

购买了MINI板,业余研究USB达2月有余。发现在WIN10下,虚拟串口程序接入WIN10,提示USB设备不可识别,以下是解决方案探索之路:
看了一下硬件电路,发现是D+有固定的上拉电阻,估计系统一上电后马上上拉,系统来不及初始化(。原子哥曾答疑讲,用 USB_Port_Set可以解决这个问题,只要系统快速初始化会没事,但在WIN10的确 不行。我又不想动手改硬件,所以用一周的时间来找方法。
1. 基础发现:调试和研究发现,上电后再手动RESET后可以正常工作,在调试状态下亦可以正常工作。
2. 解决方案
2.1 试图先判断连接状态,再用软复位命令。
奇怪现象:不可识别,while()不执行,main()程序while之前的初始化程序似乎也不执行。
判断是否执行的方法:用NRF24L01发送,用串口等不行,因为这些口有电源,导致与调试或RESET类似结果,不真实。
2.2 用WINUSB驱动
又花了3天,研究用WINUSB是否可能,WINUSB调通了,但情况调试或RESET类情况下可以,直接上电不行。
3. 求助问题
为什么一上电,因为USB不识别,main()为何不执行?即使把与USB的程序注释掉,main()还是不执行?没有办法用调试,因为一调试的话,USB就可以工作了。
===============
以下是程序源码的结构:
int main(void)
{


delay_init();       //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(115200);   //串口初始化为9600  
USB_Port_Set(0);  //USB先断开
delay_ms(70);
USB_Port_Set(1); //USB再次连接
  Set_USBClock();   
  USB_Interrupts_Config();   
  USB_Init();
LED_Init();      //初始化与LED连接的硬件接口
  KEY_Init();    //按键初始化

SPI_SetSpeed(SPI_BaudRatePrescaler_8,1); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)   
SPI_SetSpeed(SPI_BaudRatePrescaler_4,2); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)   
NRF24L01_Init();     //初始化NRF24L01  


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-4-11
在线时间
3 小时
 楼主| 发表于 2019-8-17 22:54:52 | 显示全部楼层
补充信息: 动手加上了三极管,在USB初始化后再进行上拉,结果还是一样。进一步研究发现,板子是因为上电后并不执行main()函数。有高手知道为什么吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-8-18 01:58:54 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 21:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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