STM32F405 USB HID软硬件参考设计

简介

本文分享一款自己设计的STM32F405 USB HID小板,按照规定的外形尺寸,制作硬件成品,并调通USB HID通信,上位机能与板子进行USB双向通信。

硬件设计

硬件需求如下:

  1. MCU:STM32F405RGT6 (196KB RAM & 1MB Flash)
  2. 提供micro USB
  3. 一个ips 0.96寸TFT显示屏
  4. 提供SWD/UART调试接口
  5. 两个微动按键

软件设计

  1. FreeRTOS版本 V9.0.0

  2. ST USB库版本 V2.1.0

  3. 数据化接收发送流程:

  • 程序中,当USB接收到上位机发送下来的数据时,USB\STM32_USB_Device_Library\Class\hid\src\usbd_hid_core.cUsbHidReceiveComplete会标记数据接收完成, 接收的数据保存在USB_Rx_Buffer中。
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);
}

  1. ips显示屏驱动中,支持汉字显示,字体取模方法:
    STM32F405 USB HID软硬件参考设计_第1张图片
  2. USB测试上位机:
    STM32F405 USB HID软硬件参考设计_第2张图片

成品图片

PCB预览:

STM32F405 USB HID软硬件参考设计_第3张图片
成品图片:
STM32F405 USB HID软硬件参考设计_第4张图片

开源地址

PCB和代码存放在Gitee,欢迎Start:
STM32F405_HID_Borad

[可获得的参考]

  1. FreeRTOS在STM32F405上的移植
  2. USB协议栈的移植
  3. 器件封装、硬件PCB的设计

你可能感兴趣的:(软硬件参考设计,stm32,单片机,arm,pcb工艺)