新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2019-4-11
- 在线时间
- 3 小时
|
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
|
|