单片机型号:STM32F401
FS是Full Speed的意思,指全速USB设备,在电路设计时,通过在DP接1.5K上拉电阻到电源的方法告知主机为全速USB设备,但是在具体使用时,还有问题存在,就是当单片机复位后,主机端虽然还能辨认当前USB设备,但是不能够直接使用,其原因在于USB设备重新启动后,需要完成一个枚举过程,以通知主机。
枚举的具体电路如下图所示,其原理很简单,系统上电后将DE引脚拉高,待USB初始化完毕后,将DE引脚拉低即可。
具体的头文件程序代码如下,建立DE引脚类,并在CUSB类中具体声明。
#ifndef USB_H_
#define USB_H_
#ifdef __cplusplus
extern "C"{
class CUsbDataEnablePin:public CIO_Output
{
public:
CUsbDataEnablePin(void);
};
class CUSB
{
public:
uint8_t Buffer[64];
uint32_t Length;
boolean bFlag;
CUsbDataEnablePin UsbDataEnablePin;
public:
CUSB(void);
void SendData(uint8_t* pData, uint32_t u32_Size);
void ReceiveData(uint8_t* pData, uint32_t u32_Size);
boolean IsReceivedData(void);
uint8_t CalCheckSum(uint8_t* pData, uint8_t Length);
};
void USB_InterruptFunction(uint8_t* pBuffer, uint32_t* pLength);
}
#endif
#endif
CPP文件相关代码如下,实例化DE引脚,指明端口和引脚号,在初始化时,先置高,再拉低。
CUsbDataEnablePin::CUsbDataEnablePin(void):CIO_Output(PORTA, PIN10, high) {}
CUSB::CUSB(void)
{
MX_USB_DEVICE_Init();
this->UsbDataEnablePin.Set_1();
Target.Delayms(10);
this->UsbDataEnablePin.Set_0();
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』