打印
[应用相关]

USB FS的枚举方法(转载)

[复制链接]
753|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FS是Full Speed的意思,指全速USB设备,在电路设计时,通过在DP接1.5K上拉电阻到电源的方法告知主机为全速USB设备,但是在具体使用时,还有问题存在,就是当单片机复位后,主机端虽然还能辨认当前USB设备,但是不能够直接使用,其原因在于USB设备重新启动后,需要完成一个枚举过程,以通知主机。

    枚举的具体电路如下图所示,其原理很简单,系统上电后将DE引脚拉高,待USB初始化完毕后,将DE引脚拉低即可。




使用特权

评论回复
沙发
heimaojingzhang|  楼主 | 2019-6-18 13:23 | 只看该作者
   具体的头文件程序代码如下,建立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


使用特权

评论回复
板凳
heimaojingzhang|  楼主 | 2019-6-18 13:24 | 只看该作者
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();
}


使用特权

评论回复
地板
wakayi| | 2019-7-8 11:51 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
5
wowu| | 2019-7-8 11:55 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
6
木木guainv| | 2019-7-8 11:58 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

4142

帖子

4

粉丝