From cf4dfde49d171a44c31c53ff7cf57a8d3d16465c Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Fri, 13 Oct 2023 20:17:59 +0800 Subject: [PATCH] update quick start, add readthedocs yaml --- .readthedocs.yaml | 35 ++++++++ docs/source/index.rst | 5 +- docs/source/quick_start/bl702.rst | 6 -- docs/source/quick_start/es32.rst | 84 ------------------ docs/source/quick_start/hpm.rst | 6 -- docs/source/quick_start/img/es322.png | Bin 3458 -> 0 bytes docs/source/quick_start/img/es323.png | Bin 6704 -> 0 bytes docs/source/quick_start/img/es324.png | Bin 6754 -> 0 bytes docs/source/quick_start/img/es325.png | Bin 6557 -> 0 bytes .../quick_start/{stm32.rst => index.rst} | 64 ++++++++----- 10 files changed, 79 insertions(+), 121 deletions(-) create mode 100644 .readthedocs.yaml delete mode 100644 docs/source/quick_start/bl702.rst delete mode 100644 docs/source/quick_start/es32.rst delete mode 100644 docs/source/quick_start/hpm.rst delete mode 100644 docs/source/quick_start/img/es322.png delete mode 100644 docs/source/quick_start/img/es323.png delete mode 100644 docs/source/quick_start/img/es324.png delete mode 100644 docs/source/quick_start/img/es325.png rename docs/source/quick_start/{stm32.rst => index.rst} (74%) diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..ed14f4de --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,35 @@ +# Read the Docs configuration file for Sphinx projects +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + # You can also specify other tool versions: + # nodejs: "20" + # rust: "1.70" + # golang: "1.20" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/source/conf.py + # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs + # builder: "dirhtml" + # Fail on all warnings to avoid broken references + # fail_on_warning: true + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - requirements: docs/requirements.txt \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index faa3dac6..5c7f9db4 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -53,10 +53,7 @@ CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 :maxdepth: 1 :caption: 快速上手 - quick_start/bl702 - quick_start/stm32 - quick_start/hpm - quick_start/es32 + quick_start/index quick_start/rt-thread/rtthread quick_start/other_chip diff --git a/docs/source/quick_start/bl702.rst b/docs/source/quick_start/bl702.rst deleted file mode 100644 index 1ae1f8fa..00000000 --- a/docs/source/quick_start/bl702.rst +++ /dev/null @@ -1,6 +0,0 @@ -基于 BL 系列开发指南 -========================= - -BL 系列 USB 的开发主要使用 bl_mcu_sdk,参考 `bl_mcu_sdk `_。 - -USB 的相关应用位于 `examples/usbdev` 和 `examples/usbhost` 目录下,环境搭建完成后,即可编译使用。 \ No newline at end of file diff --git a/docs/source/quick_start/es32.rst b/docs/source/quick_start/es32.rst deleted file mode 100644 index dd1c0ab6..00000000 --- a/docs/source/quick_start/es32.rst +++ /dev/null @@ -1,84 +0,0 @@ -基于 ES32F369 开发指南 -========================= - -ES32F3xx 系列单片机中 USB 外设使用标准的 musb ip,并且拥有 usb device 和 usb host 功能。本章主要介绍如何在东软载波的 ES32F369x 开发板中使用 CherryUSB。 - -在使用之前需要从 essemi 官网下载 `keil 芯片支持包 `_ 并安装, - - -工程样例试用 ------------------------ - -在 CherryUSB demo 目录下已经有主机跟从机的样例,在有板子的情况下,可以先跑工程样例,试用一下。 - -- 进入 MDK-ARM 目录下,双击 `example.uvprojx` 打开工程,选择好调试器后,编译烧录即可。 -- 如果是从机,默认提供的是 cdc acm 的示例,代码烧录以后,将 usb 线插到 板子的丝印为 USB-OTG 口,并接上电脑,按下复位键,电脑便会枚举出一个串口。打开串口,勾选 DTR 可以接收数据,在发送缓冲区填入数据并发送,调试器的串口便可以打印出接收的长度和数据。 -- 如果是主机,则需要一个 usb 母口转接线,并接入相关 usb 设备,就可以进行测试了。比如接上鼠标、U盘、4G 网卡等等。 - -USB Device 移植要点 ------------------------ - -针对自定义的工程移植,需要按照以下步骤: - -- 准备好可以进行调试打印的工程,并且实现 `printf`、 `malloc` 、 `free` 函数(也可以直接勾选 Use microlib 来使用)。 -- 拷贝 CherryUSB 源码到工程里 -- 添加 CherryUSB 源码和头文件路径,其中 `usbd_core.c` 和 `usb_dc_musb.c` 为必须添加项。 -- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径。所以根目录下的文件仅作为参考,不要添加根目录下的头文件。 - -.. figure:: img/es322.png -.. figure:: img/es323.png - -- 实现 `usb_dc_low_level_init` 函数,该函数主要负责 USB 时钟、引脚、中断的初始化。例如 - -.. code-block:: C - - void usb_dc_low_level_init(void) - { - ald_pmu_perh_power_config(PMU_POWER_USB, ENABLE); - ald_cmu_perh_clock_config(CMU_PERH_USB, ENABLE); - ald_cmu_perh_clock_config(CMU_PERH_GPIO, ENABLE); - ald_cmu_usb_clock_config(CMU_USB_CLOCK_SEL_HOSC, CMU_USB_DIV_1); - ald_rmu_reset_periperal(RMU_PERH_USB); - ald_mcu_irq_config(USB_INT_IRQn, 2, 2, ENABLE); - ald_mcu_irq_config(USB_DMA_IRQn, 2, 2, ENABLE); - usb_pin_init(); - } - -- 描述符的注册、class的注册、接口的注册、端点中断的注册。不会的参考 demo 下的 template 。 -- 调用 `usbd_initialize` 初始化 usb 硬件。 -- 正常使用。 - - -USB Host 移植要点 ------------------------ - -针对自定义的工程移植,需要以下步骤: - -- 准备好可以进行调试打印的带 FreeRTOS 或者 RT-Thread 的工程,并且实现 `printf`、 `malloc` 、 `free` 函数(也可以直接勾选 Use microlib 来使用)。 -- 拷贝 CherryUSB 源码到工程里 -- 添加 CherryUSB 源码和头文件路径,其中 `usbh_core.c` 和 `usb_hc_musb.c` 、 osal 下的文件为必须添加项,根据不同的 os 添加对应的文件。 -- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h` ,并添加相应的目录头文件路径。所以根目录下的文件仅作为参考,不要添加根目录下的头文件。 - -.. figure:: img/es324.png -.. figure:: img/es325.png - -- 由于是作为主机,推荐添加所有的 class,功能全面。当然如果只用一个 class ,就添加一个。 -- 实现 `usb_hc_low_level_init` 函数,该函数主要负责 USB 时钟、引脚、中断的初始化。例如 - -.. code-block:: C - - void usb_hc_low_level_init(void) - { - ald_pmu_perh_power_config(PMU_POWER_USB, ENABLE); - ald_cmu_perh_clock_config(CMU_PERH_USB, ENABLE); - ald_cmu_perh_clock_config(CMU_PERH_GPIO, ENABLE); - ald_cmu_usb_clock_config(CMU_USB_CLOCK_SEL_HOSC, CMU_USB_DIV_1); - ald_rmu_reset_periperal(RMU_PERH_USB); - ald_mcu_irq_config(USB_INT_IRQn, 2, 2, ENABLE); - ald_mcu_irq_config(USB_DMA_IRQn, 2, 2, ENABLE); - usb_pin_init(); - } - -- 调用 `usbh_initialize` 初始化 usb 硬件。 -- 此时编译会报错,因为协议栈中为每个 class 都添加了测试 demo,文件在 `usb_host.c` 中,如果不想要,可以直接删除。 -- 正常使用。 \ No newline at end of file diff --git a/docs/source/quick_start/hpm.rst b/docs/source/quick_start/hpm.rst deleted file mode 100644 index 21c41278..00000000 --- a/docs/source/quick_start/hpm.rst +++ /dev/null @@ -1,6 +0,0 @@ -基于 HPM 系列开发指南 -========================= - -HPM 系列 USB 的开发主要使用 hpm_sdk ,参考 `hpm sdk `_。 - -USB 的相关应用位于 `samples/cherryusb` 目录下,环境搭建完成后,即可编译使用。 \ No newline at end of file diff --git a/docs/source/quick_start/img/es322.png b/docs/source/quick_start/img/es322.png deleted file mode 100644 index 09095b524dc9c413bfb2cfe581f55393a946bcd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3458 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 DGxw%R diff --git a/docs/source/quick_start/img/es323.png b/docs/source/quick_start/img/es323.png deleted file mode 100644 index 2712dc503154fc0bf693d5682c294f07b083c2db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6704 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 diff --git a/docs/source/quick_start/img/es324.png b/docs/source/quick_start/img/es324.png deleted file mode 100644 index 59cfcaeca107172199c0be382a07fa267c7ca7d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6754 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