
Custom_HID demo 项目里的一个文件: 文件:usb_pwr.c 函数: RESULT PowerOn(void) { uint16_t wRegVal; #if !defined (USE_NUCLEO) /*** cable plugged-in ? ***/ USB_Cable_Config(ENABLE); #endif /*** CNTR_PWDN = 0 ***/ wRegVal = CNTR_FRES; _SetCNTR(wRegVal); /* The following sequence is recommended: 1- FRES = 0 2- Wait until RESET flag = 1 (polling) 3- clear ISTR register */ /*** CNTR_FRES = 0 ***/ wInterrupt_Mask = 0; _SetCNTR(wInterrupt_Mask); /* Wait until RESET flag = 1 (polling) */ while((_GetISTR()&ISTR_RESET) == 1); /*** Clear pending interrupts ***/ SetISTR(0); /*** Set interrupt mask ***/ wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM; _SetCNTR(wInterrupt_Mask); return USB_SUCCESS; } 函数的大概意思是: 1. 设置控制寄存器的FRES位,强制USB复位: /*** CNTR_PWDN = 0 ***/这个注释是啥意思?? wRegVal = CNTR_FRES; _SetCNTR(wRegVal); 2. 然后清除FRES位: /*** CNTR_FRES = 0 ***/ wInterrupt_Mask = 0; _SetCNTR(wInterrupt_Mask);//为啥这里用wInterrupt_Mask变量,上面却用wRegVal? 3. 然后根据代码的意思应该是等待状态寄存器的RESET标志位置位,说明上面的强制复位已经有效: /* Wait until RESET flag = 1 (polling) */ while((_GetISTR()&ISTR_RESET) == 1); 4. 接着手动将RESET标志位清零,手册里有说明必须软件清零 /*** Clear pending interrupts ***/ SetISTR(0); 有没有感觉第3步有问题? while((_GetISTR()&ISTR_RESET) == 1); while((_GetISTR()&ISTR_RESET) == 0);应该是正确的轮询方式;上面那行条件永远不会成立,所以肯定直接就跳过去了,搞不懂这程序是怎么工作起来的,到底有没有复位?? |
STM32F407的高速USB,采用的是虚拟串口方式,VCP驱动有linux系统的吗
STM32H533的USB使用问题
stlink 串口驱动安装前面有叹号软件里无法找到
STM32 usb传输的时延和丢帧问题
STM32H743+USB3300传输采集的数据前几次会丢包问题
STM32 HID和CDC组合设备无法枚举成功
如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????
使用STM32G431做HID Keyboard与CDC符合设备,发现根本做不成,可能是ST提供的库的问题
STM32U073的usb问题。
STM32F103标准库配置的虚拟串口,设备描述符请求失败
usb_reg.h:
第120行:#define ISTR_DOVR (0x4000) /* DMA OVeR/underrun (clear-only bit) */
第148行:#define CNTR_DOVRM (0x4000) /* DMA OVeR/underrun Mask */
什么是DMA? 这跟这里的定义有关系吗?
中英文手册我都查了,没有这个定义。