# STM32F405_HID_Board **Repository Path**: ldsmex/STM32F405_HID_Board ## Basic Information - **Project Name**: STM32F405_HID_Board - **Description**: 使用STM32F405开发一款USB HID小板,软件使用FreeRTOS,移植了完整的USB协议栈,软硬件全开源。 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 3 - **Created**: 2022-06-15 - **Last Updated**: 2025-06-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32F405_HID_Borad ## 简介 本文分享一款自己设计的STM32F405 USB HID小板,按照规定的外形尺寸,制作硬件成品,并调通USB HID通信,上位机能与板子就行USB双向通信。 ## 硬件设计 硬件需求如下: 1. MCU:STM32F405RGT6 (196KB RAM & 1MB Flash) 2. 提供micro USB 3. 一个ips [0.96寸TFT显示屏](https://item.taobao.com/item.htm?spm=a1z09.2.0.0.54852e8dt8NELP&id=563261295211&_u=lmut2tue4c7) 4. 提供SWD/UART调试接口 5. 两个[微动按键](https://item.taobao.com/item.htm?spm=a1z09.2.0.0.54852e8dt8NELP&id=555852849027&_u=lmut2tu86b9) ## 软件设计 1. FreeRTOS版本 `V9.0.0` 2. ST USB库版本 `V2.1.0` 3. 数据化接收发送流程: - 程序中,当前USB接收到上位机发送下来的数据时,`USB\STM32_USB_Device_Library\Class\hid\src\usbd_hid_core.c`中`UsbHidReceiveComplete`会标记数据接收完成, 接收的数据保存在`USB_Rx_Buffer`中。 ``` c static uint8_t USBD_HID_DataOut (void *pdev, uint8_t epnum) { uint16_t USB_Rx_Cnt; if ( epnum != (HID_OUT_EP & 0x0F) ) return USBD_FAIL; /* Get the received data buffer and update the counter */ USB_Rx_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count; /* Prepare Out endpoint to receive next packet */ DCD_EP_PrepareRx(pdev, HID_OUT_EP, (uint8_t*)(USB_Rx_Buffer), HID_OUT_PACKET); /* 标记接收完成 */ UsbHidReceiveComplete=1; return USBD_OK; } ``` - 在用户任务中,可以调用`send_report`将接收到的数据发送给上位机: ``` void send_report(void) { uint8_t report_buffer[64]; /* 将接收的数据再发送给上位机 */ memcpy(report_buffer, USB_Rx_Buffer, 64); USBD_HID_SendReport(&USB_OTG_dev, report_buffer, 64); delay_ms(10); } ``` 4. ips显示屏驱动中支持汉字显示,字体取模方法: ![取模](vx_images/取模软件.png) 5. USB测试上位机: ![USB上位机](vx_images/USB上位机.png) ## 成品图片 ![硬件PCB](vx_images/PCB.png) ![硬件成品](vx_images/实物图.png) ## 可获得的参考 1. FreeRTOS在STM32F405上的移植 2. USB协议栈的移植 3. 器件封装、硬件PCB的设计