使用STM32CubeMX配置HS USB。
由于STM32F407内部只有FS USB PHY(全速),若要实现HS USB则需要通过ULPI接口外接一个HS USB PHY,虽然在STM32CubeMX中配置HS USB时可以选用内置PHY,但是内置PHY只能达到FS USB(全速)的速度。
此处使用的是USB3300,因为在淘宝上只有这一款= =。
STM32F407ZG | USB3300 |
USB_OTG_HS_ULPI_D0 | DATA0 |
USB_OTG_HS_ULPI_D1 | DATA1 |
USB_OTG_HS_ULPI_D2 | DATA2 |
USB_OTG_HS_ULPI_D3 | DATA3 |
USB_OTG_HS_ULPI_D4 | DATA4 |
USB_OTG_HS_ULPI_D5 | DATA5 |
USB_OTG_HS_ULPI_D6 | DATA6 |
USB_OTG_HS_ULPI_D7 | DATA7 |
USB_OTG_HS_ULPI_STP | STP |
USB_OTG_HS_ULPI_NXT | NXT |
USB_OTG_HS_ULPI_DIR | DIR |
USB_OTG_HS_ULPI_CK | CLK |
RST | |
GND | GND |
3.3V | 3.3V |
5V |
之前买的一块USB3300调试过程中莫名其妙的就烧了,研究了一下微雪的那套板子的原理图之后,发现USB3300模块的5V是连到两个USB接口的VBus的,因为此处主要作为USB Device,所以不能再给5V供电。
配置STM32CubeMX:
都保持默认的就行,注意要改一下:
生成工程,编译,烧录,安装STM32虚拟串口驱动,一切顺利的话就可以在串口助手中看到一个虚拟串口。
而且选择的波特率无论是啥都能正常接收数据(不知道为什么)。
在main.c中添加:
需要包含usbd_cdc_if.h 以使用CDC_Transmit_HS(uint8_t* Buf, uint16_t Len);函数来设置数据起始地址和长度,随后USB中断将自动将数据拷贝到发送缓冲区,完成数据的发送。
/* USER CODE BEGIN Includes */
#include "usbd_cdc_if.h"
/* USER CODE END Includes */
uint8_t data[1024];
for(uint16_t i=0;i<1024;i++)
{
data[i]=i%10+0x30;
}
data[1023]='\n';
CDC_Transmit_HS(data,1024);