From cc5af9a72d91b71dbdf5a380966d8d1e9f24d9fc Mon Sep 17 00:00:00 2001 From: liYangYang <941843540@qq.com> Date: Fri, 2 Sep 2022 11:06:44 +0800 Subject: [PATCH] =?UTF-8?q?[bsp][stm32]=E6=B7=BB=E5=8A=A0=E7=A1=AC?= =?UTF-8?q?=E7=9F=B3=E7=A7=91=E6=8A=80YS-F1Pro=E5=BC=80=E5=8F=91=E6=9D=BF?= =?UTF-8?q?=20(#6364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stm32f10x/board/CubeMX_Config/Inc/main.h | 2 +- .../CubeMX_Config/Inc/stm32f1xx_hal_conf.h | 56 +- .../board/CubeMX_Config/Inc/stm32f1xx_it.h | 2 +- .../board/CubeMX_Config/Src/stm32f1xx_it.c | 4 +- bsp/stm32/stm32f103-ys-f1pro/.config | 682 ++++ bsp/stm32/stm32f103-ys-f1pro/.gitignore | 42 + bsp/stm32/stm32f103-ys-f1pro/Kconfig | 22 + bsp/stm32/stm32f103-ys-f1pro/README.md | 112 + bsp/stm32/stm32f103-ys-f1pro/SConscript | 15 + bsp/stm32/stm32f103-ys-f1pro/SConstruct | 60 + .../applications/SConscript | 11 + .../stm32f103-ys-f1pro/applications/main.c | 30 + .../board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CubeMX_Config.ioc | 114 + .../board/CubeMX_Config/Inc/main.h | 69 + .../CubeMX_Config/Inc/stm32f1xx_hal_conf.h | 391 +++ .../board/CubeMX_Config/Inc/stm32f1xx_it.h | 67 + .../CubeMX_Config/Src/stm32f1xx_hal_msp.c | 154 + .../board/CubeMX_Config/Src/stm32f1xx_it.c | 202 ++ bsp/stm32/stm32f103-ys-f1pro/board/Kconfig | 45 + bsp/stm32/stm32f103-ys-f1pro/board/SConscript | 35 + bsp/stm32/stm32f103-ys-f1pro/board/board.c | 50 + bsp/stm32/stm32f103-ys-f1pro/board/board.h | 50 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 156 + .../board/linker_scripts/link.sct | 15 + .../stm32f103-ys-f1pro/figures/board.jpg | Bin 0 -> 95683 bytes bsp/stm32/stm32f103-ys-f1pro/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32f103-ys-f1pro/project.ewp | 2312 ++++++++++++++ bsp/stm32/stm32f103-ys-f1pro/project.eww | 10 + bsp/stm32/stm32f103-ys-f1pro/project.uvopt | 162 + bsp/stm32/stm32f103-ys-f1pro/project.uvoptx | 204 ++ bsp/stm32/stm32f103-ys-f1pro/project.uvproj | 842 +++++ bsp/stm32/stm32f103-ys-f1pro/project.uvprojx | 845 +++++ bsp/stm32/stm32f103-ys-f1pro/rtconfig.h | 198 ++ bsp/stm32/stm32f103-ys-f1pro/rtconfig.py | 184 ++ bsp/stm32/stm32f103-ys-f1pro/template.ewp | 2032 ++++++++++++ bsp/stm32/stm32f103-ys-f1pro/template.eww | 10 + bsp/stm32/stm32f103-ys-f1pro/template.uvopt | 162 + bsp/stm32/stm32f103-ys-f1pro/template.uvoptx | 204 ++ bsp/stm32/stm32f103-ys-f1pro/template.uvproj | 407 +++ bsp/stm32/stm32f103-ys-f1pro/template.uvprojx | 415 +++ 42 files changed, 13217 insertions(+), 32 deletions(-) create mode 100644 bsp/stm32/stm32f103-ys-f1pro/.config create mode 100644 bsp/stm32/stm32f103-ys-f1pro/.gitignore create mode 100644 bsp/stm32/stm32f103-ys-f1pro/Kconfig create mode 100644 bsp/stm32/stm32f103-ys-f1pro/README.md create mode 100644 bsp/stm32/stm32f103-ys-f1pro/SConscript create mode 100644 bsp/stm32/stm32f103-ys-f1pro/SConstruct create mode 100644 bsp/stm32/stm32f103-ys-f1pro/applications/SConscript create mode 100644 bsp/stm32/stm32f103-ys-f1pro/applications/main.c create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_it.h create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_it.c create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/Kconfig create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/SConscript create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/board.c create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/board.h create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f103-ys-f1pro/figures/board.jpg create mode 100644 bsp/stm32/stm32f103-ys-f1pro/project.ewd create mode 100644 bsp/stm32/stm32f103-ys-f1pro/project.ewp create mode 100644 bsp/stm32/stm32f103-ys-f1pro/project.eww create mode 100644 bsp/stm32/stm32f103-ys-f1pro/project.uvopt create mode 100644 bsp/stm32/stm32f103-ys-f1pro/project.uvoptx create mode 100644 bsp/stm32/stm32f103-ys-f1pro/project.uvproj create mode 100644 bsp/stm32/stm32f103-ys-f1pro/project.uvprojx create mode 100644 bsp/stm32/stm32f103-ys-f1pro/rtconfig.h create mode 100644 bsp/stm32/stm32f103-ys-f1pro/rtconfig.py create mode 100644 bsp/stm32/stm32f103-ys-f1pro/template.ewp create mode 100644 bsp/stm32/stm32f103-ys-f1pro/template.eww create mode 100644 bsp/stm32/stm32f103-ys-f1pro/template.uvopt create mode 100644 bsp/stm32/stm32f103-ys-f1pro/template.uvoptx create mode 100644 bsp/stm32/stm32f103-ys-f1pro/template.uvproj create mode 100644 bsp/stm32/stm32f103-ys-f1pro/template.uvprojx diff --git a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/main.h b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/main.h index d956854a25..eca6229e5d 100644 --- a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/main.h +++ b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/main.h @@ -7,7 +7,7 @@ ****************************************************************************** ** This notice applies to any and all portions of this file * that are not between comment pairs USER CODE BEGIN and - * USER CODE END. Other portions of this file, whether + * USER CODE END. Other portions of this file, whether * inserted by the user or by software development tools * are owned by their respective copyright owners. * diff --git a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h index 51cc85e1fa..fa2f255f2d 100644 --- a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h +++ b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h @@ -30,7 +30,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** - */ + */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __STM32F1xx_HAL_CONF_H @@ -45,10 +45,10 @@ /* ########################## Module Selection ############################## */ /** - * @brief This is the list of modules to be used in the HAL driver + * @brief This is the list of modules to be used in the HAL driver */ - -#define HAL_MODULE_ENABLED + +#define HAL_MODULE_ENABLED /*#define HAL_ADC_MODULE_ENABLED */ /*#define HAL_CRYP_MODULE_ENABLED */ /*#define HAL_CAN_MODULE_ENABLED */ @@ -95,9 +95,9 @@ /** * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). + * (when HSE is used as system clock source, directly or through the PLL). */ -#if !defined (HSE_VALUE) +#if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ @@ -108,7 +108,7 @@ /** * @brief Internal High Speed oscillator (HSI) value. * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). + * (when HSI is used as system clock source, directly or through the PLL). */ #if !defined (HSI_VALUE) #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ @@ -117,7 +117,7 @@ /** * @brief Internal Low Speed oscillator (LSI) value. */ -#if !defined (LSI_VALUE) +#if !defined (LSI_VALUE) #define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ #endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz The real value may vary depending on the variations @@ -141,15 +141,15 @@ /* ########################### System Configuration ######################### */ /** * @brief This is the HAL system configuration section - */ -#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ + */ +#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ #define USE_RTOS 0 #define PREFETCH_ENABLE 1 /* ########################## Assert Selection ############################## */ /** - * @brief Uncomment the line below to expanse the "assert_param" macro in the + * @brief Uncomment the line below to expanse the "assert_param" macro in the * HAL drivers code */ /* #define USE_FULL_ASSERT 1U */ @@ -166,7 +166,7 @@ #define MAC_ADDR4 0 #define MAC_ADDR5 0 -/* Definition of the Ethernet driver buffers size and count */ +/* Definition of the Ethernet driver buffers size and count */ #define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ #define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ #define ETH_RXBUFNB ((uint32_t)8) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ @@ -174,9 +174,9 @@ /* Section 2: PHY configuration section */ -/* DP83848_PHY_ADDRESS Address*/ +/* DP83848_PHY_ADDRESS Address*/ #define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ #define PHY_RESET_DELAY ((uint32_t)0x000000FF) /* PHY Configuration delay */ #define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF) @@ -188,7 +188,7 @@ #define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ #define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ - + #define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ #define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ #define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ @@ -203,7 +203,7 @@ #define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ #define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ #define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - + /* Section 4: Extended PHY Registers */ #define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ @@ -212,7 +212,7 @@ /* Includes ------------------------------------------------------------------*/ /** - * @brief Include module's header file + * @brief Include module's header file */ #ifdef HAL_RCC_MODULE_ENABLED @@ -226,15 +226,15 @@ #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f1xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ - + #ifdef HAL_DMA_MODULE_ENABLED #include "stm32f1xx_hal_dma.h" #endif /* HAL_DMA_MODULE_ENABLED */ - + #ifdef HAL_ETH_MODULE_ENABLED #include "stm32f1xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - +#endif /* HAL_ETH_MODULE_ENABLED */ + #ifdef HAL_CAN_MODULE_ENABLED #include "stm32f1xx_hal_can.h" #endif /* HAL_CAN_MODULE_ENABLED */ @@ -293,11 +293,11 @@ #ifdef HAL_PCCARD_MODULE_ENABLED #include "stm32f1xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ +#endif /* HAL_PCCARD_MODULE_ENABLED */ #ifdef HAL_SD_MODULE_ENABLED #include "stm32f1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ +#endif /* HAL_SD_MODULE_ENABLED */ #ifdef HAL_MMC_MODULE_ENABLED #include "stm32f1xx_hal_mmc.h" @@ -305,7 +305,7 @@ #ifdef HAL_NAND_MODULE_ENABLED #include "stm32f1xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ +#endif /* HAL_NAND_MODULE_ENABLED */ #ifdef HAL_SPI_MODULE_ENABLED #include "stm32f1xx_hal_spi.h" @@ -341,8 +341,8 @@ #ifdef HAL_HCD_MODULE_ENABLED #include "stm32f1xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - +#endif /* HAL_HCD_MODULE_ENABLED */ + /* Exported macro ------------------------------------------------------------*/ #ifdef USE_FULL_ASSERT @@ -350,7 +350,7 @@ * @brief The assert_param macro is used for function's parameters check. * @param expr: If expr is false, it calls assert_failed function * which reports the name of the source file and the source - * line number of the call that failed. + * line number of the call that failed. * If expr is true, it returns no value. * @retval None */ diff --git a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_it.h b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_it.h index 634e9d2a98..4f1426f05e 100644 --- a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_it.h +++ b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Inc/stm32f1xx_it.h @@ -39,7 +39,7 @@ #ifdef __cplusplus extern "C" { -#endif +#endif /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ diff --git a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Src/stm32f1xx_it.c b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Src/stm32f1xx_it.c index 8515d30cd2..dc60acc974 100644 --- a/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Src/stm32f1xx_it.c +++ b/bsp/stm32/libraries/templates/stm32f10x/board/CubeMX_Config/Src/stm32f1xx_it.c @@ -47,7 +47,7 @@ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ - + /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ @@ -77,7 +77,7 @@ extern UART_HandleTypeDef huart1; /* USER CODE END EV */ /******************************************************************************/ -/* Cortex-M3 Processor Interruption and Exception Handlers */ +/* Cortex-M3 Processor Interruption and Exception Handlers */ /******************************************************************************/ /** * @brief This function handles Non maskable interrupt. diff --git a/bsp/stm32/stm32f103-ys-f1pro/.config b/bsp/stm32/stm32f103-ys-f1pro/.config new file mode 100644 index 0000000000..0bb4726c3b --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/.config @@ -0,0 +1,682 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_TINY_FFS is not set +# CONFIG_RT_KPRINTF_USING_LONGLONG is not set +CONFIG_RT_DEBUG=y +# CONFIG_RT_DEBUG_COLOR is not set +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x50000 +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M3=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +# CONFIG_RT_USING_DFS is not set +# CONFIG_RT_USING_FAL is not set +# CONFIG_RT_USING_LWP is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# C/C++ and POSIX layer +# +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RT_LINK is not set +# CONFIG_RT_USING_VBUS is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LWIP is not set +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_EZ_IOT_OS is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set + +# +# PainterEngine: A cross-platform graphics application framework written in C language +# +# CONFIG_PKG_USING_PAINTERENGINE is not set +# CONFIG_PKG_USING_PAINTERENGINE_AUX is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# CONFIG_PKG_USING_RTDUINO is not set +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_RTT_ESP_IDF is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set + +# +# kendryte-sdk: Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set + +# +# miscellaneous packages +# + +# +# project laboratory +# + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F1=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F103ZE=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +CONFIG_BSP_UART1_RX_USING_DMA=y +# CONFIG_BSP_USING_UDID is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32f103-ys-f1pro/.gitignore b/bsp/stm32/stm32f103-ys-f1pro/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.bin +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +packages/ +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h diff --git a/bsp/stm32/stm32f103-ys-f1pro/Kconfig b/bsp/stm32/stm32f103-ys-f1pro/Kconfig new file mode 100644 index 0000000000..7a400db91f --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/Kconfig @@ -0,0 +1,22 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" + diff --git a/bsp/stm32/stm32f103-ys-f1pro/README.md b/bsp/stm32/stm32f103-ys-f1pro/README.md new file mode 100644 index 0000000000..4d4904e881 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/README.md @@ -0,0 +1,112 @@ +# STM32F103 硬石科技YS-F1Pro 开发板 BSP 说明 + +## 简介 + +本文档为 硬石科技YS-F1Pro 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +硬石科技YS-F1Pro,资源丰富,接口多,功能强大,性价比高,资料全,外观炫酷,布局人性化,配件丰富,配件的接口丰富,是学习嵌入式的好开发板 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32F103ZET6,主频 72MHz,512KB FLASH ,64KB RAM +- 外部 RAM:IS62WV51216BLL-55LI(1M) +- 外部 FLASH:W25Q128(128MB)、EEPROM(24c02) +- 常用外设 + - LED:3个,LED1(蓝色,PB0),LED2(蓝色,PG6),LED3(蓝色,PG7) + - 按键:2个,KEY1(兼具唤醒功能,PA0),KEY2(PC13) +- 常用接口:USB 转串口、SD 卡接口、以太网接口、LCD 接口、USB SLAVE等 +- 调试接口,板载的 ST-LINK SWD 下载 + +开发板更多详细信息请参考[硬石科技F103控制板介绍](http://www.ing10.cn/product.php?id=16) + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB 转串口 | 支持 | UART1 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PG15 ---> PIN: 0, 1...111 | +| UART | 支持 | UART1 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-Link 仿真器下载程序,在通过 ST-Link 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,D1(LED1)闪烁 。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.0.0 build Sep 1 2022 16:42:09 + 2006 - 2022 Copyright by RT-Thread team +msh > +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1 的功能,如果需使用 SD 卡、Flash 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 在使用终端工具如:PuTTy、XShell 时,会出现系统不能启动的问题,推荐使用串口调试助手如:sscom; +- 目前本BSP正在开发中,更多功能后期会逐渐补上; + +## 联系人信息 + +维护人: + +- [liYony](https://github.com/liYony),邮箱: + diff --git a/bsp/stm32/stm32f103-ys-f1pro/SConscript b/bsp/stm32/stm32f103-ys-f1pro/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f103-ys-f1pro/SConstruct b/bsp/stm32/stm32f103-ys-f1pro/SConstruct new file mode 100644 index 0000000000..870efaf708 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/SConstruct @@ -0,0 +1,60 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32F1xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f103-ys-f1pro/applications/SConscript b/bsp/stm32/stm32f103-ys-f1pro/applications/SConscript new file mode 100644 index 0000000000..ca2395451a --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f103-ys-f1pro/applications/main.c b/bsp/stm32/stm32f103-ys-f1pro/applications/main.c new file mode 100644 index 0000000000..adf981c8b0 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/applications/main.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-09-01 liYony first version + */ + +#include +#include +#include + +/* defined the LED1 pin: PB0 */ +#define LED1_PIN GET_PIN(B, 0) + +int main(void) +{ + /* set LED0 pin mode to output */ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + + while (1) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..77ff38303d --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_tim_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xe.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f1xx_it.c;..\Src\stm32f1xx_hal_msp.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\\Src\system_stm32f1xx.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_tim_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\\Src\system_stm32f1xx.c;;; +HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_HAL_DRIVER;STM32F103xE;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +HeaderPath=..\Inc +HeaderFiles=stm32f1xx_it.h;stm32f1xx_hal_conf.h;main.h; +SourcePath=..\Src +SourceFiles=stm32f1xx_it.c;stm32f1xx_hal_msp.c;main.c; + diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..b3c0a69064 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,114 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.CPN=STM32F103ZET6 +Mcu.Family=STM32F1 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IPNb=4 +Mcu.Name=STM32F103Z(C-D-E)Tx +Mcu.Package=LQFP144 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=OSC_IN +Mcu.Pin3=OSC_OUT +Mcu.Pin4=PA9 +Mcu.Pin5=PA10 +Mcu.Pin6=PA13 +Mcu.Pin7=PA14 +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F103ZETx +MxCube.Version=6.6.1 +MxDb.Version=DB.6.0.60 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +OSC_IN.Mode=HSE-External-Oscillator +OSC_IN.Signal=RCC_OSC_IN +OSC_OUT.Mode=HSE-External-Oscillator +OSC_OUT.Signal=RCC_OSC_OUT +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F103ZETx +ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.8.4 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true +RCC.ADCFreqValue=36000000 +RCC.AHBFreq_Value=72000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV2 +RCC.APB1Freq_Value=36000000 +RCC.APB1TimFreq_Value=72000000 +RCC.APB2Freq_Value=72000000 +RCC.APB2TimFreq_Value=72000000 +RCC.FCLKCortexFreq_Value=72000000 +RCC.FSMCFreq_Value=72000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=72000000 +RCC.I2S2Freq_Value=72000000 +RCC.I2S3Freq_Value=72000000 +RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FSMCFreq_Value,FamilyName,HCLKFreq_Value,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=72000000 +RCC.PLLMCOFreq_Value=36000000 +RCC.PLLMUL=RCC_PLL_MUL9 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.SDIOFreq_Value=72000000 +RCC.SDIOHCLKDiv2FreqValue=36000000 +RCC.SYSCLKFreq_VALUE=72000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.TimSysFreq_Value=72000000 +RCC.USBFreq_Value=72000000 +RCC.VCOOutput2Freq_Value=8000000 +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..d4916cf7c2 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f1xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h new file mode 100644 index 0000000000..a0fcf27f57 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_hal_conf.h @@ -0,0 +1,391 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_HAL_CONF_H +#define __STM32F1xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED + /*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CAN_LEGACY_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_CORTEX_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_DMA_MODULE_ENABLED */ +/*#define HAL_ETH_MODULE_ENABLED */ +/*#define HAL_FLASH_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_PCCARD_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_PWR_MODULE_ENABLED */ +/*#define HAL_RCC_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_SDRAM_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ + +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature. */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE 3300U /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority (lowest by default) */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB 8U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY 0x000000FFU +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY 0x00000FFFU + +#define PHY_READ_TO 0x0000FFFFU +#define PHY_WRITE_TO 0x0000FFFFU + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED +#include "stm32f1xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +#include "stm32f1xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +#include "stm32f1xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED +#include "stm32f1xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED +#include "stm32f1xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED +#include "stm32f1xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "Legacy/stm32f1xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED +#include "stm32f1xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +#include "stm32f1xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +#include "stm32f1xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +#include "stm32f1xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED +#include "stm32f1xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +#include "stm32f1xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED +#include "stm32f1xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED +#include "stm32f1xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED +#include "stm32f1xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED +#include "stm32f1xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED +#include "stm32f1xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED +#include "stm32f1xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED +#include "stm32f1xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED +#include "stm32f1xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED +#include "stm32f1xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED +#include "stm32f1xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED +#include "stm32f1xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED +#include "stm32f1xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED +#include "stm32f1xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED +#include "stm32f1xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED +#include "stm32f1xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED +#include "stm32f1xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED +#include "stm32f1xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED +#include "stm32f1xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED +#include "stm32f1xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED +#include "stm32f1xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ +#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ +void assert_failed(uint8_t* file, uint32_t line); +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_HAL_CONF_H */ + diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_it.h b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_it.h new file mode 100644 index 0000000000..41a9403393 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Inc/stm32f1xx_it.h @@ -0,0 +1,67 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F1xx_IT_H +#define __STM32F1xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F1xx_IT_H */ diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c new file mode 100644 index 0000000000..858fb0ace6 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_hal_msp.c @@ -0,0 +1,154 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f1xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_AFIO_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled + */ + __HAL_AFIO_REMAP_SWJ_NOJTAG(); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_it.c b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_it.c new file mode 100644 index 0000000000..cf383e0f75 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/CubeMX_Config/Src/stm32f1xx_it.c @@ -0,0 +1,202 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f1xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f1xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M3 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Prefetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F1xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f1xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/Kconfig b/bsp/stm32/stm32f103-ys-f1pro/board/Kconfig new file mode 100644 index 0000000000..7ed6ebc52c --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/Kconfig @@ -0,0 +1,45 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F103ZE + bool + select SOC_SERIES_STM32F1 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default y + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + + endif + + source "../libraries/HAL_Drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/SConscript b/bsp/stm32/stm32f103-ys-f1pro/board/SConscript new file mode 100644 index 0000000000..2610c2e3ab --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/SConscript @@ -0,0 +1,35 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32f1xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.PLATFORM in ['gcc']: + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xe.s'] +elif rtconfig.PLATFORM in ['armcc', 'armclang']: + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/arm/startup_stm32f103xe.s'] +elif rtconfig.PLATFORM in ['iccarm']: + src += [startup_path_prefix + '/STM32F1xx_HAL/CMSIS/Device/ST/STM32F1xx/Source/Templates/iar/startup_stm32f103xe.s'] + +# STM32F100xB || STM32F100xE || STM32F101x6 +# STM32F101xB || STM32F101xE || STM32F101xG +# STM32F102x6 || STM32F102xB || STM32F103x6 +# STM32F103xB || STM32F103xE || STM32F103xG +# STM32F105xC || STM32F107xC) +# You can select chips from the list above +CPPDEFINES = ['STM32F103xE'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/board.c b/bsp/stm32/stm32f103-ys-f1pro/board/board.c new file mode 100644 index 0000000000..6fad08c1d7 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/board.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include "board.h" + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/board.h b/bsp/stm32/stm32f103-ys-f1pro/board/board.h new file mode 100644 index 0000000000..250e5c7b03 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/board.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (512 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +/* Internal SRAM memory size[Kbytes] <8-64>, Default: 64*/ +#define STM32_SRAM_SIZE 64 +#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) + +#if defined(__ARMCC_VERSION) +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN ((void *)&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __BOARD_H__ */ diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.icf b/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.icf new file mode 100644 index 0000000000..c1d6615d89 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.lds b/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.lds new file mode 100644 index 0000000000..66c31ef7f8 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.lds @@ -0,0 +1,156 @@ +/* + * linker script for STM32F10x with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 64k /* 64K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x400; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.sct b/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.sct new file mode 100644 index 0000000000..0835abf43e --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00080000 { ; load region size_region + ER_IROM1 0x08000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00010000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f103-ys-f1pro/figures/board.jpg b/bsp/stm32/stm32f103-ys-f1pro/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bda9bf927281ba196e74de2fdbdfd2526563252 GIT binary patch literal 95683 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 + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f103-ys-f1pro/project.ewp b/bsp/stm32/stm32f103-ys-f1pro/project.ewp new file mode 100644 index 0000000000..c12c9b89a5 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/project.ewp @@ -0,0 +1,2312 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Compiler + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cctype.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdio.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdlib.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstring.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\ctime.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cwchar.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscalls.c + + + + CPU + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\workqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + + Drivers + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\iar\startup_stm32f103xe.s + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + + Finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_parse.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + Libraries + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + POSIX + + diff --git a/bsp/stm32/stm32f103-ys-f1pro/project.eww b/bsp/stm32/stm32f103-ys-f1pro/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f103-ys-f1pro/project.uvopt b/bsp/stm32/stm32f103-ys-f1pro/project.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/project.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + diff --git a/bsp/stm32/stm32f103-ys-f1pro/project.uvoptx b/bsp/stm32/stm32f103-ys-f1pro/project.uvoptx new file mode 100644 index 0000000000..4e19fe2a03 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/project.uvoptx @@ -0,0 +1,204 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 18 + + + 0 + Base Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-base-board-schematics.pdf + + + 1 + Display Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-display-board-schematics.pdf + + + 2 + User Manual (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e.chm + + + 3 + MCBSTM32E Evaluation Board Web Page (MCBSTM32E) + http://www.keil.com/mcbstm32e/ + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 11 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U -I0 -O206 -S1 -C0 -A0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN0 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f103-ys-f1pro/project.uvproj b/bsp/stm32/stm32f103-ys-f1pro/project.uvproj new file mode 100644 index 0000000000..46d694909d --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/project.uvproj @@ -0,0 +1,842 @@ + + + 1.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + __STDC_LIMIT_MACROS, STM32F103xE, USE_HAL_DRIVER, RT_USING_LIBC, __CLK_TCK=RT_TICK_PER_SECOND, __RTTHREAD__, RT_USING_ARM_LIBC + + applications;..\..\..\components\libc\compilers\common\include;..\..\..\components\libc\compilers\common\extension;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;board\ports\include;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\libraries\HAL_Drivers\CMSIS\Include;..\..\..\components\finsh;.;..\..\..\include;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\io\stdio;..\..\..\components\libc\posix\ipc + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Compiler + + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + + + + + syscalls.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + + + + + cctype.c + 1 + ..\..\..\components\libc\compilers\common\cctype.c + + + + + cstdio.c + 1 + ..\..\..\components\libc\compilers\common\cstdio.c + + + + + cstdlib.c + 1 + ..\..\..\components\libc\compilers\common\cstdlib.c + + + + + cstring.c + 1 + ..\..\..\components\libc\compilers\common\cstring.c + + + + + ctime.c + 1 + ..\..\..\components\libc\compilers\common\ctime.c + + + + + cwchar.c + 1 + ..\..\..\components\libc\compilers\common\cwchar.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + DeviceDrivers + + + completion.c + 1 + ..\..\..\components\drivers\ipc\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + Drivers + + + startup_stm32f103xe.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xe.s + + + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + + + board.c + 1 + board\board.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Libraries + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + + + system_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + + + +
diff --git a/bsp/stm32/stm32f103-ys-f1pro/project.uvprojx b/bsp/stm32/stm32f103-ys-f1pro/project.uvprojx new file mode 100644 index 0000000000..af3bdb03b5 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/project.uvprojx @@ -0,0 +1,845 @@ + + + 2.1 +
### uVision Project, (C) Keil Software
+ + + rt-thread + 0x4 + ARM-ADS + + + STM32F103ZE + STMicroelectronics + Keil.STM32F1xx_DFP.1.0.5 + http://www.keil.com/pack/ + IROM(0x08000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)) + 0 + $$Device:STM32F103ZE$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103ZE$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 11 + + + + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + + + __STDC_LIMIT_MACROS, STM32F103xE, USE_HAL_DRIVER, RT_USING_LIBC, __CLK_TCK=RT_TICK_PER_SECOND, __RTTHREAD__, RT_USING_ARM_LIBC + + board\CubeMX_Config\Inc;..\..\..\libcpu\arm\cortex-m3;..\..\..\components\libc\compilers\common\include;..\..\..\include;..\..\..\components\drivers\include;..\..\..\components\finsh;applications;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\libraries\HAL_Drivers;..\..\..\components\drivers\include;.;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\config;..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Include;..\..\..\libcpu\arm\common;..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Inc;..\..\..\components\libc\posix\io\stdio;..\..\..\components\libc\compilers\common\extension;..\libraries\HAL_Drivers\CMSIS\Include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;board + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Compiler + + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + + + + + syscalls.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + + + + + cctype.c + 1 + ..\..\..\components\libc\compilers\common\cctype.c + + + + + cstdio.c + 1 + ..\..\..\components\libc\compilers\common\cstdio.c + + + + + cstdlib.c + 1 + ..\..\..\components\libc\compilers\common\cstdlib.c + + + + + cstring.c + 1 + ..\..\..\components\libc\compilers\common\cstring.c + + + + + ctime.c + 1 + ..\..\..\components\libc\compilers\common\ctime.c + + + + + cwchar.c + 1 + ..\..\..\components\libc\compilers\common\cwchar.c + + + + + CPU + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m3\context_rvds.S + + + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m3\cpuport.c + + + + + DeviceDrivers + + + completion.c + 1 + ..\..\..\components\drivers\ipc\completion.c + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + Drivers + + + startup_stm32f103xe.s + 2 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm\startup_stm32f103xe.s + + + + + stm32f1xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f1xx_hal_msp.c + + + + + board.c + 1 + board\board.c + + + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + + + Finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + + + components.c + 1 + ..\..\..\src\components.c + + + + + device.c + 1 + ..\..\..\src\device.c + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + + + object.c + 1 + ..\..\..\src\object.c + + + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Libraries + + + stm32f1xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c + + + + + stm32f1xx_hal_cortex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c + + + + + stm32f1xx_hal_gpio_ex.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c + + + + + stm32f1xx_hal_rcc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c + + + + + stm32f1xx_hal_pwr.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c + + + + + stm32f1xx_hal_dma.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c + + + + + stm32f1xx_hal_crc.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_crc.c + + + + + system_stm32f1xx.c + 1 + ..\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c + + + + + stm32f1xx_hal_uart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c + + + + + stm32f1xx_hal.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c + + + + + stm32f1xx_hal_cec.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cec.c + + + + + stm32f1xx_hal_usart.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_usart.c + + + + + stm32f1xx_hal_gpio.c + 1 + ..\libraries\STM32F1xx_HAL\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c + + + + + + +
diff --git a/bsp/stm32/stm32f103-ys-f1pro/rtconfig.h b/bsp/stm32/stm32f103-ys-f1pro/rtconfig.h new file mode 100644 index 0000000000..fc95b840cb --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/rtconfig.h @@ -0,0 +1,198 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + +#define RT_DEBUG + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x50000 +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M3 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* C/C++ and POSIX layer */ + +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + + +/* Network */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + + +/* XML: Extensible Markup Language */ + + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + + +/* u8g2: a monochrome graphic library */ + + +/* PainterEngine: A cross-platform graphics application framework written in C language */ + + +/* tools packages */ + + +/* system packages */ + +/* enhanced kernel services */ + + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* kendryte-sdk: Kendryte SDK */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* project laboratory */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F1 + +/* Hardware Drivers Config */ + +#define SOC_STM32F103ZE + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 +#define BSP_UART1_RX_USING_DMA + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f103-ys-f1pro/rtconfig.py b/bsp/stm32/stm32f103-ys-f1pro/rtconfig.py new file mode 100644 index 0000000000..558924a36a --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/rtconfig.py @@ -0,0 +1,184 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m3' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iccarm' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M3 ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M3 ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m3 ' + CFLAGS += ' -mcpu=cortex-m3 ' + CFLAGS += ' -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' + CFLAGS += ' -gdwarf-3 -ffunction-sections ' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' + LFLAGS += ' --list rt-thread.map ' + LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' + + EXEC_PATH += '/ARM/ARMCLANG/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O1' # armclang recommend + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iccarm': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M3' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M3' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/stm32/stm32f103-ys-f1pro/template.ewp b/bsp/stm32/stm32f103-ys-f1pro/template.ewp new file mode 100644 index 0000000000..3280a547c0 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/template.ewp @@ -0,0 +1,2032 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f103-ys-f1pro/template.eww b/bsp/stm32/stm32f103-ys-f1pro/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f103-ys-f1pro/template.uvopt b/bsp/stm32/stm32f103-ys-f1pro/template.uvopt new file mode 100644 index 0000000000..7946319ef9 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/template.uvopt @@ -0,0 +1,162 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U30000299 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 + + + 0 + UL2CM3 + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + +
diff --git a/bsp/stm32/stm32f103-ys-f1pro/template.uvoptx b/bsp/stm32/stm32f103-ys-f1pro/template.uvoptx new file mode 100644 index 0000000000..4e19fe2a03 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/template.uvoptx @@ -0,0 +1,204 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 18 + + + 0 + Base Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-base-board-schematics.pdf + + + 1 + Display Board Schematics (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e-display-board-schematics.pdf + + + 2 + User Manual (MCBSTM32E) + I:\MDK5\MDK5\ARM\PACK\Keil\STM32F1xx_DFP\1.0.5\Documents\mcbstm32e.chm + + + 3 + MCBSTM32E Evaluation Board Web Page (MCBSTM32E) + http://www.keil.com/mcbstm32e/ + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 11 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U -I0 -O206 -S1 -C0 -A0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + 0 + JL2CM3 + -U30000299 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN0 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + 1 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f103-ys-f1pro/template.uvproj b/bsp/stm32/stm32f103-ys-f1pro/template.uvproj new file mode 100644 index 0000000000..99e58d3b30 --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/template.uvproj @@ -0,0 +1,407 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F103RB + STMicroelectronics + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + "STARTUP\ST\STM32F10x\startup_stm32f10x_md.s" ("STM32 Medium Density Line Startup Code") + UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000) + 4231 + stm32f10x.h + + + + + + + + + + SFD\ST\STM32F1xx\STM32F103xx.sfr + 0 + 0 + + + + ST\STM32F10x\ + ST\STM32F10x\ + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TARMSTM.DLL + -pSTM32F103RB + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + 0 + 6 + + + + + + + + + + + + + + Segger\JL2CM3.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32f103-ys-f1pro/template.uvprojx b/bsp/stm32/stm32f103-ys-f1pro/template.uvprojx new file mode 100644 index 0000000000..a38f7ba84e --- /dev/null +++ b/bsp/stm32/stm32f103-ys-f1pro/template.uvprojx @@ -0,0 +1,415 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + + + STM32F103ZE + STMicroelectronics + Keil.STM32F1xx_DFP.1.0.5 + http://www.keil.com/pack/ + IROM(0x08000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)) + 0 + $$Device:STM32F103ZE$Device\Include\stm32f10x.h + + + + + + + + + + $$Device:STM32F103ZE$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 11 + + + + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + +
-- GitLab