-
- -
-

RT-Thread based Software Package Development Guide

-

中文版

-

To use CherryUSB package, you need to select it in the RT-Thread package manager. The specific path is as follows:

-
-> RT-Thread online packages
-    -> system packages
-        --- CherryUSB: tiny and portable USB stack for embedded system with USB IP
-
-            CherryUSB Options  ---->
-                    USB Speed (FS)  --->
-                    [*] Enable usb device mode
-                    [*]   Enable usb cdc acm device
-                    [ ]   Enable usb hid device
-                    [ ]   Enable usb dfu device
-                    [ ]   Enable usb msc device
-                    [ ]   Enable usb hub device
-                    [ ]   Enable usb audio device
-                    [ ]   Enable usb video device
-
-            Version (latest)  --->
-
-
-
-

Based ON STM32 Platform

-

Please note that stm32 series have two usb ip. For usb ip, like stm32f0、stm32f1、stm32f3, for usb otg ip(as we know it is from synopsys),like stm32f4、stm32f7 and so on.

-
-

Use USB Device

-
    -
  • Firstly,you should have a bsp project,and then go to board\CubeMX_Config directory, open file that suffix name with .ioc in STM32CubeMX.

  • -
  • Enable USB or USB_OTG_FS or USB_OTG_HS in Connectivity List,enable USB IRQ in NVIC Setting.

  • -
-

STM32CubeMX USB setting

-
    -
  • Enable USB Clock for 48Mhz in Clock configuration.

  • -
-

STM32CubeMX USB clock

-
    -
  • Generate code.

  • -
  • Copy SystemClock_Config into board.c.

  • -
  • ~~Copy MX_USB_OTG_FS_PCD_Init or MX_USB_OTG_HS_PCD_Init into main.c if you use usb_dc_hal.c.Also, USB Irq from it.c needs the same.~~

  • -
  • Implement usb_dc_low_level_init and copy codes in from HAL_PCD_MspInit.

  • -
-
void usb_dc_low_level_init(void)
-{
-    /* Peripheral clock enable */
-    __HAL_RCC_USB_CLK_ENABLE();
-    /* USB interrupt Init */
-    HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0);
-    HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
-
-}
-
-
-
    -
  • Implement printf or modify with rt_kprintf in usb_utils.h, usb stack needs.

  • -
  • Now we can call some functions provided by usb_stack.Your should register descriptors、interfaces and endpoint callback firstly, and then call usb_dc_init. Example is as follows:

  • -
-
int main(void)
-{
-    extern void cdc_init(void);
-    cdc_init();
-    usb_dc_init();
-    while (1)
-    {
-        uint8_t data_buffer[10] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35 };
-        usbd_ep_write(0x81, data_buffer, 10, NULL);
-        rt_thread_mdelay(500);
-    }
-}
-
-
- -
-
-

CDC Demo Demonstration

-

CDC Demo

-
-
-

Video manual

-

If you have problem from steps above, you can see this video:Use USB Stack in RT-Thread package manager

-
-
-
- - -
- -