USB HS 实现USB串口功能 F407
这个方案和之前的区别是使用了USB3300芯片,来实现了HS 的功能,绝大部分st的芯片是只有FS的USB,而HS USB 需要外接芯片实现。
HS 高速USB,最高速度 480M,理论最高文件传输速度 40M以上。 (USB3300 貌似达不到最高) FS 全速USB,最高速度12M
由上可知,两个USB的速度有着较大的差别,HS 才是我们实际设备中使用的USB2.0,FS更多是对之前协议的兼容。
1. 硬件连接
这里笔者尝试过购买类似下图的USB的模块,发现此模块飞线和单片机连接,无法成功初始化代码。 网上成功的案例,都是直接接入板子。
笔者使用的是立创开源的项目,在此将连接附上:https://oshwhub.com/emmmhsm/F407VEyu-USB3300hu-xin-ban
此板子在使用的时候遇到一些问题,在此记录
- 因为加工精度的问题,制作后丝印不清晰
- 没有预留DAP的debug口
- 板子上是有源晶振,我不喜欢
后续制作一款更适合debug的,分享出来。
2. CubeMX生成代码
配置debug口
配置外部晶振 ps:部分mcu型号,内部晶振也能正常通讯USB,但笔者这里没有深入研究,直接配置外部晶振
使能USB模块 在这里都是默认的配置,没有修改。
- 配置USB 为串口设备
PS: 需要修改设备名称的话,可以修改这个框出的位置,以及同时修改PID,以及VID,笔者这里就不修改了。
- 展示一下配置到现在的GPIO状态,基本上就是最基础的功能。
这里的外部晶振频率换成了10M,因为板子上焊接的是这个频率的。建议到时候也注意一下,防止晶振频率配置的不正确
工程大概如此,选择自己喜欢的IDE就可以了
3. 编写代码
实现串口输出ABCD,需要更改的部分
C
//1.添加头文件
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usb_device.h"
#include "gpio.h"
#include "usbd_cdc_if.h"
更改main函数
C
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USB_DEVICE_Init();
/* USER CODE BEGIN 2 */
//2.添加数组
unsigned char buff[10] = {"abcd\n\r"};
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//3. 在while循环中添加如下代码
HAL_Delay(1000);
CDC_Transmit_HS(buff,sizeof(buff)); //USB 串口发送数据
}
/* USER CODE END 3 */
}
串口显示的数据
4. 后记
后续板子可以优化的部分
- 增加音频的I2s接口,可以当作音频设备来使用
- 增加SD接口,可以验证U盘的功能
- 增加相机的接口,可以验证摄像头方案
如果后面有时间自己做个类似的板子,调试一下。