历史上的今天
今天是:2024年09月12日(星期四)
2018年09月12日 | STM32F4 开发笔记10:USB FS的枚举方法
2018-09-12 来源:eefocus
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();
}
史海拾趣
|
我现在在LPC2478开发板下外部FLASH跑LCD程序,仿真放在中断处,发现一个奇怪的问题。 如果进了中断,LCD_INISTAT的bit[1]一直是1; 如果我在内部flash跑,LCD_INTSTAT的bit[1]就不为1,为0。 内部fl ...… 查看全部问答> |
|
S3C2440 + WinCE5.0,如何使支持SDIO WIFI呢? 我添加了所有与SDIO和WIFI相关的组件,现在能识别WIFI卡但接收不到WIFI信号.Why? 第三方的SDIO NOW是必须的吗?有盗版或试用版SDIO NOW可用吗?… 查看全部问答> |
|
iPod + AM/FM + 闹钟 +显示(LCD && LED) 方案 iPod + AM/FM + 闹钟 +显示(LCD && LED) 方案 a: MCU特性 单芯片,内置4X24 LCD驱动, RTC(实时时钟),LED驱动,,低功耗,电池供电维持时间和LCD时间显示. 采用 dice 工艺, 成本更低. 无需外加 RTC 如1381等, LCD驱 ...… 查看全部问答> |




