From 63b845e3976ee6f63c663c5ec673bf1a5ad1e5da Mon Sep 17 00:00:00 2001 From: hywing Date: Tue, 18 Mar 2025 15:01:43 +0800 Subject: [PATCH 1/4] [bsp][stm32] add a new bsp for stm3g030-tiny-board --- .github/workflows/bsp_buildings.yml | 1 + bsp/stm32/stm32g030-tiny-board/.config | 1282 ++++++++++ bsp/stm32/stm32g030-tiny-board/.gitignore | 42 + bsp/stm32/stm32g030-tiny-board/Kconfig | 27 + bsp/stm32/stm32g030-tiny-board/README.md | 61 + bsp/stm32/stm32g030-tiny-board/README_zh.md | 108 + bsp/stm32/stm32g030-tiny-board/SConscript | 14 + bsp/stm32/stm32g030-tiny-board/SConstruct | 59 + .../applications/SConscript | 15 + .../stm32g030-tiny-board/applications/main.c | 38 + .../board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CubeMX_Config.ioc | 103 + .../board/CubeMX_Config/Inc/main.h | 69 + .../CubeMX_Config/Inc/stm32g0xx_hal_conf.h | 351 +++ .../board/CubeMX_Config/Inc/stm32g0xx_it.h | 62 + .../CubeMX_Config/Src/stm32g0xx_hal_msp.c | 160 ++ .../board/CubeMX_Config/Src/stm32g0xx_it.c | 145 ++ bsp/stm32/stm32g030-tiny-board/board/Kconfig | 38 + .../stm32g030-tiny-board/board/SConscript | 29 + bsp/stm32/stm32g030-tiny-board/board/board.c | 47 + bsp/stm32/stm32g030-tiny-board/board/board.h | 50 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 157 ++ .../board/linker_scripts/link.sct | 15 + .../stm32g030-tiny-board/figures/board.jpg | Bin 0 -> 211035 bytes bsp/stm32/stm32g030-tiny-board/project.uvoptx | 1133 +++++++++ .../stm32g030-tiny-board/project.uvprojx | 2180 +++++++++++++++++ bsp/stm32/stm32g030-tiny-board/rtconfig.h | 395 +++ bsp/stm32/stm32g030-tiny-board/rtconfig.py | 184 ++ .../stm32g030-tiny-board/template.uvoptx | 192 ++ .../stm32g030-tiny-board/template.uvprojx | 411 ++++ 31 files changed, 7410 insertions(+) create mode 100644 bsp/stm32/stm32g030-tiny-board/.config create mode 100644 bsp/stm32/stm32g030-tiny-board/.gitignore create mode 100644 bsp/stm32/stm32g030-tiny-board/Kconfig create mode 100644 bsp/stm32/stm32g030-tiny-board/README.md create mode 100644 bsp/stm32/stm32g030-tiny-board/README_zh.md create mode 100644 bsp/stm32/stm32g030-tiny-board/SConscript create mode 100644 bsp/stm32/stm32g030-tiny-board/SConstruct create mode 100644 bsp/stm32/stm32g030-tiny-board/applications/SConscript create mode 100644 bsp/stm32/stm32g030-tiny-board/applications/main.c create mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_hal_conf.h create mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h create mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_hal_msp.c create mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c create mode 100644 bsp/stm32/stm32g030-tiny-board/board/Kconfig create mode 100644 bsp/stm32/stm32g030-tiny-board/board/SConscript create mode 100644 bsp/stm32/stm32g030-tiny-board/board/board.c create mode 100644 bsp/stm32/stm32g030-tiny-board/board/board.h create mode 100644 bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32g030-tiny-board/figures/board.jpg create mode 100644 bsp/stm32/stm32g030-tiny-board/project.uvoptx create mode 100644 bsp/stm32/stm32g030-tiny-board/project.uvprojx create mode 100644 bsp/stm32/stm32g030-tiny-board/rtconfig.h create mode 100644 bsp/stm32/stm32g030-tiny-board/rtconfig.py create mode 100644 bsp/stm32/stm32g030-tiny-board/template.uvoptx create mode 100644 bsp/stm32/stm32g030-tiny-board/template.uvprojx diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 35592a75df1..73a5dea700b 100644 --- a/.github/workflows/bsp_buildings.yml +++ b/.github/workflows/bsp_buildings.yml @@ -192,6 +192,7 @@ jobs: - "stm32/stm32f767-st-nucleo" - "stm32/stm32f769-st-disco" - "stm32/stm32f723-st-disco" + - "stm32/stm32g030-tiny-board" - "stm32/stm32g070-st-nucleo" - "stm32/stm32g071-st-nucleo" - "stm32/stm32g431-st-nucleo" diff --git a/bsp/stm32/stm32g030-tiny-board/.config b/bsp/stm32/stm32g030-tiny-board/.config new file mode 100644 index 00000000000..491bd57dbb9 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/.config @@ -0,0 +1,1282 @@ +CONFIG_SOC_STM32G030RB=y +CONFIG_BOARD_STM32G030_NUCLEO=y + +# +# RT-Thread Kernel +# + +# +# klibc options +# + +# +# rt_vsnprintf options +# +CONFIG_RT_KLIBC_USING_LIBC_VSNPRINTF=y +# end of rt_vsnprintf options + +# +# rt_vsscanf options +# +CONFIG_RT_KLIBC_USING_LIBC_VSSCANF=y +# end of rt_vsscanf options + +# +# rt_memset options +# +# CONFIG_RT_KLIBC_USING_USER_MEMSET is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMSET is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMSET is not set +# end of rt_memset options + +# +# rt_memcpy options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMCPY is not set +# end of rt_memcpy options + +# +# rt_memmove options +# +# CONFIG_RT_KLIBC_USING_USER_MEMMOVE is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMMOVE is not set +# end of rt_memmove options + +# +# rt_memcmp options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCMP is not set +# end of rt_memcmp options + +# +# rt_strstr options +# +# CONFIG_RT_KLIBC_USING_USER_STRSTR is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRSTR is not set +# end of rt_strstr options + +# +# rt_strcasecmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCASECMP is not set +# end of rt_strcasecmp options + +# +# rt_strncpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCPY is not set +# end of rt_strncpy options + +# +# rt_strcpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCPY is not set +# end of rt_strcpy options + +# +# rt_strncmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCMP is not set +# end of rt_strncmp options + +# +# rt_strcmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCMP is not set +# end of rt_strcmp options + +# +# rt_strlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRLEN is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRLEN is not set +# end of rt_strlen options + +# +# rt_strnlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set +# end of rt_strnlen options + +# CONFIG_RT_UTEST_TC_USING_KLIBC is not set +# end of klibc options + +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# 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_HOOKLIST is not set +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 +# CONFIG_RT_USING_CPU_USAGE_TRACER is not set + +# +# kservice options +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice options + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +# CONFIG_RT_USING_CI_ACTION 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_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# 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 +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x50200 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M0=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=1024 +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=768 +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_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +# 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_SERIAL_BYPASS is not set +# CONFIG_RT_USING_CAN 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_PHY_V2 is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE 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_LCD is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_BLK is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_KTIME is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CHERRYUSB is not set +# end of Device Drivers + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 +# end of Timezone and Daylight Saving Time +# end of ISO-ANSI C layer + +# +# 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 +# +# end of Interprocess Communication (IPC) +# end of POSIX (Portable Operating System Interface) layer + +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C/C++ and POSIX layer + +# +# 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 +# end of Network + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set +# end of Memory protection + +# +# 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_RESOURCE_ID is not set +# CONFIG_RT_USING_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# CONFIG_RT_USING_VBUS is not set + +# +# Using USB legacy version +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB legacy version + +# CONFIG_RT_USING_FDT is not set +# end of RT-Thread Components + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set +# end of RT-Thread Utestcases + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# 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_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set +# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# 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_IOTSHARP_SDK is not set +# end of IoT Cloud + +# 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_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX 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_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 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 +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# end of IoT - internet of things + +# +# 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 +# end of security packages + +# +# 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 +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# 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 +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# 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 +# 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 +# CONFIG_PKG_USING_3GPP_AMRNB is not set +# end of multimedia packages + +# +# 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_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH 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_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_RT_TRACE is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# end of tools packages + +# +# 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 +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY 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 +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# 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 +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE 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_FILEX is not set +# CONFIG_PKG_USING_LEVELX 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_RPMSG_LITE 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 +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# end of sensors drivers + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_CST812T is not set +# end of touch drivers + +# CONFIG_PKG_USING_REALTEK_AMEBA 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_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_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 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_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_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_GC9A01 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_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_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_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# 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 +# CONFIG_PKG_USING_R_TINYMAIX is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of 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 +# end of samples: kernel and components samples + +# +# 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_MORSE is not set +# CONFIG_PKG_USING_TINYSQUARE is not set +# end of entertainment: terminal games and other interesting software packages + +# 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_RALARAM 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_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_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_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# CONFIG_PKG_USING_GET_IRQ_PRIORITY is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32G0=y +CONFIG_BOARD_SERIES_STM32_NUCLEO_64=y + +# +# Hardware Drivers Config +# + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_STM32_UART_V1_TX_TIMEOUT=2000 +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_USING_UDID is not set +# end of On-chip Peripheral Drivers + +# +# Board extended module Drivers +# +# end of Hardware Drivers Config diff --git a/bsp/stm32/stm32g030-tiny-board/.gitignore b/bsp/stm32/stm32g030-tiny-board/.gitignore new file mode 100644 index 00000000000..7221bde019d --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/.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/stm32g030-tiny-board/Kconfig b/bsp/stm32/stm32g030-tiny-board/Kconfig new file mode 100644 index 00000000000..127f3e09905 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/Kconfig @@ -0,0 +1,27 @@ +mainmenu "RT-Thread Configuration" + +BSP_DIR := . + +RTT_DIR := ../../.. + +PKGS_DIR := packages + +config SOC_STM32G030RB + bool + select SOC_SERIES_STM32G0 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +config BOARD_STM32G030_NUCLEO + bool + select BOARD_SERIES_STM32_NUCLEO_64 + default y + +source "$(RTT_DIR)/Kconfig" +osource "$PKGS_DIR/Kconfig" +rsource "../libraries/Kconfig" + +if !RT_USING_NANO +rsource "board/Kconfig" +endif diff --git a/bsp/stm32/stm32g030-tiny-board/README.md b/bsp/stm32/stm32g030-tiny-board/README.md new file mode 100644 index 00000000000..a97281811ac --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/README.md @@ -0,0 +1,61 @@ +# STM32g030-tiny-board BSP Introduction + +[中文](README_zh.md) + +### Description + +The STM32G030x6/x8 mainstream microcontrollers are based on high-performance Arm® Cortex®-M0+ 32-bit RISC core operating at up to 64 MHz frequency. Offering a high level of integration, they are suitable for a wide range of applications in consumer, industrial and appliance domains and ready for the Internet of Things (IoT) solutions. + +The devices incorporate a memory protection unit (MPU), high-speed embedded memories (8 Kbytes of SRAM and up to 64 Kbytes of Flash program memory with read protection, write protection), DMA, an extensive range of system functions, enhanced I/Os, and peripherals. The devices offer standard communication interfaces (two I2Cs, two SPIs / one I2S, and two USARTs), one 12-bit ADC (2.5 MSps) with up to 19 channels, a low-power RTC, an advanced control PWM timer, four general-purpose 16-bit timers, two watchdog timers, and a SysTick timer. + +The devices operate within ambient temperatures from -40 to 85°C and with supply voltages from 2.0 V to 3.6 V. Optimized dynamic consumption combined with a comprehensive set of power-saving modes allows the design of low-power applications. + +VBAT direct battery input allows keeping RTC and backup registers powered. + +The devices come in packages with 8 to 48 pins. + +### All features + +- Core: Arm® 32-bit Cortex®-M0+ CPU, frequency up to 64 MHz +- -40°C to 85°C operating temperature +- Memories + - Up to 64 Kbytes of Flash memory with protection + - 8 Kbytes of SRAM with HW parity check +- CRC calculation unit +- Reset and power management + - Voltage range: 2.0 V to 3.6 V + - Power-on/Power-down reset (POR/PDR) + - Low-power modes:Sleep, Stop, Standby + - VBAT supply for RTC and backup registers +- Clock management + - 4 to 48 MHz crystal oscillator + - 32 kHz crystal oscillator with calibration + - Internal 16 MHz RC with PLL option + - Internal 32 kHz RC oscillator (±5 %) +- Up to 44 fast I/Os + - All mappable on external interrupt vectors + - Multiple 5 V-tolerant I/Os + +- 5-channel DMA controller with flexible mapping +- 12-bit, 0.4 µs ADC (up to 16 ext. channels) + - Up to 16-bit with hardware oversampling + - Conversion range: 0 to 3.6V +- 8 timers: 16-bit for advanced motor control, four 16-bit general-purpose, two watchdogs, SysTick timer +- Calendar RTC with alarm and periodic wakeup from Stop/Standby +- Communication interfaces + - Two I2C-bus interfaces supporting Fast-mode Plus (1 Mbit/s) with extra current sink, one supporting SMBus/PMBus and wakeup from Stop mode + - Two USARTs with master/slave synchronous SPI; one supporting ISO7816 interface, LIN, IrDA capability, auto baud rate detection and wakeup feature + - Two SPIs (32 Mbit/s) with 4- to 16-bit programmable bitframe, one multiplexed with I2S interface +- Development support: serial wire debug (SWD) +- All packages ECOPACK 2 compliant + +## Read more + +| Documents | Description | +| :----------------------------------------------------------: | :----------------------------------------------------------: | +| [STM32_Nucleo-144_BSP_Introduction](../docs/STM32_Nucleo-144_BSP_Introduction.md) | How to run RT-Thread on STM32 Nucleo-144 boards (**Must-Read**) | +| [STM32G030C8 ST Official Website](https://www.st.com/en/microcontrollers-microprocessors/stm32g030c8.html) | STM32G030C8 datasheet and other resources | + +## Maintained By + +[hywing](https://github.com/hywing) \ No newline at end of file diff --git a/bsp/stm32/stm32g030-tiny-board/README_zh.md b/bsp/stm32/stm32g030-tiny-board/README_zh.md new file mode 100644 index 00000000000..c80728bad25 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/README_zh.md @@ -0,0 +1,108 @@ +# STM32g030-tiny-board 开发板 BSP 说明 + +## 简介 + +本文档为 hywing为 STM32g030-tiny-board 开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +STM32g030-tiny-board 是一款基于 ARM Cortex-M0 内核的开发板,最高主频为 64Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32G030C8T6 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32G030C8T6,主频64MHz,64KB FLASH ,8K RAM +- 调试接口,标准 JTAG/SWD + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB 转串口 | 支持 || +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | | +| UART | 支持 | UART1 | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST_LINK 仿真器下载程序,在通过 ST_LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED循环点亮。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + + \ | / +- RT - Thread Operating System + / | \ 5.2.0 build Dec 2 2024 11:35:30 + 2006 - 2024 Copyright by RT-Thread team + +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口1的功能,如果需使用更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk5` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 调试串口为串口1 映射说明 + + PB6 ------> USART1_TX + + PB7 ------> USART1_RX + +## 联系人信息 + +维护人: + +- [hywing](https://github.com/hywing) \ No newline at end of file diff --git a/bsp/stm32/stm32g030-tiny-board/SConscript b/bsp/stm32/stm32g030-tiny-board/SConscript new file mode 100644 index 00000000000..c7ef7659ece --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +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/stm32g030-tiny-board/SConstruct b/bsp/stm32/stm32g030-tiny-board/SConstruct new file mode 100644 index 00000000000..eab92b6e1c6 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/SConstruct @@ -0,0 +1,59 @@ +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 = 'STM32G0xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'), variant_dir='build/libraries/'+stm32_library, duplicate=0)) +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'),variant_dir='build/libraries/'+'HAL_Drivers', duplicate=0)) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32g030-tiny-board/applications/SConscript b/bsp/stm32/stm32g030-tiny-board/applications/SConscript new file mode 100644 index 00000000000..9bb9abae897 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/applications/SConscript @@ -0,0 +1,15 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +list = os.listdir(cwd) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) + +Return('group') diff --git a/bsp/stm32/stm32g030-tiny-board/applications/main.c b/bsp/stm32/stm32g030-tiny-board/applications/main.c new file mode 100644 index 00000000000..8350a9fd0ce --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/applications/main.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2006-2025 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-3-17 hywing first version + */ + +#include +#include +#ifndef RT_USING_NANO +#include +#endif /* RT_USING_NANO */ + + +/* defined the LED0 pin: PB4 */ +#define LED0_PIN GET_PIN(B, 4) + +int main(void) +{ + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + + rt_kprintf("Welcome to the world of IoT Stuff!\r\n"); + + while (1) + { + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED0_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/.mxproject new file mode 100644 index 00000000000..98015ced6bc --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_tim.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_tim_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_uart.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_usart.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_lpuart.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_uart_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_rcc.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_rcc_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_rcc.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_bus.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_system.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_utils.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash_ramfunc.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_gpio.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_gpio_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_gpio.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_dma.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_dma_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_pwr.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_pwr_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_pwr.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_cortex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_cortex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_def.h;Drivers\STM32G0xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_exti.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_exti.h;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim_ex.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_rcc.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_dma.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_dmamux.h;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c;Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_exti.c;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_tim.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_tim_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_uart.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_usart.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_lpuart.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_uart_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_rcc.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_rcc_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_rcc.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_bus.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_system.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_utils.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_flash_ramfunc.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_gpio.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_gpio_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_gpio.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_dma.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_dma_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_pwr.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_pwr_ex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_pwr.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_cortex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_cortex.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_def.h;Drivers\STM32G0xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_hal_exti.h;Drivers\STM32G0xx_HAL_Driver\Inc\stm32g0xx_ll_exti.h;Drivers\CMSIS\Device\ST\STM32G0xx\Include\stm32g030xx.h;Drivers\CMSIS\Device\ST\STM32G0xx\Include\stm32g0xx.h;Drivers\CMSIS\Device\ST\STM32G0xx\Include\system_stm32g0xx.h;Drivers\CMSIS\Device\ST\STM32G0xx\Include\system_stm32g0xx.h;Drivers\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_armclang_ltm.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_armv81mml.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_cm35p.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\stm32g0xx_it.c;..\Src\stm32g0xx_hal_msp.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_rcc.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c;..\\Src\system_stm32g0xx.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_tim_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_rcc.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c;..\Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c;..\\Src\system_stm32g0xx.c;;; +HeaderPath=..\Drivers\STM32G0xx_HAL_Driver\Inc;..\Drivers\STM32G0xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32G0xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_HAL_DRIVER;STM32G030xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +HeaderPath=..\Inc +HeaderFiles=stm32g0xx_it.h;stm32g0xx_hal_conf.h;main.h; +SourcePath=..\Src +SourceFiles=stm32g0xx_it.c;stm32g0xx_hal_msp.c;main.c; + diff --git a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 00000000000..633e42f8ac7 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,103 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +File.Version=6 +GPIO.groupedBy= +KeepUserPlacement=false +Mcu.CPN=STM32G030C8T6 +Mcu.Family=STM32G0 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IPNb=4 +Mcu.Name=STM32G030C(6-8)Tx +Mcu.Package=LQFP48 +Mcu.Pin0=PA13 +Mcu.Pin1=PA14-BOOT0 +Mcu.Pin2=PB6 +Mcu.Pin3=PB7 +Mcu.Pin4=VP_SYS_VS_Systick +Mcu.PinsNb=5 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32G030C8Tx +MxCube.Version=6.12.1 +MxDb.Version=DB.6.0.121 +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_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.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:true\:false\:true\:false +PA13.Mode=Serial_Wire +PA13.Signal=SYS_SWDIO +PA14-BOOT0.Mode=Serial_Wire +PA14-BOOT0.Signal=SYS_SWCLK +PB6.Locked=true +PB6.Mode=Asynchronous +PB6.Signal=USART1_TX +PB7.Locked=true +PB7.Mode=Asynchronous +PB7.Signal=USART1_RX +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=STM32G030C8Tx +ProjectManager.FirmwarePackage=STM32Cube FW_G0 V1.6.2 +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.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_I2C2_Init-I2C2-false-HAL-true +RCC.AHBFreq_Value=16000000 +RCC.APBFreq_Value=16000000 +RCC.APBTimFreq_Value=16000000 +RCC.CortexFreq_Value=16000000 +RCC.EXTERNAL_CLOCK_VALUE=12288000 +RCC.FCLKCortexFreq_Value=16000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=16000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=16000000 +RCC.I2S1Freq_Value=16000000 +RCC.IPParameters=AHBFreq_Value,APBFreq_Value,APBTimFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2S1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLPoutputFreq_Value,PLLRCLKFreq_Value,PWRFreq_Value,SYSCLKFreq_VALUE,USART1Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value +RCC.LSCOPinFreq_Value=32000 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=16000000 +RCC.PLLPoutputFreq_Value=64000000 +RCC.PLLRCLKFreq_Value=64000000 +RCC.PWRFreq_Value=16000000 +RCC.SYSCLKFreq_VALUE=16000000 +RCC.USART1Freq_Value=16000000 +RCC.VCOInputFreq_Value=16000000 +RCC.VCOOutputFreq_Value=128000000 +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/main.h new file mode 100644 index 00000000000..31b3b046ba1 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/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) 2024 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 __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32g0xx_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/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_hal_conf.h b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_hal_conf.h new file mode 100644 index 00000000000..d7e7d7cd986 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_hal_conf.h @@ -0,0 +1,351 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_hal_conf.h + * @author MCD Application Team + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2018 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 STM32G0xx_HAL_CONF_H +#define STM32G0xx_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_CEC_MODULE_ENABLED */ +/* #define HAL_COMP_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +/* #define HAL_FDCAN_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_I2C_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_SPI_MODULE_ENABLED */ +/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## Register Callbacks selection ############################## */ +/** + * @brief This is the list of modules where register callback can be used + */ +#define USE_HAL_ADC_REGISTER_CALLBACKS 0u +#define USE_HAL_CEC_REGISTER_CALLBACKS 0u +#define USE_HAL_COMP_REGISTER_CALLBACKS 0u +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u +#define USE_HAL_DAC_REGISTER_CALLBACKS 0u +#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0u +#define USE_HAL_HCD_REGISTER_CALLBACKS 0u +#define USE_HAL_I2C_REGISTER_CALLBACKS 0u +#define USE_HAL_I2S_REGISTER_CALLBACKS 0u +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u +#define USE_HAL_PCD_REGISTER_CALLBACKS 0u +#define USE_HAL_RNG_REGISTER_CALLBACKS 0u +#define USE_HAL_RTC_REGISTER_CALLBACKS 0u +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u +#define USE_HAL_SPI_REGISTER_CALLBACKS 0u +#define USE_HAL_TIM_REGISTER_CALLBACKS 0u +#define USE_HAL_UART_REGISTER_CALLBACKS 0u +#define USE_HAL_USART_REGISTER_CALLBACKS 0u +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u + +/* ########################## 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 (8000000UL) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) +#define HSE_STARTUP_TIMEOUT (100UL) /*!< 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 (16000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) +/** + * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. + * This internal oscillator is mainly dedicated to provide a high precision clock to + * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. + * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency + * which is subject to manufacturing process variations. + */ +#if !defined (HSI48_VALUE) + #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. + The real value my vary depending on manufacturing process variations.*/ +#endif /* HSI48_VALUE */ +#endif + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) +#define LSI_VALUE (32000UL) /*!< 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 (32768UL) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) +#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S1 peripheral + * This value is used by the RCC HAL module to compute the I2S1 clock source + * frequency. + */ +#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) +#define EXTERNAL_I2S1_CLOCK_VALUE (12288000UL) /*!< Value of the I2S1 External clock source in Hz*/ +#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ + +#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) +/** + * @brief External clock source for I2S2 peripheral + * This value is used by the RCC HAL module to compute the I2S2 clock source + * frequency. + */ +#if !defined (EXTERNAL_I2S2_CLOCK_VALUE) + #define EXTERNAL_I2S2_CLOCK_VALUE 48000U /*!< Value of the I2S2 External clock source in Hz*/ +#endif /* EXTERNAL_I2S2_CLOCK_VALUE */ +#endif + +/* 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 (3300UL) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 3U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U + +/* ################## 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 + +/* ################## CRYP peripheral configuration ########################## */ + +#define USE_HAL_CRYP_SUSPEND_RESUME 1U + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include modules header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED +#include "stm32g0xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +#include "stm32g0xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED +#include "stm32g0xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +#include "stm32g0xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +#include "stm32g0xx_hal_adc.h" +#include "stm32g0xx_hal_adc_ex.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED +#include "stm32g0xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED +#include "stm32g0xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +#include "stm32g0xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED +#include "stm32g0xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED +#include "stm32g0xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +#include "stm32g0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +#include "stm32g0xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_FDCAN_MODULE_ENABLED +#include "stm32g0xx_hal_fdcan.h" +#endif /* HAL_FDCAN_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED +#include "stm32g0xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED +#include "stm32g0xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED +#include "stm32g0xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED +#include "stm32g0xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED +#include "stm32g0xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32g0xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED +#include "stm32g0xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED +#include "stm32g0xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED +#include "stm32g0xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED +#include "stm32g0xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED +#include "stm32g0xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED +#include "stm32g0xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED +#include "stm32g0xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED +#include "stm32g0xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED +#include "stm32g0xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED +#include "stm32g0xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED +#include "stm32g0xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for functions 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 /* STM32G0xx_HAL_CONF_H */ diff --git a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h new file mode 100644 index 00000000000..bd0060544ec --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h @@ -0,0 +1,62 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 __STM32G0xx_IT_H +#define __STM32G0xx_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 SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32G0xx_IT_H */ diff --git a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_hal_msp.c b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_hal_msp.c new file mode 100644 index 00000000000..6e24361d052 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_hal_msp.c @@ -0,0 +1,160 @@ + +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ + +/* 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_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* 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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + + /** Initializes the peripherals clocks + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + /*Error_Handler();*/ + } + + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART1 GPIO Configuration + PB6 ------> USART1_TX + PB7 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF0_USART1; + HAL_GPIO_Init(GPIOB, &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 + PB6 ------> USART1_TX + PB7 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7); + + /* 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/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c new file mode 100644 index 00000000000..c20b44b1a6b --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c @@ -0,0 +1,145 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2024 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 */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32g0xx_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-M0+ 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 */ + while (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 System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVC_IRQn 0 */ + + /* USER CODE END SVC_IRQn 0 */ + /* USER CODE BEGIN SVC_IRQn 1 */ + + /* USER CODE END SVC_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 */ +} + +/******************************************************************************/ +/* STM32G0xx 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_stm32g0xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32g030-tiny-board/board/Kconfig b/bsp/stm32/stm32g030-tiny-board/board/Kconfig new file mode 100644 index 00000000000..46b6bab5b07 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/Kconfig @@ -0,0 +1,38 @@ +menu "Hardware Drivers Config" + +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 UART1" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_STM32_UART_V1_TX_TIMEOUT + int "UART TX timeout" + default 2000 + depends on RT_USING_SERIAL_V1 + + config BSP_USING_UART1 + bool "Enable UART1" + default y + + endif + + source "$(BSP_DIR)/../libraries/HAL_Drivers/drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32g030-tiny-board/board/SConscript b/bsp/stm32/stm32g030-tiny-board/board/SConscript new file mode 100644 index 00000000000..1732158f094 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/SConscript @@ -0,0 +1,29 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32g0xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.PLATFORM in ['gcc']: + src += [startup_path_prefix + '/STM32G0xx_HAL/CMSIS/Device/ST/STM32G0xx/Source/Templates/gcc/startup_stm32g030xx.s'] +elif rtconfig.PLATFORM in ['armcc', 'armclang']: + src += [startup_path_prefix + '/STM32G0xx_HAL/CMSIS/Device/ST/STM32G0xx/Source/Templates/arm/startup_stm32g030xx.s'] +elif rtconfig.PLATFORM in ['iccarm']: + src += [startup_path_prefix + '/STM32G0xx_HAL/CMSIS/Device/ST/STM32G0xx/Source/Templates/iar/startup_stm32g030xx.s'] + +CPPDEFINES = ['STM32G030xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32g030-tiny-board/board/board.c b/bsp/stm32/stm32g030-tiny-board/board/board.c new file mode 100644 index 00000000000..6ee637cbda4 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/board.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2025 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-21 zylx first version + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1); + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32g030-tiny-board/board/board.h b/bsp/stm32/stm32g030-tiny-board/board/board.h new file mode 100644 index 00000000000..b9adb69f929 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/board.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2025 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 (64 * 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 8 +#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/stm32g030-tiny-board/board/linker_scripts/link.icf b/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.icf new file mode 100644 index 00000000000..e897e945c10 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/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__ = 0x08040000; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20008000; +/*-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/stm32g030-tiny-board/board/linker_scripts/link.lds b/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds new file mode 100644 index 00000000000..32bc1746538 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * linker script for STM32F10x with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 64k /* 256KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 8k /* 32K 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/stm32g030-tiny-board/board/linker_scripts/link.sct b/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.sct new file mode 100644 index 00000000000..ba1878dfbea --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00010000 { ; load region size_region + ER_IROM1 0x08000000 0x00010000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00002000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32g030-tiny-board/figures/board.jpg b/bsp/stm32/stm32g030-tiny-board/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cb669a82298afab64c755fa490e67d1d6c1b35b GIT binary patch literal 211035 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
}r8;C!6X{ophdQPK?Ov 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

r0s?R`Mgm9} zP{4%*QnndE9cciL**?FAH5(t8cK&qor|JCZo&A5EFdD-rc6iM>zGfc1sSgfRgO1dv z<<5H00ul(@$j4k$8*3;dKaDs5QIB)$NJ;X*JRfR6CVo;epGr_jPSk@tNnDffOY?lA zZb!8M1=Qm!f@!Q*Xu|Em{ODtY(4T5+H%<@IfD~k$=V$|`ts<$}$phMzK;Ouwg6IovZzj!sA;(ts*6m6LM_ z(4L`F0-jFcn9A%tkPa#U$jQ4S=Eu!axmE%p9#MOqw8T7}=ms)7ae^pNm~5Qj`tmA0 z?qeHC&NvjOl3F;1R{^qU04jqd91+e1NP&xur~t-EG{C^CF~MJIRa`dFyK{9LxWzCO zER3PzJSjg)Rc+9Qatf2k=xL#wX(+Axw&in-igO}3S&U9bc~IRy3IK)Ebcn+MFC0{$ z#><8T4?rkqQop-_f)Y9PG}2h`R~+LM2vTF*6+>gV??GLKmz}s6Ii+2TI4TJp8$D>q zATIv^lyvu?1wdGKUIX_dH*Vda@(;Z{oVxtE z$En3ffJrQ*VDU;1%bp4JCV&-3${BDQB=gf0`AA)#Ha<=W8?b4iUuacRf(ask!7#yc z4Y<4j0~^!JIA*C;{=KFbo|Ep1&{ipocLXfeWei?d?j6=ol(4&D{0m(CY&! zlM1B|JRT?jO{gi7<{A*6HQ;60bAzD$S09N3n~of zu765y<_neY!KbleFn)yk(-aKtCmVVC&;qLMDxiF=)Sd+e2}o77VzZzv83WjuNs0LRy^S<*%2 zdTqyk**=E2$xctu*H5je{c8+2%uQ-*r#B7ttejwG zsDVRrbI)pYT)5r9=~0gP|pVo-My%{2#kaK z!#JrI#}`W;)kPmeisH<~j%hsHmEwRmwOvv5X@t_mrvo1U0R4KqqWG$95tLd+#47FD z>OUIhLGPCO3bSV)pLmJ58DW+4Ne@X!Ezu`I60Qn{q$MMFn z-6jIKrI`7H6?7broc{p8aYcaXf8jRPf9JUTg)&bX>drsc2K=iU&ObCuj*7h2T$~r< z=|zC)zu_#^TdbshB9wTqR~;sA`|7zs@uGBd`r|$l}=mV#d#QLlK>$V?P{{RYW zYnSeyHQ_(-GhD!O1zEEz=3wLd)B(J8T}2ae-M`KL)iJewL?-sSa=kwFR*{rPwU?pK zT9RF#*cl0yXU=m}14gBA&5=0=+LUVdO4t`H52-bXNkzs^Jw--X<2g9@pbmkxdz1IB zj(^|9MB0>u{MSvN_w!ho_vVay^FSL$Mv=Ej?IU`VQrphRq)GFPbgcV1HpT%3xvAsZ zzbo?b-heJyYZvzH8Vk8#LD?9AT7z8FC;8s;R{Vd$xn}8%@l#t|v}7pcdQb;#ZGWgl zo^oAIjJ*hRT{Zr(bE|klc(0y0+90@MGQi|>TqTpqb!yJ+aHrP2UKG)F--k0iHkQ#| z+QFAGs13Xhr1#JDq}_tYkL%U~3xX0coui*xrv?1BDDj6}NV`~LwQB1!lPqdM{{U7i zDXlH!IhBa|ns>OYCAHgGA2v3T532E9r-FQRVvp<^&6nG(d_}ZT@&?fP{3>JzA+1};Z)a;*Wr%r$&lU zKI;q-T^@;Psa@S9cDM1y`@UVyamT(ZSK=+b>{?B%`o5ZwN{zHn3x*HJLyko-Jl5Vz zxn>CyGrzITX+4&*$Rd&g!I$OF2CKsq24wpS1as5_gIyF76lD8czFR7AT1?e}&o+yx zDuEZ0y9|W^FpP{mP&um%;j#yh$v#cB>nVhYU#k@l~(1+ub@X+JhF4_#QR?0P9y<;kYezxy8Ja zNS6D&!iNC<8Lq#@-V(Bt!t)&(>Q`%US>u@Q1Y?j#6s`w_Xkr<)nA-9`JvVZUP7l_- zZaKU?6@*K5WfB9%*hpe4%&hLM-sxeUJ9}jBF5K;|*++)-yG4|1QQsC`%bXuz4Hp7; zx6G10n;C0i(ZCu10LP6!+eMb@Sl7%Fm+GW|N9$NRj<4}&l?bKKaFoi@e15&t7mf4%7cy@4M+!G z=>8Op{{W%i-^}CqSONb4vWj)Q`X#5`H)GcfwaeW2hQaO$f(cVTuejE}k*QhU1-G-( zCcU{o!jTta_yA}b&}n*hjeBg;PkVM9n2{6!Wd4=CEIMX~qsc9?ypwp^R^~i0`fxw3 zV)$YqbE?N>b)@Q$-biqYP{v2sIO4l+7yS5*k$CE?8sgDztyv7n=31lVhiSn*Lcfg5x~@0EK#7-U0Eg zmX`6^YkGV9yO~-&r{A5XfIMp7Pt;(zYlgH@gZ=NjpGx#=eHTX>QeDlbO{(1O-0$-g z&!-0*eGPf8sM?e24-MVhw2LOsl;Cd8E8p~A1^GG+tQXpy)6S?Fk^&V}kX#et zCW;`x!?%U{(gMAvi)G~|`%JvwbxmpNe-5ROOPcW>C{#s@W5SJtn5H>fcwZE-9F zC?-E{-<@_o8}RRle1GA=sp>l6)1aR|R8hbVKqO?Gjwv@_JY2&)tmH=Nko#-V^e+h6 z$D@hv^w{n$T?+#{e57{cpr|}s@Tt5tYYp}GvTkL0c7#Ys80*xxwR+0v*O%HIy4kc) z#L%ca$0TBxFdiXyX=;kVTG|=E>57euSoZJ+mwVYpcm3a#S99YJ3Tt+&x$R*{V`1f( zhhKbmu3E=Q@iwHsuE8(72nL;jovz{x| zZG01=XqIZ1cG6y7l?05ErMvOcl%y*jC#&14gS8_c?jXfw2rxg@Fa7c>yz%dabqzd8 zdThnLtc~)7B<=PhxTtNl2|wl1<^KTPjQ;?I3PE9Q14;Y1(MRAbQs+vZJuN4sd{xO{Y(?TQ)`?!y@3-%~QsD#-m^@Vge`>VZ=ZJN4-8^v4?GGB$x2p$@k`y zZr|?nUCHpgHkN|o;vpjc0J~TI8hksOT+!m!UgaW@ocRb>abgY$K9%UY7lO4Tr@R`4 z+)ex|g(jaktax6fX&5A`d1L#kD=%oyFe}o2A^0Ny07g}lhKbmOX!$>vTBG5=g_@45 zr?vg%+S$T+LAP@^zB5kXa$04OySYSQg0wZC4^3-r=Z1@7)qP6cv<*T?MaX@)8}U~( zyDeMAPSHf_E#d)-F~YC8p}P#{^!yvh;XgXL#^3K(Q8tC;N9MdD5snbB&*Ul%H^KUg zc)r_7g*MLZyUinjo!EO+r4Z;z4pa6W3N zH3^jLS75%zy@$ac4=gV{CuyqRsq?M}n5xHsr18h$QrcUL@X3R7+zPLsdh~A}Xs9)R zv1#RAIED)j0IV2%ISOOVl!x}B;By%CIr@r2?g!^xT)G4p%AD0H^nIUo1u+;{=~Ec< zihb3i#(g=c@Zf<=32n#{q4Z&2Lik31J57Xr+{T+(di~yO=a`p*ee2$SA4$7Ow>jw; zU&|Ebu#TzQVvi};1E?ddAz&dNHXGQ}OsJ&pE#?k@bDDDnIo>w?Ycj$|Uoa_-Lykem z6x7`E7Iz^>MW?7S#sPdER%&B_6p@A}oQeRD5X6t^K;#pj(wYv#_4lO*VEX&e0HY%+ zs@r;VOawMpX*+t;`DS8B3)=$}(T#*Uw)N*A^%Q_oNPWQV1Y>S#v5oKYxmO1xjz1bB z!+fNXo=2@I$X(5~Lwum;0DWiy+s~Rpka_9vOSf!fhXeb@qrgHPq>YLDqB>pKP>qw3 zoRQv`3cFPBTZ7XStsqixc`J-!nt&)EmgMx!D+L9!&>Ukl0O5i-0Jh%!%|{}hzyr6p zYEYxl=lN1HpWy@_e)Is)xQqaKr8{^7@uVx920Kjz5a37i4)g#8`LF<0^`ZIWcq{8q z3NUkmJt?^A2GBhy0lvI`G}ar4$))Z&%`Y6}XA}V$T(`)}$5m=^Y>re9r2$A8!jDXK zrtZPRkh%UQ=qLddetp#7-9;icV$WJs89dMe6Y41n`kH$lpbXSyPf%z9I-CkS;d)Sd zV0EDM#Q-5Ey5#!PcITsjeJC4$g}L;lz&&ye05_cTN=ACok%~-afDy0;7>s*UdK`n- zrfGONQToz1Weu7@BJRl<{HO|Wa1S1)f;;+9K_CN>pGp8`^Pae2PIme6j@@Ynalp+v z!*t*bPy-ZaCnkabJqX1;56Vg7p0tggaM?bz0UHdS^umWD2Q?{fFxky85C#rK0}!cE z*wk)Sa!BT+;d6tUX$%Qqp{N3jIGX|75;z&=rERgUah4qd)KP#GWk5ciYD^Li!VNJD zLQ#Q2!HDDyzC*VMb8=gQKnH&fyVwcpL;z7ksaJCW7{ZK} zc0K3;_`?m%K_fW^n3!bA8GPe#9Mo)II2pk2jw)6Axj0jd;2J<10RRU1M_it1vThqr z(z)nJq0l!uJo8YqF~QtVJ3uFj0F>mWSCU_6<3x$Ll`EWd`qE@?+8YFOkLyaDjoIt( z)|d*pX)+1O9MkSj^lnDpxc8)706S#hQzZZ^spzMZKpek_Mj20G&2y!&@@MX_;<_&q z9n84t)K@olN0!8NrY3MY(`MxTYKL#eu4;#MnfW_cc5z!CBY)i6?oXR&%P+NJ!L_94u4`MwGo-#pl5kad$nQWH#d%yZ?e(U} z22XmL(mnSa{m;Eu^h-Nyy?Pk#Khzh)f^o-s24d1zN$~?gwa_(z2A=Nr(jbuwoROZ{ zu5Yy@z_S@_gZ_Q0&YJEoSB~`xDNqUY{{Zz>tsCdRP-%c`EI!`jAH#!L?mz)?S9Mk= zP@5yz)hEy0Bbq=)dQ(C4uCK$|6`k&fG?y+s*)n6=+@TfA6#L+6JwcauwNy^HtD14cW7>c( zd89ir?^f=H%?dO9=cr4oA zqc_{4DJ!FH7-cvh`&Ye3@atA+B2nVo$QjfflB+j9fbSWv3(@TL3yH+G7Lv}<5XWMc z$KhVlYw>(V91wVmMxG}?2bi651~atd`POrGu+q7P{sp?5#toxtSLp8&2|mz(lECyN zdhuKF{4vojrBAkMGtIxzaDPnK4X*gI6XL6_V@;ipn!v1Ou)q$-(zQR~X530*S>cXl zRt%t%kVm+uuRuK#-{F^sBe!E`b##p5gDVf0^sgrPfR|cyGT9A5?ydaNp&XU~j)Z=7 z+s)(m)pXGftY2oj#yrj4y#;w!itX>>lr`v(5^_s-p>uTuKTL|%otEa|E{st5~J=oPR8A zr(=(9`TZ$LusTl@d@9oJtQP+OMq#I10vpJch>f|%J*s;jhgxl()zq|Px)=n>1dp_S zppUI`-ZuEGHOp1Eu(N0aw&G-dMmup;W%#+MOSLRw7RnSULN^nR{GaJkn_znWjo{rn zz-LKi@>~90?xNlY;(7jckMXZfiVp!zD#HYC69zs~1r^2VKNard$J!t>ztbPet$alB zh33EDYnyh{q_->wCO~pNl}n$f9yQ_n8Sn0YceDNlMz>{gVX247hk@Tt-a$G|s zZ38rN4?}}n#@_P(0A#Ciy5cXJ2mEU82eSM%_y;lDd{L#^M{jjyX*{uj1hOLn-&`8R);=R@ z8uj(H%+~QoaSs7vQWy0k{iR#{Q6f>26*!*krd|&cvTe>~%kfRtsX6R=?UdO6|0*_+9(G zg7&RZCp+-JNB-LJb)Bhwfu$Rp>0eoDItG_@rhT7LvbVcbTn{w|A485SWgmCd6Avm6p|yy>s8Aq zxQ`yzL0kERob7B@H1ZAHR{XJ>`}ZdqnS&gAoYtkqmW^i-j!Ql7{7%hUSPmp}$giP4 zW^EqgEgJh$m~8W85yX0&4yX10b>q5*muuyDwq*zVJE_`6wXayWm#1FMY=ih?bC1Xx z&Pz)S`qph{PPWwIv%0zoGkxDPjmO%p>kR|xHy&$^j)uNy(mYXnadxun6G^GfANsYF zpWXZM#cy4Bi&UD|dfv$xf8kCC^Qp4~BUFm&+f-S_tc3)*5+AR6)%b_5TWT5yk>;aG zw*>$ouO9WA75(XvS|aj3{{WfWl^*q_s$R9tgC*Fu)T21d2!Jc>aZW@YG2iK0T2-u< z*VgutHs3kImTm(5Yg<#&?Jf!a&$kOV_d|TYkELY|J5jfnV_KDeQ_9uezhCMAkA#5c@)7=P?}ZKK1h+j+-BB(fN`Qz)bLKw0&JI zG$?J;Qn-wONQM$sdB*UB0mk$(RGExokzA>v69eo#Ln(zfrc>{c%??Qilg?-(Y300&x4TntT4 zRb6eRM%=4#2tJ@1`WM1pEzqU2-Y4HAC_Kq_pP2hs&bowl@y4E87LWLtkGuF+X9taJ z^xZNoKS|T0F@gKWkOR9t=}BE!4wvHRi*4_PvRlS{v~ea~ak*=m(fm;t*I?=^de!%r4z zFX6j8JFAZ=tfJb@Zs%Uu)B zX!hJnxdl{ked|Cy%TMv1lKLdNr`lJ_Q^?OF&{kiCd{ny4{PJ8zH%E<_?hSm^E#1?) z!X^F6zfOK??_t(v(BctUvJoQ^~crkWu9d$&Q8pK4rBZkpkLOh2605e-Up^> z-eZ&Uf=)o`UZbXXt4NbhmgR1<6g;!-AUD%JYvhHv@~-3TYqoC?%N~{GZ+?G=Zy$vx z8;t9|Bm78;^7bXM1!99ZEza-4uxI$Oax{gqi(n&+sID7RisIywMP~hiMduW`dx2w6 z)Fr;1q?MV=8tl9+;|0-lb+(4vac3D$@QiO4|Sw0fbIx0?_AcWrpapOkCwfn);nuYw%nU^XH*_W=)vUm zKU(4ZOJX?A3l+<8O##643=gMj_P>TwE9ns62dg(P6`eQ6s2mTc$g!Jq&TRz*CGnNlf*u@Edk zY-2R&j|}-dDHRz7kcP%a2P^7aun7l!AIt2yMVK z@NFr01qA8G zAXSS4A*sA!sCctsfnpW;b4E?FAzy$Z8028;KKdml)U~qBiNPd5BK}(Ph2+L9d z4m$PrreyQM#Xn$Qn>2?HoD6$<&;)O@ZtP*cl%)K>GUU_JBaAQsJxQp*bz%ejg!)hb zxB~~0M@k6BNcnS5cL)eWxRKWshk?rH@t_6|x=-s!04wtTbf>S&)6#{(1TO}F1NT7v zXy+qsHBV#7qbI2AKngM>APjNMHvxegj(by=xd*KyHq;6SBfS7L0x*PR(|c^_L8oT` zIqFRf$tHjpf6i&G&tKAz?Jh^h;Hg}Prx!0w*`0voYOJGtcnT7M;$53!~wJe$2{hM7aurfUPoF? z4Z)6irQCOgMdbCMJ8lYbfM@_@+)mI49Vlje07W5j5hVdRrx#tII-DQpKn~^C2RJ>m zM1*h8@Z$@P)GpN+4sq&7G>Eum2a(v)0YNA-2`}l`ii{OgxE}n1I#h(NH+;mN2&l;G zwQ{|8XQco-KupTS4W)TB=w;!Wdg+xdYZ3yA;BJ$ z46K2C^&O8>?^d-IR*^z~3gW8UCi|t&LU=Vj`j51^UZ7(?)`67#!WC3;T6SXHEoF9} z%byrb^gSyt867*)GGz0+icAX{rm1zRIyKwwF|N`0RW+r?4LL_j5ECnwAB9@d;kjktWn6oAmM;?`sBRqrK* z<5Wb$FY#^bS{hVtG^^*>t?O8%Ip`<>cf4`_<+1+PLsj`bc|FZbhdro{Gs|Iz@-zVm zTmo~?rC75kEZE7%K}b=+$WA)oRF>tHGDjK44KxJXiBZR`Uc8vLhYTn9GHQaJI#sK| z{)m|GOboEV0l4w$OL4WZOoWch=}OTPjIJ@z(wG5F?qOpy{deru* z^MXfClrY2N+N6N|(Vs)j0CxHmkxK+y*XC1!TD~b%OZ!Af!Cioy{VM~)&OYB9K=4g% z_}*l-)-4`TOkqZGNDgDfHt@%&N|7$mImUBXd$A@3ZEG_n#pJU@Nk`;lVz3$i0MZv7 zJJSPa!nfDDZlk)!V-REW9@zIC>#Ok=rKsK7d0MTCG)I+{QzU!!u6M(FJer24W44p1 z8^1wa!}vQ}STMSb62<+(0REH#=QkD*x)L6e%GxO97~dv8hi!M7f5W@0sXX7d+a7t3 zcR!VOm%ajqEk4WQ?kF^Di`>I@BS*)8NErDN~k1 z*c@WLM^5m>x=ro8Cf?HRCMV{Yat02@zg8+Mz`@i9Bzovis^@{?RyNpNN*RbjKnx(dkmfDwx7F%~5I}kYa$jtz7 zOQGCf+KZbNj!Z5LVaD&SDl2^$u-z=F8!u2B3P70|eE! z@WNd=k5tps?Ld6eteD^L!Tw^EfZ?t*Ijxcl%_V-_5AkpN>+9*(q}S$oG>JCI_V2Ui zftz;&`F<7Xx)+1=7=Pp9D~rs1=={U-{#gEXh4EWP(kwJ+?zCX)l4KMzmkY-PI$X_y`nM_T#}q;TTtke8 zZJ~(u#&h~t3E}IR;MX9Q+TA9dWF=L)Xa4}LUr1VbYU=AtiSzwq9XsX#2=^hS-qjT{F4busYflcZ^4 z(X|;Oh$#xPN}w_PxuM8sfn3Eq#pPQ4rT+lD%BO957lyntPKz7rv*z5d{Cg_nchvW; zS6G?iwYZMT;2U&iD(S}H4RoIiG<#c%5qqpnbv&&p^3!_}f$S>8XWn=+_Tug2(&L37 zbI4)=9^6!e;braIO1AO^nTP}fkiO*lSFKxK+Qs{bG@GH0hC~X#nKd2Oy!PBl0FV8Y z8{71$<^#)5!aKbU;<&ojB1qNpOi?j!pd{CAtLXM4NHI2n4B*3`v`@89PP}vct5VVK zbz6@%;#aq|?61Q$YU@#(ojOE>`J7{K_kS8(;CU9Iuce-WCZ4wHyAutLi=LGSgRB!( z(}&vOSS?8TXB?d8rZbIVrFLi0IFw1)~}={&%)D2$^i_{BM09NiuCW!cL{b6VKgp|Z%HVQ(r-wAds+cs$(&7kL??ET?Ijuc6 z;r!QjO*}e$F{^(Zl9q4&wRJa>cw)l(Ss2F8k^YSl;g6{Uzt*(wJXzuY03<*qg?4`i z?VEm`DJk3zBTD#PtBb^xeVPRaA=*;^0Ht;7@V`nHuO_!~KA|HnF}$LK?T&w1zoKgz ze2|BZ;mUKj_q&JbS~`}mX=P(1(#m|00VMbOP~=KhK4tiYrd#O#BbwI53PlkhbK9+T zeiYKLd`)E=-`%aInQWnpZRNiz=KdmI+iE(*mv-n^cksP;p9r)?p4a zEPf#PR?=VG#?z{O!?!=yrYj{sQl%(r&ZqW0dnAC-E$Yt~kln0v@$MDND-{6G5Dfv9-b zO1Zj(2}}^e!JN3p@H+~HBDqd}*TOT~T-(oe0tn*(q9<1O#a_SAVV)bC%|Pu$QdL)s zn&{#2MwxqbB#o9wQM3$nTCJ{XVpB3SN>L*_V*@*>i11BhkG36elm7bur{IPg=4K`>zg5aDdy|lvzGy=jK0J zB=~I6s=eLZQ9FIu!Tx5q?|eccmRSrEL|5g8A_jiAtjIi9C8UpWsUpnmac{vq#Ea6H>acU#@6%oq5vU4Mfu1?IG8nM*7~ARk)et)%iN zZ|{>{k?_e7v&iGA!Tlputo-bF~u%n zrE})pe%WG?xcXP4{31=7F#iCqmBo0{FDFoFhd@vBuKxhxg|ow=KuE!7E%;`%=u10k z17!8VJx6L!y2O*)2Q?rcF&yOeG}hj)oUf-fnM7*LLB=-zMwj=1uH+d#HkwHWMo1a< zpmEB^%Kr4gabuF8oO)uI?0Dpn=}rZP7+`1gp|Z?N5J>Mp418?_?*|-#(vSjC36F4Y zLC;EeUJINs{b?9%kgf;-bj<)5{pzx=K>51&rvi5T+kwg8QvevwFb5b0lyQPHf;t)i zR$L$gH%@ccIiR@?eGeGL2Rm{G;tx#H4su_DI&(+~0KrldkUD0CZJ^~(KGbD40u&cM zlqu>La5(1_05Iu;+mTFG!i;>w*R2l30h(CH3RL-j)_@csBPEV0tOhWd&%F&N7%TXi zT#yb5Ym9@p1PlrQQU*)L0Au_;g(h~#h8=sJ)EthSvHdAB6?T2%e@b93GN+|S)kZ<$ zpS0`%iWg=HAn`y9>UiMNVBqo3tv@PHY*b|Yq;Zd0Ko~vxQ?r6HIrXNVDRZ0*aX=Be z`Gv69!KdanZd;K|aIKs#PkJ!B@~0T;F+dJKbTK*lQ2zinR8v%KB$LOcC@h|178%U| zA^Cpi-K7{GcZxa>m!%=VagMYA)y_|PHxtDNJNTpomj1K=XOn@9nh47tdJ0f6oSdH2 z*EowRzcD<}0(BjK3PQvX2&WJc`rzZGBQEwN@rhWR&w*dDaG1$f)@9zp9-84P^6?~K&UOR42o z92_k%0U?xSf$TBbot6>o1$pXoNsKFOUD@yHPg05iIA&4vWKaPVg+N8f$9~3z{o{3nx&`>p%`9 zj5iIMjRKb_PC?`Y*EF(aQKW2+Z~&!f#yP^V8K4PPJTAst7`q%5H0_)oI47w&rtMK8khue(paMPM zKG!IRj5lA-q>KQhZVE>^YH146tYB;hliri4+@Cs*C<0dbxeTZ2NJcO?G(XCUar#pI z=2`$!q^KjGn+J}7(|U!+E9UuNdenrFM=YdrN3A!@j0HYpE+2UIGypo{L&i3oVw%19 z#tl3T&z;%Hrn>ATWS!h%fEGNgW-#Lf_U%r<5vveO3@J4fXrP_FbAy_n=3qi_7LW~8 zaKs-@DhsCzY#CSY@m5?u{Pk>LRZHP7mK8YIxH$Eo4ntW|(|rYDT%lp~6|<_dZzP`h zthti}`_n>a0jWXd-8kvM zJXM>3cU5T=6enq4Akj1O7{JTz~^VY%yrqyyNgd~g0CfCuYNE_V=BK?L$TpL$}cPyxnWxaN$9X#mFNAdDWErURAO9-tHJ zN?&&aZhMhYE(yUS-kfkaIKcFv2XFSHf3T$DjEVqGNyuFO8K)M&z#r0#1?VzQUTK8_ zbB~w5Gyy8lB1BX%!*-4(org@4R1keM~A3W2DBdMs%qW=ILJ!OTuwE!XDjC7}yg(OgL z1vma!F`x+d0z-9Y);u&1n2f-S+!+?XVip@N}yBy|^8-T0atG z-Kas1qAFcLEqm6teQ5@lZ>bHQYVe=j-RN;%JK%o}YPyZmUujDm(Lnfp$7%g*(0p;B$8Vv% z#B$FP;5){$e5Jeb^(M2Hpi8W4T3mMVUumnqYh1guF#1o}R67rd}ft zyxv|$KRV}rG0JarXfCW&8)+EsAcM{;q41;|A^T3Bdv$uJD)6&{r1!u$u7Be1hOHvd zyIzzS{Tsuh&S1-sa}^L2kq6R$}0f zZ08m8?}fC<^}S|0Xd}+%195C(y?<2j72nz8jrA;|jf>UQe=|go2a0@6;hAlkZ6@Mz zcn(9tO5pqEs%SqEZ5h%nc00S6hy1iMoR7l1^TZldx;^7t&mfg^m613NS@tmb`h+nX zsNqLEyp6*BX`-9C^o_5MG%0MEG&pW%l#lgm87=zPHSq@XR+qw;6U}U~sQb#zh9LCg zwOR0{fnfx3E|IT5)8{WDGQU4e*G1yb4*A|0zK&bhn7k#oA5qT~C1OvS{4Z%W*08ao zlJ0N-;N+V1eG2czmX{{OPM-8Ed}dg%tN5PP=NgiJu#0GRmPxmn zeK^H>CckYX>65fFIFJp)pGq%cPm!e?^>vP4lYE~wdwzp)FZNZHo{g!%%!|3zi3)Su zjM|-~u7LLs1lsv-r&81h+wt!t z;CQYN;T5)%dm^RX+*fx_epU01{C<_|*E&6vdRxF^Nf0mmxB18GNDrKK#feKp19_0F zjkUA)g?gWW;d_4%z+)35%7^alJ4dfPSDW~*HEZjbt>ca*M>yCp0QRp;@LqwW=~_e= zI*rsWN9Zu3gV!@CK=_>J0Bbr*P1s{{RZ) zpF%oUNqW8}2{drrG}&LeWChngwat7W@i&L`%{alSU6i;d0QpQp{v+#Nmpr-_p=l)g zeyE7$d1&MS{#;N>S3K(f06*9=#d8JD_}2|IssfUIImxRY0?;nCJv=nGvfJ2(I6%bj zJ^1J<-QR|8wVOvVU##0t+}-~G*RM?Qj*k_NfolWC0|W&9O=#NX1A*~>i|zD1JOEok zq`v9;WFjI4-TgCOH8!LrxiZdt%(wmZUX}6g$4ao0HuB^*61MD@$QT}#Cv z`P4_u4^{9?5o^;KM!~b?jtIE_0KSi-p}c!mLsJzx{Gedn@?L-%rv&J`&d>fmD2-Wyc>})XA=Zcz?uA8FVdrSW|N% zoPgcMP2qhvTh^__dV1YR0Q-muQBZtA@dQ33)!ydT)>}c-WQ~$PD)s*Wg1Ul#!Y>WK z$-NilU+;6&)jx*dap%L{B=E+OJl|n~N%@+2HkU#9{{Tw!ZC_KlnsQ`duC4qP@81>X zyNAQ~Q$%;9fCf+Q^V+_8k4e<^TY_}^efj?YXn$N%hPr{-_zpdDS-eQ>Nob<^q+fE&d@FOQ?py1rKFW)=V+3W7=mmKnguFq0;CRKg<+G`9T0{-YXWs_BGRxwRhb{D_ zjwZR9<%Z)LrdS_-X}cgibK+KnbZuea+pz)MgE`3h*L&cYH zwnu zq1)edpNVM}&UPnZTP!Y_Ou ze)DA_m5X!;yqep3y7GL)`tj*r zLuUr7;VA{cf=DDi9mh4%*?d#g7RjyQvPtJ7{b9~W-~~%=`T@oG;@sQn(<=ZNNJa+( z8REScz)P^AA_h^HjJD>2cIM;2pDW+?UNjAHk-!~QLJ`eF8scYf*llwjA zh=L<>gk*YyR@fE1U3#VDj~J3XpdEm&0_O4j-hYCaD(`{9qh zc|&*yP?F+dERn{lc-(rAS`)Yucv?okxLDne2pnhLyPNGb?=;CQt*zQI8kcD{U4B(sh|0Xkmp5$nF(DJxQy$9`C1WbE>RyHy`KLq`tU$ zf#1viRmZjU_Ja1X-o?6UK*&bU&q1E`zvnEYagkd*);lm7Wb!gyE6=r=zSDcMK62I2 zc%xi~+9PWdW=7zV+uEu4OGXz2-`=*^$KBoDs0|xcyR*|C>NwR&0TrC!kD&Lh8=Yxw zJRhe)=Iq|zy!CE#iqG)|qMDmWWoe%xHp3Cz*D0-CNUo90`<5OM0ggRtZFUDY;->pv zvJyUbFbn-F*8DYQ)|PO^jBG$F&HM?conyq`YLI3NW4O0$_OD)nHm?<{(F>_7;0D^{ z;*rl?rzG_UwL6ffI3!bZ^DtqMdQ=oOhZ+4d(wKK~^KLydY3z1x01xn{u@0)NbC1H9 z4Zz7z4`S0AaI{PA7IlIA_mcO#`yv zsWb)vjAcE*pauJ>^A1U&zHUwk9WhAE6@sgm9Z5Z@BV)TDDaWkC2np9(oKpQ;M)k&ZR zE)I87fZdD=3U$pPeiv;Z6d}pVk@(U!03wd3q5Mro2@XLi_|O0w4b3B*HgQT2k-CN> zZ!`dk*;Dn!IP!l=Kmfq}Y0Hj2xu6F0$sMVf#{<1Tr<#8%Vc=uhfDoJ!#VZe&-DI?1-(9;(SpO*=|Ekl)9cLuXZdS_P!?0yw=`_>_c$eq zJo`}0$k;o^c)=LONW3r{aZE#GlbxLb<92F9QLv2Uu)`7Fn#s53-Gk}}T3Es0hv)mI zfEPPThCC<)M(L&&)tQh&1NhP!a$gsxi0tTOIR2gadFY z!=dX=%ABb*?Z=I(SoJs*(g|4sQm(WB`~=tm+B$%F6s%Z=?&qF5Vv%!@dVncPkmGI! z;Xneo*^!oB;kweKWU*%F9Y4aGw6h|T0*_jLHz+CzAoQRGUBW>77?H*W3mOPOAf3mM zdr_DE7u%kc4d4%zh*5%Q0aF;03=vn5M?BD_p8<|ru{=;4JPZMx;-1cpC(hwW9+V7f zscaOJ5=KZo146W!NZYF98~`|=;m85Jv)p4DG-26UcWjjg3C43k6D(sJ5so_K@rn)u zY%U+ZBIN!iqHaLm+lc3$)cE$}kC(s8z(0imI|PO7JJVf3Zk(Dx#DSmU=}%?^@;Xoh zNCAFQ!w04*-+Mbr=e9ahgZExTw?D(0METot5-@t^fC2Y@afSot#XU(sGcfY;j8u6G z)w7PI)0B;ylcDC23PD50MtXZyT~{isRk-7?dbG|8A%0!K{Hlhnm4na<0OPd}nnynM zLC$LJ@%g@{sL8_Sn2haCAolVG^sYWHl4Flr?JkB;?(bZE>_!`x0CAkv63dbUBw(oR z&1X(Fp?!G-iU5^P-0|*7 zHEzX2+swpu=)`kW$KGI1=~nGj{gv5UuTE$Jq@x7nb4+Y!0jct2Kh7|HX@m?691}nY zta@&tvU{3FjzQH3qyYCgpb26m5#Kc<@Hpx^RB-&fcQqq|2e9iv8X_3mM`;WG^U|_e za5J8xrE1(rqe(>d>59sbm%%D>IL!bw0vD1o^`mz}RZj_;yJ#^EXaZB76m!i>trPozdkRZ%8dS)qYYZM`1F)tBbf3eArV?{g z+FMO|bsfF5Mp+~{P%2$xOTN+WjlQL8CA6JDb;d;|>;)oN@j%Epq>Pg#EAA3d1@!xh zPkMBRZMg&1qJg(A8}O;_7cePa%}5Gdicr`zjA}L}m>rLTuH%CGCT_W_{y4mj>rq!z z(QBCStb_YWLv$5y#4?AvkdA;+)Cw0820y#|zr|B7r!01DZ0(qjBR#7!5T)=>UX<&Z zHy~ZU)j)P00`Z;4hp!!NP)w5jF}b zKmk+tan5VaPmBDUWr6c9zyi1!KJ_toR|DTP$n=yS=zA@t{vp7wBjdHr&9{W!7jVe# zE0)oGeWODft;BbZ_#2u=3_lKPkHs$;X}Z^kQr5*LOg``470LVo%}uqrq2<;$7jR1y z*0PwS9D=8%bi?8wiRFcCZZ&BhA;w4>zwfMOxdC)XL?WiOONp-|F~INt00FBrJt00C z__I{Ahfv*Vc9MbfqhjjL#pvM~8om^!fsu?LgwUbo@D9cj{N zmhsNBLnw?XCKI%NRm1#1@s6Qsuc5J)VGv9Nb;=)ckx-|3a@Y?=@Z366zz&~nZKhmc zZe4&7ea97N#ae?~Xx9ev^3C%b1=x161BsT857_ z2TKx3{4XkljQ7W_Hx`&4EvU(H1^lfXnEA_9*nC~$J6llIeCUj^9T`0vCv`gP`~GI^OMS7POGI}D2T1N%PD6AA6S zQ10q?DoJaBpRWEtD)VoL5^7!-*CEtof;fVc%y_irv;=zrE9#TULg>ta7&GWFT?$tCt=-@f%wa9s4k0lvWCJ`cr6bHazpi_Ve3o7tvgdO})P`Yn1aC z^_AR5$IwQ1c3hlq7xc}?xTw82Ct>+I%$8j4<<$KaBIdjpB;FU zShH(sR&|Z~h+*1)I)hBV*DSQr9@u((zH9u;P@)2O&%;-mT(aFj8cRoF+;vg!T)&9* z3s$i50!Wi>AH6Tf)BK9Ftmx#QRaU!husQsll>~WY=NIxX<9{s zXjYahWo#{075&eY3Uu_WOZ^+ddJgF&iVGts`II^2dk)`)dDfrfpA*`A(YwmMmP{4L zu&6a}6kY3yom5(+qbeDq9FIzcs3miwv$xZp&gOkSBH^6vXLFHST6e@r7RzkVTSOs3 zr!o>r9CWWR`+lz_zHINIhTLS8h=32_QfLXQ&t)Q8wW6bBv%gm#jSMVvUljaHb*^eA zONjyg>i+XeTRs=S)@So#~qXsiCfnr-o33QR)fw5Dn{Y-ua<1>qqK||q_h$b;|-Rsk{x4L zdp{~oVcy(-0Byh4vy^THPl~#v`tOOZQ^|$RzwShl3<3e}Pu90S3u+eHeT~{($cpju z3${L9{{YNao$3}bO42;qijBwDADu3VEw#O@s4hI*XKM7_T6C};oAD#!O^DOx)9hkf zpEPZ058YAi>s%j%wW~M_7n8{T^D}4itgFjwdE@gEH<8N!0KHiwN^pG5`2PT7y-HRC zqVayEX?b+51;?D9#q!sne$JW=tfKc=m?OxnBZwY$9;DZmTZD&+V~PI&-&*MO9b#Q3 zDMpr7l3KCbznWu;>G3FmxHdJ#!oGX+T3S~;(ie8;WTE6kI!$Aqw0FspZKfA z+P=ALmiMUpQ3)8wa%n|0tibjE02cW1Eg+R{pDX>u zInUS9xJy44=UH!z_7!mv_s%2d#O9m&A=*O}Um&B_`d`WOm25LsYK( zTYaxwTwH2kHh$uv`=+vSZIXI6rSU4>($;K7?I~ZEZYz~fi4e^iq|q_{^A!Ns5qEXw z9(&eIsh#J3+I+16)%d5x{{Y)AA-7VIDZpO2`qpQMBhI2siSl6XtXNJX>-Um?)S_|b|rtEVoL}a!_!eqVV!r2yhe4~&oM|?z{03J3dhk|(@+jL0h^6Jv}-R4Sgq^9x+oBkdmIec&o8aboOyAae|n`l z-R!HioE2`{jYQSJ^`8)YP`0(9MUC~+d?~Pp{u2vnbp}<6)mma0^&^4&>zKLKrr;^6{{Y)pk+$gA zsp*h$Kp#SQ*8b61Bv^yY`0~#Er;g_p$xp7_$gL1zADDh(In8-fYuB%XIW3NdaX76D zEqIc9@3lLHx3)tgxx%V-HR@gn@QivK z0_yAuFWho}=bx~xBO4QQOTt&?K)2K9tHA9hs5}Y1fj%f*IX)+E+Y6|&> zELeRTgGxGV;z#95z@%!74_*S}^`P=Gxuag0036d%V~icB#Ga+P ziU39>j$arD10ARhw44);!jLMSHxfrQ(oPhdQYt{KptH^XP}KLFr6x`-K2Gc?0Ihy)&UWIrpchLGtI?n11oXhPJO?^j12VsdQsD{AJ&iuTaRL!X<2Z2r!U^lDl_xRz5f9HQ~-o} z^FbK;)A8xe1aa*^5psB>>DH9|rjt9U0jCG<^`qrH5zRQN^&B-A1bpL~1~VAzz@|2S zrljN70;7L^Pi#;H83zZO5SdJA0 zq#s;TgCHb%ARecj)I~hd20#n%%{YGREx3ip0MG)Hv}7+Vc+Xr@-2pxE{c1lk!V*_; zJrAWRU{tD-Ml+fOIkHX^4tk#SyVOcXa5-5b!*0NEr4$N=Cd zJt$Pb!hyS}2fZ0ynE|?HlsHmJAoj@}C;>7C7EsC$Wi;@ifq0%(;}|BCsUcenlg?>_ zB$m$6pIQJ_kZ-~#%D;KNY0tEwD_a@i5u_vOE=3*-tJR->`mXh^4Gt=dH`&^ z5w~yFq*4m~_kUrChX-duikvLIleM%OYnxK|BhGg*=jT^`>me{{TGFwzmS^`&qm(J-WI{vM$2<;y8uQy}1Z9W!xTG>F z$+og_ysk9tMQo*H8<2rbnC5Z^0;dy<9QCN3i!j1-Rt3my!Hfgccd6$AEkHdD5TOA} zb@iv*!dvAhf;!M6Eyh;>a%sy0w0|hzRkgMRfO}QgV-bP!ftp}f&``&yg3GmiYe!y$ zCCHZIi_7W7NlwCnipZOg?hOc_`lVArDQ`pMRlXfX=2tp*A<|Ei*0%J` zAT76=x3M_DByQS%l?`eHSJ1N0BC~+RlfkB?l&H$?QJ1dJ>nTNC(h@vOr$AyygVlT9EnvKdoXmktM%F(yFz*q@0p}8g?1c-D;OJLeM?&k~7(cYNT?- z(;(Is#|NqW>Sad2>S-w04e0M;f?iTF{`>vvU0YCs<{;5Q7?nrx3dfGwq;vr?O?EnW zfi16W)tdcxw)SpF5=cxS@8CC!+9O5n7la0BCQTSGX@9bWCF3nPz| z{GbkNvVCf2vOw*!PTb%lVDQ??p<6>;^se!dn}7c-C(bKiyyGE1A^1H{rb&BPHb5*Smj& zDZ%_euI&6)@cRrjcPHwD{A-BTJYjFB_=w6-1;CXJi&pqQkm4w!|jmGaR z;18{Jo)FVx)U8t5-gZ=kWR{TQKT7GfZx_pZYbCr9+9WP9^JTGIGNMZiURS;(VvT{q6$!}_s+Wu%!iniD6 zF5#4KhRn+e9 z5W^L`!94<+#akMC+{_iTGm1!(j;#?!vl zaN%?JYJ#lx;n9g1^sbWT!(6#vDA>+djxuq@GT*_TAiCeO!I%A~AW#P(a`N^k^Qy*K z4_&3b>#@1;ZmAdg*ucd^JQJzNaxK3@{uBYq31#A>7Z)q{7}r=l3#(&`f9F$0;Eh&4 zoI~^d4FF+9qTGvrK5e_7=G(iPU`Z8l4n2i+5_nTzxF5U+AMGFhwMG8`2tKpuzwjCc zar0bUF94s;sg{%;Pg?JP;Q`g8lkTqX?&5*)?@%ZAjEVm6G=Sj)J}KU0$Bh2~jdz3L z&ENd?Psq{#01Eo;B+ofs>Itg2T;yZZ%KY~ZYDR@u8(zBe;7vkL<7fJcaPS5A`}_X@ z;3=9+E_wCB$R#J|G@B>#>(T!J;a^-Hq5lBjL<(W}eKY;& zbbk({$2cGEwJ-cDcK-mLvN!uVpe}iu#&OPRrx~wQkKu{_CfW5hI(#&Ue;EG&fRFK@ zE_odhp&b&vmfPXoi2nduS^oguPCqflUXQ@qYJbZ#{(shhx#E`gH&+daV36m~S5u*Q z6H(MKZc4!)x#qoA)5G=_fNY6!Kf78{MHm}Z0*_wxT*#XQitmP)kiW3%Bjo*Q zqi>n>{n}$O2j=^~!?&O3Kn~B{`95Ap=S}ke0OzA^{{VKL2*&L3N=9SeTll}7FeA)i zfLSDQ-*BP0a-b4VPHDvDj&j)hrkG3a-bm-#fEsx1$m&HZXD5(&po6&g9ZeCHFPvkF z1T^j1qyjK$qaZhOdE%Xnp(l_}6oVmi+rB6P;1_NR(qra7HVqq&+{Q7E=9tXQfB-(Y zqyx65IUCq_rz?DfZNWaZ3pZuJH29q44zvLCjevdQo}z-F{{SC8lrs^5fr5P~kf=hxus_0@JFcvfDU%yP6v7)XixxbpH4*wj12A_ za(Jfw!dXcJ+ob?C{$a}uk4ivG9N>?yN^!iZFKPf$i%+4dfPeBLGt4GBFtA9ZfXgp$x5@=9KaXWEjpm(*c+q z@wn!fJ6QfiQmV3{BY-GgcVm)znm{n19R|_sO*}Uvsp6hOtYd2z1oKT(6EMzq4uXIK zgOYmFPeJce5TyE38-dLLHyA%kFivycmpCGT#OHTP078;(P^B^Y(qWEAKaDFWZNTI( zrCi{GPf7q{xbpLZ>DG`p@Zy){Frt+mXv%;{4l(P}fEOGd-%5<-c**D1oVeNvJ!vwe z@BzgDCg9D_Z)#Knk?Tqc2ywG~&06UK0Xc&hFt|_=6 z5lY@q!wq~`Ti`@+vW|#a=l0*n1vvQ zQp^IA$?radU z>C>e&lA(q}2IHDirC0>dBL|Muv8sd{fg~PIdr$*>&CbfX+6Sjfd}@9|6tHe^O*y1z z$WT{z@}?ABp%^o_Z)yO4mUb0r;o4h~yXF-6RQasL;X?eq>LVKPn+V<40-qY~P>gpk zw^{&V607q8gWnx#TmZcMr1S&5NTEO_U!O`+`CNHRAns3E0Ak8K&4oBA^JlrIhLSk~ z7Yvxr-Jf=aiAr#Uoae4_PmT7+^5Nu@s^ce$01=6kIrhaPA<6pf#R{V%-@Oh;nT+-4 zGyvBU3<3ZGm06{5Nx%aOjD&T;6F}it9Y~<^8~e;hx5D$2B6N zj1os3d7uV7q=XU>4l|r}sU!X5_;Z9r`9(%gnHyjYp#AS^kc>z+@HPed(g8#6fkAf9 zBN(i0Y-JB8KJ~K8gd~up4hXD`T?~p_2P9-;y#R63vE6_LR+w>~m8~_Lta4+jvsp^R z1qh}FON?|ms~mK3gPbo~f0W#j7H9&y z^#my9r`kkg1CL5{a6WV7ns~LiAM(iH&;Q^sRxXUdh5)$@x{K@Ybl@{gHzE z&<8p8cON@_+P!YOP*&o2V^<>r*f8|Sq?5w>)L(kSPrwQQ%!>iRs@KrG({4)Mhr=4o zhl?3k>a{=oA{y&|%eFt>J7~BZfwpn}^)K1yZmPA`{{X@hu7A%Mzwh9wt^5VA&Hk2vKispO zzwMc?VA8xNqiNV^?fmB-#QfI0aKy4}{{Y`6gz)~mC*0HL z{1n%{JPGo<`G4(kno;GCyBZJp37`)LJ{#8$2Tq^zqy76C-qijkz0i|LBz)B;U_4461bBuyH^*$F@ju~LV(_1evE}(~kM^Cvt$QGqvDDKE zBdq(AraqyGSfdEy`WGB z^3pXkMg~p>7#fnfPb(h`wNLqJcM5->txP@`>OgUS5B>9AxfZVk(3oy*5Uw%PpU$%z z%SnHBzF+%0w@^vvar`j5m;OFA6;Jn9{{XHkRrp;p{{X4hNcyS&02=R%hoA7NporXm z%T1JA4?h0@g>!eDonbTF>_6j3ejBm-+OR+N&;J0gUV$VVGtO!PF-5@QV)$%i{{UC3 z5BvB30N1VUE8+KrY@-8NYs>kYp)OEo*eM^@yIl`Tj_%vfxS##qt@mo4t!peZ1bG%j zA9c9R0C2jG!`&$-XVb5)p@{U3W*8rhKScOmnw+nlUE@XPAwz#rU4^8UaZCP`o4%`> zv#CpAEM8@z2<99Orv#4loU8{gsQe|ju!qlWX697?0AT?Brn6V!?v^=QyS@Ja-X%}; zuCeZ zd=I6~IfX2oF>G!!IL>QwNG=S%U`O)L*FTj4XODo+lY3-Rh!p1dZ=u>nmfbV|0Cc(k z02-=1Goyd2k57*;>}y!baS6<`WWVsAyx&T(Yh|dP-^FI%??3oe0hw*#oj*=(?O_WM z(12U{)Yq}wUM9<{XiAQNsN?ggC%T?T*xS6%?w}@{G#9%AHJtum_l#sy0-l@UJtFd6 zboFHZ@f=ZoqIh-*78tbX=6v7;k9Re(7OwEdu*8a)P^WZxHE+V#mKKrCCD{?&7ddtr zmBqFMeQ{=U}NSWT<<6mBt z91*nGbsr-A?D0jw5-7JX?$j|E-HwzjD>UIeh|W5(9Vr$+zQFKK6lR5E9^yaUJkkQp zmhjuhoFN^t#b>)G0fzF;&<>RH#{})%H-1z<2*VqTbnl7)2E{xgkEy3D+hK9X-m9K% zoxQTGF|5=702536KT4@9i6q`Y=9*wI$WPBJ05O2RwD(5&Ng;O*DH8yx!kwppd(^W^ zADj)@#yuzkEU!dgo24H)>(ui>{{Uq2Ii$xwGjr0YK&64;jQh~Ro9`$!D~Qx!uHpUa zh^RkzEGPl+G=>H+#-p4Z^{DnDkeB06eaKf8zfD3M41{pD*{fe@X$*dSe}m z&l+#r{62%ZrUFP@bWP%u?~m?NvmqXzH}P?rX#W7dzr9RCs3V+nQYa*612n}0IRN6O zQOaaI3`+;%z&;(&I+t!}ofN(ns z5QYbyhMaQ5jMD-%CxAG>p_mK;Gm}6;yCn6bBY;<&Py&Au#~)fnY#*3%Jt3e_3a2MM=p!8mKD6P^(0lbX04ZGa`MTrYfxE5)0o?Yb z;{@b>J!k6Af`V6*>(tVK0^ksH*w6!f)*~D7nrU6#TctRn`gEoh z!TQhxvVQJyN4Hu!bJl^^Jt+V_LCNPMr896i3VQXY2Ht*Nxxp0I8yf+C8ejuxja7Id zvT0@cvA1v5qjn%4mz>g+LdRx69GU=WQ_f8{pc$v1ZgEZOIpCTAIv<*i*&I=hdFK>h zVD`-bI280di1ntPoMR%Iq4@|SI2~B?NSlZxW1h4CxCH?tARhFG8yS~y2j7Ya3$%`X zX--O#F@Zo4hy5r~lb*TsrzprgV>F|tH*}x|lhM z0G4|b`=VT*&VVG7%uFd=qd6oRXav4b9OjrAj^r_UYLSkoIW;IoVY{#Z3II;OFE~8X zs>q}SK-_baNZ)wm?hENmR0Rt-UejMU4q zRA+OO&`<(6U`XgkY}1p?AZ}2=_1x6bS9x~;x#J7kk;H6EvT}O!Knh9T5S)S3^{HZ$ zXe+c54_b|gSc;-;$@R@R7x{xnm0{O30KY1+APkY8S~ryokO?QAC^>IAw@Dl zw+`cufc55-oPZ+S_*0ex9QsfK1VQ%`4Bgj{{PX;JQ)%!6xrX7{lnhnST^ILYWc}cAgG~;lvE{fvpl~PyI9glA6~twgjyDli=F?y# zgiXNq6{u1E=OuH+LFMvtNXKGvKpBap#f{rg{{XVpBpPL*KRv8R@Tgv9mxfGV| z`}W^F8&!Uvm#qLt7L}*I?bgxdf7z=M>3Vn{HI1`-?FadakUK1Gh0i}H9G_aan8(Uj z``v%eXabIZ*)B}RLfYx-sJ{sR5s$w@AEhL#WF$j^ZqmegCB>q zq4WKYH2(m1{3*|-K!XWwZpr*VD9QZmN^-w<1O5P*#a5Yj0gRkb1z5D}Cc_&`agYvt zu|#$-dHY0G>-CSVSR8!KPEXz)_{drSZ`dt%W$jg1oE@Zqewe2XKHVGlFm2ByhW`K> zvL%f`X%KE406Np63J6vN5ONqWKb~j;t69Qh1y~?|MdbS$E$r<}>=7!S`?;${LY;`) zhq&)dEX(smL}#Yv1CPVK05Dow${WhJN88-52k2>uX%RbJ2q*Ymum{qmaHo_5j#~tP z--kg;z|L3T6t0evYZgyk&l>D)Rv5bK<+-20Glzj@T{yqAII97 zk%C`)Gk>#_pT`EIQiwK>y|=9@{LAy0{{XEq2*G&A8964J5OdUn#&g9uJCC$RRXVC7OgDE{%KaIlKY z`qF@RaB;h?4{Bqv!*E+?2BhN!x2_mq3{h|+Y!0WsbL&ssypf;wK&FDus;sNA1_2%E z;1V-{ri*~&AbVgXYaScJDyk=710t=n2Pj(vXl20|V(+ ziGe=q1MA+L4ZP!MjS;&ZlmS*YAnrzBM{!dL-M&ej9QSU&oh+78LYvZ1-|W?Mlh>^P zSd!i&2J3bi{w`?~$@{18ZTsH!3~A}b0RWTdh0 zm0t8l$r0R&G7nz$qW89UFnMxClEWFtG=QUNUY{j^ch&u+zt;)!blQZwTfAMu-|!wZx0S=@x{6_%_ctn z?!SdWMm4R(7SRpqyNnY_A~nph$rKVQDamCVRl9h!?LC<;5KQ?XWE@miw@|o2XPDFu zfSgkiB(mx9fTkvFe-S+9qtmXftR|h}QbFmF-lMd%y}MB*y{TpO&N-s$((c_+F0G0y zbznDtDrFXp-TthAT3U$@cIl7AnrmrVykIk09QpEDm$()UaF0c{qX| z{aTr2of}EBon)Hq7}Rvya7|p2do48>Ss>@DHzulH>88>H{++#v;ShDI_V#zTQYys* z91eFJ3IMefQfg(TmPSZZy7e^;&7wvKkIWcuGI^%l{ifWQ*bvRYRBZlL3{pHng9m8~ zeb(wel!+58ACZyMnqMux=peVDt1V@Gh;C%J*oV6we=4l9HsW6({U{lF-IC7SU=%&c zH3hxwD|qtBADVk@9Gb4#m+zg~=rdB=PKeA^R50KYC;`{Hl&oBNPNer8ELtIrphBans(KssZP+qVBk^`_~;d}){_Ko;IiYdy(q#JBRI$FKnOFOGYp?W(w;`p)q&fZK=$>(>Wpl5)m1Ky0|=HE%V_(APJ3CQd7emJCNPV;$x@Ez2r+n>UM zeR%vR0zZ`CazPo*0~iEjlZ?{wobJi>r1^OH3HP7}G-Mx?@!X150Dl$_YDRu|Lyq{R zKX>IDeFIPefwY1RG`Tqky)ZM3?x}cUzVrZt<>U4Ar95(e>FGu@-)j0$K5hWO?r8`I zLcE;wMsm402d6Z5z{tf1@8g4t0BOkUw12xv(~zg?DR}-A+x4JhJxHJg2dM68j>Lua zH1;D6jr0c^Py%^`ugC!Ybl)>09Zex1zt6$;rw+L4KUx5S zX2Ic&H6|D!sWmI6;mE}@HYi9KGyw2;C6BJj8Fpr3^{+oke{1@P8D5yJd^(yf3{%~ zLsm_0(|nst$?cc9k8&+{Qc}q!mn62_!$wq^8ADo&6?3UnN+Ai!E!Rfwmt|OT%PqNn zf6sS+J+D3coX6MpiiK=R+bKv_A6m3N!Y4zS03$ zq4e$^dpNaxTGo>hyvHz%xpNlww-_el>KY-{+atjx%rR5TD}BN)HjDL9Z)fm~W)S@tEzuM}2EMn~?^Q8d zlyk*}CgGi{(($qQV%`23vTdu9Zz5C=bk_(?XJb?HQF1eNiU#+CoxzjJ1l*j>r_Ij3iPse`M1V zBC$ZvMXQF>>W#*aRrYD*6IvCr?R2k_6fz=U!a*U3P@724gBWnT+z*0Nn+o^#{B?;x z=nmis)z(0+b&+x3)`FIWm_@1Nki-M*;vviB&wd$=Wq8DA8#8*vbSv+jA&4Ancb?)e zdNVv7lIq)D3K3MkQJ}6iqCSd~47^b%6b&S<_^cP#U2nh6^}R9C5E9@x;Vbazb3V<& z_Q;y%+opOF4#xvwk5l>57pvw^Zlq>iwkvPG*pp>}@t++^SMnz90jbC?SpfBzYUTLO&?e-_MRF%x1C?{?)2xE2QF(MsyrMZs*}%QlyEsQ zb%DEHvaI`yPyEOrV)n_{TtO$K?_ z)JK>Ikb2(m^>PI@YWKGxhn|hX;U*p4Pd!!6M-%^Yp3W;-g$__)c*#x~1uSaTA+LJn z*4MGeff0_(g`wx&>1R9>jv$D+;IZB8hs_-&Zs@Mfq;7MR&;NsH zn7sT!{6?u-8U1NOJn7YMkj2pY@Ee_=2Dv+jN&D{(King22+0lT&N!C@$MIqGGrl9w z+83pcJ6O8kB1AnpeLUN=wUq_S^b|1+jP@l2{PiTi_oR~(t?r(wJ=O+qcB(>_-KERN z*v#1hr|P!-p%$J9g-GvjE>IKwb8V{2RlI)qa-mj6zISW+ALkCe^Ij%~h?2CA9dtZm zwnN2rYy5caE1orUcfR)C8}}@D#n@IaFs00sA$cq{>V@yF-D`2}H0U8RZw<~)ufnYq#cuL7nN5b(Q9PN_!@!4`InG#Wmt2eL&v#c;kMYsr95-ma?X&@7jn_(U3 zv->mC>-|LtzhH3r`~V88XT$B7Yo zMNjzCKoWn}R?+HWUB)ON7cgjG`ITTl$`Uj{gufhZHvXIdpb4h4W-9g0<9TdgA55y5 z#S-L0a=Z<_vRZ~o5NR;eZpJD@GZ9URb^O^Bz%dzhrFzB!?#h!dhq^Jnjf%&IQUA56 z(3^Ggp?J$~_M$0FzrzL600PGnJeDj#?vi!3Qmoz=Tij&dZi2xJ+#1&?fXaQfx|QNs z0ay51up)5RwB<(hoomNW_K{>QOb$UQ3+b%B!a=oP1Rlgj1(f1RRw&1rI z;eK}@YtkbTEEFj^mT7kQR@3p_7-!U4Z^6pNjH9(n+F{#~1vR}sRrmHe7_XhY2e-M3 zSux@0#(yY(0VBh91?@&Gqcg1LjoXdeMT{3G79F_jg=+gwUS02ao3!~YqTpfxPxa!1 zodo;kLQCR5RXhD-Ad^jR#xJ*wmxDg&__vLaE3_eNY`ZD!dzwzJb!un$F7iI%XSIu; zk(R$^dw%11x|U_?HtOZ-*M?+qsm`5r5_cy1NfpL)UxwT85 z-?Ms;&UvZ@)&4%Z9Jn{tRh@nrCuA%QTQy-p=7leLJ_t)zup~`E0A3 zZEF76ryo7M4d)JuM)p)JiW?wj)_Pf zy7bFw58FgTG|u(;hun&5H}>4qR5Vfl#(AJYjazireL_N9D7?VhR?X&Pr47S$CL#0qyL#v(oZU^H)xU>;caf#@4=!aIs!WHkSR*BmN1scw4%bX^;8ArAJL4f)5NMR zP9oJLg#^j4I@^JLkc4eNI+mFaJZ=^}?UfJgS8lpBtpY4)WmI6%G^pfpVLP}@Y)ID+^kJ$9Fg zI>H}oKuk>Rb^xMUuvkuF%Rl%=S$>2Yc45=W6M@`k?>vKt_+l4U(mE4+#!a$x-U0-@ zT^Fg=uFHJ9NUXA4@l(>lyDgZKS*y{XLssc&mo)s91c9AJcY!04cM0vuDshU1#Vjr;+*G$oNelasfa3&E_# zY(I=GkZ1R)rWmrP0hlE2jAf}CdoVqtoh37&8rDWyDh?+I9fu&l{82d|ZAprS=pHOv zkEE9EX>WK;dvAqWwPA=q1ULVIp&wD?vo7Ei{u4}V1W+vr0ruTJcJ^k1fB+Q9pE6EF z)>xys(J2-tsxK`Lc60J-KSC|5K%~`N1TH_qkiJ$FyxPp6Y=Nic@Duanu>n8&Z)~~r zPSUEj^_^JU;)YoLZWwve4?Al7FrwrTgz;_f@8yt?>%{b4|c zphj!9;O5R~?dWzfV9=>6>zGcBWMlK(Pgc|#_ukg2P(=Dg*f_u5Zb!H!=sGP9X|bry z$eger?29${y(St0*rXxabvo3WN11)vlobdcn>0IY%msGJo`{c)0_zOuOD*r_pV}IU7k)N};yn>p5YVDPXne>BfC>5?yu$FWUCoO+>TF)<6_vCL?fD zFaO4j%e+W9d&{lh8s3kwOM4B+ASleg8~&1$2nke~PS z(jDaHLaQr~NrV))3>ksoi43pj6~v9bBhMBJU_XvH=}J`7m}%~NQFpHfYf{Y(UW6tM zwS3IL=`e#~GI#kic*(4d!vgyfbBzKTNs9N-d>E2zV;tdaNHZ6Gl)UP^EX#C&ed7s~ z37B|B$05~Ei-y=)i$oP3@P)h&79F(@yqKS1*VDh~04@7WYAvVo-&tTVM=j<@MRGH_ zHYFa}aC)vaOG9svW|9RcJv2nfZh7nMjHr)f@KJJQr;|sAQwT4^X*T->_LbL(2DQ6| zfGCgaJR-gFw@`>6CiR)HH#X=EH_|Gg=vj0z(Ua zK{9oV_qj+n*O4^7l>&#vr5!KH4 z==ay$RQ3k{7VAUUBv?>nP}S0MWh`}=sYY2?EnKS3y~9am?-6S;5}w5i_*>JWE=b&L z^G0f0%73SvFz|g#w{z|?8<;Z}ba~=PGx=zz5nBvc)`eSKANbi&^v?EBKH=F(KP+ag zu=&KIa-&j4VK@#Q7sXC}pgNob9Z`{seT#=qYkduA*IrTGZkSDR-MBuSa6pmDW$py9 zfd^3C^V&?l(vGSnfzW~B;fC5;b?T5$e|V)=sK7<>U7TEq*t_oqUGQG#b2rY837zxK z;-?TMZ;hmm3Ih7#qf!atZL_xK^+VEB3nH_}+Evu<;3sKoB=>xC%R}s|2Q8ZuB&3E~ z)!j)hE!v4mq*==m#}aEp-B3=r^}_inEo2sMh`6H+SyHIkjP7YAu3L=%DY^GOZx`a^ z``)`0u&AaJ5?2&@#@Mj+DCbH<{n zjHbdUmVJLcr@;6ed}z`5Zl01 zy3-BBUBAk(;wyA!Qdwbe!#}JfAq$Kwk2*~u)Gak*$H>AOiw$~Wt@DZYBE;NS0l}l zJiGl9hsChfj4i|`{GsO#pFgQ4Uq0C5%?&S98T#t7`eZ!jDh;}F(gDW;$3=hMBECh| zGr1Wm6MlPB*W^P8QH8LIull+(cJ1lh+|o1R&duKVP(S)1*U z03k8OWEG+{o&}HB?|a|vopD^t)-?UmUsqFw;upE)K@3FP(BIv~b${sTO0lf^bNm3y zEs|@&CtngwGIV#?Rr$b#)AZogM{=L(w%S$39=}=|hLJh<4xB&yp#6QknsH9auuE^V z^~&xq%6C(cc$`IVGxlp+-X34{D%dk}?V!SJke_G#-BLGveA32(+WA|j7Ve(V@`)Xv z<-Ao2P(On8YZ33+yh?(KM_=;<-+7`fZqZ%TpTbiW612U3L(&5WPy@9o-ZWdZ*$x3x z09#;QcyDPk`n=n|)bL8_JbQ2>cw5cbC>w;Pn3!}_Ec3S+L;nJ|i{~6CH8yp@6c{~R zGK=_U;_|%m4AyrjAfa#RslBG7)K316rt|1{D-ru}Ds%IFpfonhva{DiEJo(K7VfRm zX|-r(;`xfD;YX>zExv7*o?W)Q__V+*rW@*Uny_IA3d_(_wnv-m+Du2?xv*Pf_ zo)^4R70IIy{yrqPnq>RK#4eQZ^%`1m#vGh~ohV$WaK$7QQi8bnk?- zu6~hXg3Hj&>U!A2e|$FiA_dxpAJ@3M7XY z9x1=to?&SqE$$Ik)Tnq*VPU)3C~DI|aD&@3uc+}QdBSyT#SeAE^nAWd|K1d0%bbi+ zGqPh~FL)X;^f_WcPq$v7oml(n-?r}@7)SPccA=+KTE-M`i1C&#aDr7jrk$bsV<@k60Imix?@?7@374CmJHYZr>GAs>U~!kflHgnU zY8mmW<_)?d4Plc#b@S;9$|94|)WKiM5D1#)M$`AAt)fd{g#miUNFnwFZJUEY1`#B& zLyNkJ!qPmvlDm96jcnCmxwy0*s!XBn+ zSj0>uF7se109;i|d)~&wum5-9WODti4MNBYWNp)t91c5fT$%rB$%(w63;_QE(T}@8 z|H}AjrnozB^@0hS4J6ba?_dy;)CpEl3dvfU8;Tdbl57w;O%EM2skV2f*%MSsKd1Hr zDG(YT1`@Zq#)sRibU6&>2Mc4b`IQw6;UVEKV<2E`pX14J63z$Lg`~WoWu$zi^B{ou zoJCdwEDX3Vp8Ba2tpZ+(nP}#GSE-Q=Ekdqn#JO%n7?`By*?7y6xXcI?OW-V4t&(Oy zP9f0Rmf1(I;Q!Ggjx1S);5;ezt~x+9Dt7tcPoiyI^O9^>%S6KSX;Ed<83yVGcb^fN zCD1zbWm0s~0WT5`A-8rp+6|moMXxrh`Caq5)vj6HN0OjVKg%faHgp#L)m#|bmz5Xd zSQiwc^2E9ozcRS@B+ityr5yAcbL2%t-AFpP1im)>1M6*vtq58&ocGs`~njfx@q zOeZeHdfnEbm?cy!gIItVI(Y`y^ST|&7hAUdL+fBwlig5dKo&u?GHrk~mkRC?P-*Hp zRn@sL3OX*jFlz7hPR#+LbsbzzOeEw4KM^lBpwT||(J9!OxpZ3fx`SzFjFTqhB!mt+ zMbdXsvfzr zLH;8*aHS!5#vZDntBJibLoH;~M~Zyh`X=vCm2DOhDFOzs069&Pof(~z`+VCZl0Lvg zj*cwIX6R2aQDHwdN1P!Z05Jg-(IH6k4@;Y)jFc+cO_dtD4CR8vI1n|7oO7?tGbFa}xWL`k^rKNi+VI%~zolzhmt| z@`Jp?skIILy_{;F62}CvTT8>TZbzGZa@Hfvv3j|mkc-uV^+vWfB%M3tN>QIfsdmt8 zS!M}_z4wT$K$B^G2l|kHqDqj|jFV?U%(vF&F(fmc!o%X8YPlQ~%V>AuvjGEXklc{J zD4!V*7m)fD(}PO(^a;YoDSu7ByX{Hij0KPnm!#Wh@!%yz!EjZ#pTslh{XCR>;bZxM0nJ%z0%`y5 zParg}X2xnZJ++xSFl)7ExHDW=+9*}!2A95w4bjtq2z2Y|!F%M&&WK24OSVxL8eqSl z8$=yN2Co_BeSNa8TCol%z|{pi&IaYGuMLn4T@YQVZ?5=9Kgv>i$Sy+slFHU= zeQ1pLJIg7AO?&b4y3Z?lXL_hmpWJ9~u!k@5xPrm8=GN}gQxs@zCJR)2Dc;LBMT?vZ`2jKLJk+3GzAB%x@r z)!ncxn@TJ!a&6W+gC(0Rw-XS$OhS?LH@k&I_{^JYtdo!-*~f#1p<~Pwf+G8ytB~YM ztYKn3TY$@y0^7o#<)$DfMY|&#Vd;&q{btM`owk|;Z8|N6lR7BCLvCnj0IlFVtO3k0 zgf!PfZI4<_gRI@FK$4w4+0F?+=O5&~z;FfDa9~fJYH9#NuNj0^K~jf5zggg}&kUsi z`XVNx-+CC}p8%m~QDqZi;iV9EZi~(#;kUk|vDh0jy}KYt7+xcQ_)H^3tE-#i8-4w8X1c+c;ft->@6G*dPZ!1v{6?=~wBo}yOPyTCkMBd8 zjFl9Sdv@J}cgq2dqgnx#jcCGhRA_@*?YbM|;n7zg9_c#njw40yBWv`#>zl=fx85B~ z`MkWl14bb3B|!QG(%cbB38z|dn3~I<%HK=E-v`LRYFtvrtR-KYO;QVK2j~7*^!|R^ zU~26b5M7~9`*rA6bJ&+SVs3Z^Yz6v;o%R*=KX2=Amz|Ddht4Y5f8jt?D88*JCdY_% za!JP@4*v`I${GD?$}ifvv)~c6n|I8)LE*8bJLt1aQO|J}>Ng&tIe_KSsty^vEQP_6 z_w|r{Wv5c4MENbKBiVASwJ2Et8hr?`;HCHUat@$x6}&rod+tZql-rA-V@K|UwZBpD zVTmYaxlIpu6&E;mp=CEkvL{eay^f7kb}g+H*VS!Jx{y2(x0fvJS-AY%s+N4rll^$* zKwU@5xA(L?JqwI8!E^dOWuP*$x`BW}@B6;KmD9Tql+6_yW>*U+rn`gjE#k9h=+Y>? zM#TfK+=tut3ZVCI6@2$UQkiri=+Wu0M(xzn&U3q&i<#)=cF;7Xs0A5qn@%I35%Trc z6U$zP`No~EbqY3S)*DfqDc;AO+$TRCG6xNot!lUvS8h&%P<<-g(F%5V`HO7a&C-lPwLG@!5BfEq zSe3gLO{Q>QGeubGie_HtV~X`Vw-EUne+RP+i=M?sK;zbUYyy)z8OB!C5=jV{ZK(%x zt60f!SOQLn1hBR{5}KKaUNEc<>GHC-34y)gt_M2)jE;7IT{ej18}-+SBw1lW2wz)P zQ}=mdi>z1TG7U+MNoN3dW_;N&Zg+mjMo8q(5r=%SE&f{oyV`EyP*_WifH%| znkYgU&E3CULI4r$LnN7IP9|jMhb8=-Iy^)fVwO9gQyCOHgg?l6P~oHuOuif;+l){W zaLCWmp^W{e&Sa`T#ExT%0lBAr7XrTQtJOsrI>m!2dWeR&N35-)BUlWj~XXBwFqAkrfe6#Q5 zno&t;g`R7}%|=C0-{ra>nrRoDVFq|1nTXX1lvJfqSEy~LkO&imw~(w*N@>wDiklg+ zn@;m$66$)Zh3`XzLTV~m5c?%SE2ih+z-u>G&uGcU|5afGc3svTY4xqfk3#X1ue5Me zAS+O6!L#f$36Xjw8d_$FOrLa4ehYVL&XgrMRCp%W9DV&6@w3$OlGy@W71HeF52!9* z%#qLe;SYI;+Ey`zkpDbst=n`mCV(hctifoUo198b+}h#1yq)R2)(Rl17%!4o_QpsI z9j;b^GhU_czwiV*#OSDoJYWNAVJO2bCqe!+HqC}8N)UFO86%VKlz@Hk+y&*7SwgiQ zKWbqXahKqHo4CYXXh5+Ym@EzEGq`0KZ>#GH%(^eq0M%x-}O%J6{L&};#FYn`i`Nsjzt7R-b!r0!u zVe3WDVPpze<$#EsZ`NsFsg_2Svpx@nJ| zs=kAe?5UUCxc!En>Y?VyFUN0vn_VSd|G4l+=!Xk~_dEr`F@FOpA(h|-O^WH40=B4)LptImtufLv*uT&G zTRn-OTq@-7L-YhF;@dJyVNoR2cspkvcxA(OL-D*i6w!AY3a+@T9f~{aF{eqZH{3iLJiM7-^&T zfpe@~a=a%6>LB(Yu{qjr`_1M%P%KM6wx%);R@R9tIhj?dsxNdnMHz}~*`RyiPz-*J^g}IrIc;P@FC7zBW{y_Om?%0+ln6tl7n{8IBLm4#cKssn2vHuvTrO5&9#LrWL zahts<(V!@E%_Bc(d6~|JGsgx+)!pJf9L>?#n0xN0Mh1(dC&yEJLAiDTrF|(XBrpT^ zRk> zD7D-XFJYr<_0;TPGpM121WZ=szp=sM$f}KgB)FVdMnoWJio5y5;7IH*2{4X#C0^FlP5flIIEI>|B?&njI z^ceX+sg~nK-^>AB!ya(gLQ?_^<3O$9(GDS?(vU89{ZC`Ppw1YE#nTia-2!!UYl79o zJ3cTd_;8gbMj(r4Xxn9Ze~O>dk`!jeYmOluAm*SPgua6~XsZZGI8Bat#z6pNg$GR* zpff^2b+3tMlm4qq1FIunnb(eNgSucS+qXF&ZUDTiK({GcPl^HW3nlKp1gFvAg&V2h zw~|3!n-`tkvcccb@KvMPU41#fwEojhQp5=dei;-$tMbJ=4%A!Hc&1RY1L=fHe1{>d hI^q@n9jvrjHvzy;|4;k2B#HKm^>%y5I#Q{~{{senDn$SQ literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32g030-tiny-board/project.uvoptx b/bsp/stm32/stm32g030-tiny-board/project.uvoptx new file mode 100644 index 00000000000..d2448879c64 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/project.uvoptx @@ -0,0 +1,1133 @@ + + + + 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 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U4700420007000032434B514E -O206 -SF1800 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM) + + + + + 0 + 0 + 31 + 1 +
134249824
+ 0 + 0 + 0 + 0 + 0 + 1 + applications\main.c + + \\rt_thread\applications/main.c\31 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 1800000 + +
+
+ + + Applications + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Compiler + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cctype.c + cctype.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstdlib.c + cstdlib.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstring.c + cstring.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\ctime.c + ctime.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cunistd.c + cunistd.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cwchar.c + cwchar.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\core\device.c + device.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_comm.c + completion_comm.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_up.c + completion_up.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\condvar.c + condvar.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\pin\dev_pin.c + dev_pin.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\dev_serial.c + dev_serial.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 4 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + 4 + 25 + 2 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\arm\startup_stm32g030xx.s + startup_stm32g030xx.s + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32g0xx_hal_msp.c + stm32g0xx_hal_msp.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_parse.c + msh_parse.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu_up.c + cpu_up.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\defunct.c + defunct.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_comm.c + scheduler_comm.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_up.c + scheduler_up.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + klibc + 0 + 0 + 0 + 0 + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstring.c + kstring.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstdio.c + kstdio.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kerrno.c + kerrno.c + 0 + 0 + + + + + libcpu + 0 + 0 + 0 + 0 + + 8 + 50 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 8 + 51 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 8 + 52 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m0\context_rvds.S + context_rvds.S + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m0\cpuport.c + cpuport.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 9 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c + stm32g0xx_hal.c + 0 + 0 + + + 9 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_usart_ex.c + stm32g0xx_hal_usart_ex.c + 0 + 0 + + + 9 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c + stm32g0xx_hal_flash.c + 0 + 0 + + + 9 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c + system_stm32g0xx.c + 0 + 0 + + + 9 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c + stm32g0xx_hal_pwr.c + 0 + 0 + + + 9 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c + stm32g0xx_hal_gpio.c + 0 + 0 + + + 9 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c + stm32g0xx_hal_uart.c + 0 + 0 + + + 9 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c + stm32g0xx_hal_uart_ex.c + 0 + 0 + + + 9 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c + stm32g0xx_hal_cortex.c + 0 + 0 + + + 9 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c + stm32g0xx_hal_rcc_ex.c + 0 + 0 + + + 9 + 64 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c + stm32g0xx_hal_flash_ex.c + 0 + 0 + + + 9 + 65 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c + stm32g0xx_hal_dma_ex.c + 0 + 0 + + + 9 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c + stm32g0xx_hal_pwr_ex.c + 0 + 0 + + + 9 + 67 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_usart.c + stm32g0xx_ll_usart.c + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c + stm32g0xx_hal_dma.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cec.c + stm32g0xx_hal_cec.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c + stm32g0xx_hal_rcc.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32g030-tiny-board/project.uvprojx b/bsp/stm32/stm32g030-tiny-board/project.uvprojx new file mode 100644 index 00000000000..361322ce9f2 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/project.uvprojx @@ -0,0 +1,2180 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32G030C8Tx + STMicroelectronics + Keil.STM32G0xx_DFP.1.2.0 + https://www.keil.com/pack/ + IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM)) + 0 + $$Device:STM32G030C8Tx$Drivers\CMSIS\Device\ST\STM32G0xx\Include\stm32g0xx.h + + + + + + + + + + $$Device:STM32G030C8Tx$CMSIS\SVD\STM32G030.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 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP-MPU + DARMCM1.DLL + -pCM0+ + SARMCM3.DLL + -MPU + TARMCM1.DLL + -pCM0+ + + + + 1 + 0 + 0 + 0 + 16 + + + + + 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-M0+" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 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 + 0x2000 + + + 1 + 0x8000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x10000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x2000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, RT_USING_ARMLIBC, STM32G030xx, RT_USING_LIBC, __STDC_LIMIT_MACROS, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\CMSIS\Include;..\..\..\components\drivers\smp_call;..\..\..\components\libc\posix\io\eventfd;..\libraries\HAL_Drivers\drivers\config;..\..\..\components\drivers\include;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension;..\..\..\components\finsh;..\libraries\HAL_Drivers;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\epoll;..\..\..\libcpu\arm\cortex-m0;..\..\..\components\libc\posix\ipc;board\CubeMX_Config\Inc;..\..\..\components\libc\posix\io\poll;..\..\..\components\drivers\phy;..\..\..\components\libc\compilers\common\include;..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Inc;..\..\..\include;..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Include;.;board;..\libraries\HAL_Drivers\drivers;..\..\..\components\libc\compilers\common\extension\fcntl\octal + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 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 + + + 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 + + + cunistd.c + 1 + ..\..\..\components\libc\compilers\common\cunistd.c + + + cwchar.c + 1 + ..\..\..\components\libc\compilers\common\cwchar.c + + + + + DeviceDrivers + + + device.c + 1 + ..\..\..\components\drivers\core\device.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_comm.c + 1 + ..\..\..\components\drivers\ipc\completion_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_up.c + 1 + ..\..\..\components\drivers\ipc\completion_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + condvar.c + 1 + ..\..\..\components\drivers\ipc\condvar.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_pin.c + 1 + ..\..\..\components\drivers\pin\dev_pin.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_serial.c + 1 + ..\..\..\components\drivers\serial\dev_serial.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + + + Drivers + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + startup_stm32g030xx.s + 2 + ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\arm\startup_stm32g030xx.s + + + stm32g0xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32g0xx_hal_msp.c + + + board.c + 1 + board\board.c + + + + + Finsh + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + components.c + 1 + ..\..\..\src\components.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + cpu_up.c + 1 + ..\..\..\src\cpu_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + defunct.c + 1 + ..\..\..\src\defunct.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + object.c + 1 + ..\..\..\src\object.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_comm.c + 1 + ..\..\..\src\scheduler_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_up.c + 1 + ..\..\..\src\scheduler_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + + + klibc + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.c + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.c + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + + + libcpu + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m0\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m0\cpuport.c + + + + + Libraries + + + stm32g0xx_hal.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c + + + stm32g0xx_hal_usart_ex.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_usart_ex.c + + + stm32g0xx_hal_flash.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c + + + system_stm32g0xx.c + 1 + ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c + + + stm32g0xx_hal_pwr.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c + + + stm32g0xx_hal_gpio.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c + + + stm32g0xx_hal_uart.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c + + + stm32g0xx_hal_uart_ex.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c + + + stm32g0xx_hal_cortex.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c + + + stm32g0xx_hal_rcc_ex.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c + + + stm32g0xx_hal_flash_ex.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c + + + stm32g0xx_hal_dma_ex.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c + + + stm32g0xx_hal_pwr_ex.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c + + + stm32g0xx_ll_usart.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_usart.c + + + stm32g0xx_hal_dma.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c + + + stm32g0xx_hal_cec.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cec.c + + + stm32g0xx_hal_rcc.c + 1 + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/stm32/stm32g030-tiny-board/rtconfig.h b/bsp/stm32/stm32g030-tiny-board/rtconfig.h new file mode 100644 index 00000000000..b31b392a035 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/rtconfig.h @@ -0,0 +1,395 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +#define SOC_STM32G030RB +#define BOARD_STM32G030_NUCLEO + +/* RT-Thread Kernel */ + +/* klibc options */ + +/* rt_vsnprintf options */ + +#define RT_KLIBC_USING_LIBC_VSNPRINTF +/* end of rt_vsnprintf options */ + +/* rt_vsscanf options */ + +#define RT_KLIBC_USING_LIBC_VSSCANF +/* end of rt_vsscanf options */ + +/* rt_memset options */ + +/* end of rt_memset options */ + +/* rt_memcpy options */ + +/* end of rt_memcpy options */ + +/* rt_memmove options */ + +/* end of rt_memmove options */ + +/* rt_memcmp options */ + +/* end of rt_memcmp options */ + +/* rt_strstr options */ + +/* end of rt_strstr options */ + +/* rt_strcasecmp options */ + +/* end of rt_strcasecmp options */ + +/* rt_strncpy options */ + +/* end of rt_strncpy options */ + +/* rt_strcpy options */ + +/* end of rt_strcpy options */ + +/* rt_strncmp options */ + +/* end of rt_strncmp options */ + +/* rt_strcmp options */ + +/* end of rt_strcmp options */ + +/* rt_strlen options */ + +/* end of rt_strlen options */ + +/* rt_strnlen options */ + +/* end of rt_strnlen options */ +/* end of klibc options */ +#define RT_NAME_MAX 8 +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#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 options */ + +/* end of kservice options */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x50200 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M0 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 1024 +#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 768 +#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 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +/* end of Network */ + +/* Memory protection */ + +/* end of Memory protection */ + +/* Utilities */ + +/* end of Utilities */ + +/* Using USB legacy version */ + +/* end of Using USB legacy version */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32G0 +#define BOARD_SERIES_STM32_NUCLEO_64 + +/* Hardware Drivers Config */ + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_STM32_UART_V1_TX_TIMEOUT 2000 +#define BSP_USING_UART1 +/* end of On-chip Peripheral Drivers */ + +/* Board extended module Drivers */ + +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/stm32/stm32g030-tiny-board/rtconfig.py b/bsp/stm32/stm32g030-tiny-board/rtconfig.py new file mode 100644 index 00000000000..9b8d8076e01 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/rtconfig.py @@ -0,0 +1,184 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m0' +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-m0 -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-M0 ' + 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-M0 ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m0 ' + CFLAGS += ' -mcpu=cortex-m0 ' + 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-M0' + 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-M0' + 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/stm32g030-tiny-board/template.uvoptx b/bsp/stm32/stm32g030-tiny-board/template.uvoptx new file mode 100644 index 00000000000..3320299dfdb --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/template.uvoptx @@ -0,0 +1,192 @@ + + + + 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 + + 8000000 + + 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 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -UG -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.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 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32g030-tiny-board/template.uvprojx b/bsp/stm32/stm32g030-tiny-board/template.uvprojx new file mode 100644 index 00000000000..492f59ddf52 --- /dev/null +++ b/bsp/stm32/stm32g030-tiny-board/template.uvprojx @@ -0,0 +1,411 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32G030C8Tx + STMicroelectronics + Keil.STM32G0xx_DFP.1.2.0 + https://www.keil.com/pack/ + IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM)) + 0 + $$Device:STM32G030C8Tx$Drivers\CMSIS\Device\ST\STM32G0xx\Include\stm32g0xx.h + + + + + + + + + + $$Device:STM32G030C8Tx$CMSIS\SVD\STM32G030.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 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP-MPU + DARMCM1.DLL + -pCM0+ + SARMCM3.DLL + -MPU + TARMCM1.DLL + -pCM0+ + + + + 1 + 0 + 0 + 0 + 16 + + + + + 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-M0+" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 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 + 0x2000 + + + 1 + 0x8000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x10000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x2000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
From 45aa9a8de2533836826e2becef7bd79a8cbf253b Mon Sep 17 00:00:00 2001 From: hywing Date: Tue, 18 Mar 2025 15:27:13 +0800 Subject: [PATCH 2/4] [bsp][stm32][stm32g030-tiny-board] make output binary file smaller --- bsp/stm32/stm32g030-tiny-board/project.uvoptx | 955 +---------- .../stm32g030-tiny-board/project.uvprojx | 1429 +++-------------- .../stm32g030-tiny-board/template.uvprojx | 4 +- 3 files changed, 255 insertions(+), 2133 deletions(-) diff --git a/bsp/stm32/stm32g030-tiny-board/project.uvoptx b/bsp/stm32/stm32g030-tiny-board/project.uvoptx index d2448879c64..3320299dfdb 100644 --- a/bsp/stm32/stm32g030-tiny-board/project.uvoptx +++ b/bsp/stm32/stm32g030-tiny-board/project.uvoptx @@ -26,7 +26,7 @@ 0x4 ARM-ADS - 12000000 + 8000000 1 1 @@ -117,26 +117,6 @@ STLink\ST-LINKIII-KEIL_SWO.dll - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - DLGUARM - (105=-1,-1,-1,-1,0) - 0 UL2CM3 @@ -145,39 +125,22 @@ 0 ST-LINKIII-KEIL_SWO - -U4700420007000032434B514E -O206 -SF1800 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM) + -UG -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM) - - - 0 - 0 - 31 - 1 -
134249824
- 0 - 0 - 0 - 0 - 0 - 1 - applications\main.c - - \\rt_thread\applications/main.c\31 -
-
+ 0 0 0 - 1 + 0 0 0 0 0 - 1 + 0 0 0 0 @@ -213,921 +176,17 @@ 0 0 2 - 1800000 + 10000000
- Applications - 1 - 0 - 0 - 0 - - 1 - 1 - 1 - 0 - 0 - 0 - applications\main.c - main.c - 0 - 0 - - - - - Compiler - 0 - 0 - 0 - 0 - - 2 - 2 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\armlibc\syscall_mem.c - syscall_mem.c - 0 - 0 - - - 2 - 3 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\armlibc\syscalls.c - syscalls.c - 0 - 0 - - - 2 - 4 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cctype.c - cctype.c - 0 - 0 - - - 2 - 5 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cstdlib.c - cstdlib.c - 0 - 0 - - - 2 - 6 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cstring.c - cstring.c - 0 - 0 - - - 2 - 7 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\ctime.c - ctime.c - 0 - 0 - - - 2 - 8 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cunistd.c - cunistd.c - 0 - 0 - - - 2 - 9 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cwchar.c - cwchar.c - 0 - 0 - - - - - DeviceDrivers - 0 - 0 - 0 - 0 - - 3 - 10 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\core\device.c - device.c - 0 - 0 - - - 3 - 11 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\completion_comm.c - completion_comm.c - 0 - 0 - - - 3 - 12 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\completion_up.c - completion_up.c - 0 - 0 - - - 3 - 13 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\condvar.c - condvar.c - 0 - 0 - - - 3 - 14 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\dataqueue.c - dataqueue.c - 0 - 0 - - - 3 - 15 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\pipe.c - pipe.c - 0 - 0 - - - 3 - 16 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\ringblk_buf.c - ringblk_buf.c - 0 - 0 - - - 3 - 17 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\ringbuffer.c - ringbuffer.c - 0 - 0 - - - 3 - 18 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\waitqueue.c - waitqueue.c - 0 - 0 - - - 3 - 19 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\workqueue.c - workqueue.c - 0 - 0 - - - 3 - 20 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\pin\dev_pin.c - dev_pin.c - 0 - 0 - - - 3 - 21 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\serial\dev_serial.c - dev_serial.c - 0 - 0 - - - - - Drivers - 1 - 0 - 0 - 0 - - 4 - 22 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drivers\drv_gpio.c - drv_gpio.c - 0 - 0 - - - 4 - 23 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drivers\drv_usart.c - drv_usart.c - 0 - 0 - - - 4 - 24 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drv_common.c - drv_common.c - 0 - 0 - - - 4 - 25 - 2 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\arm\startup_stm32g030xx.s - startup_stm32g030xx.s - 0 - 0 - - - 4 - 26 - 1 - 0 - 0 - 0 - board\CubeMX_Config\Src\stm32g0xx_hal_msp.c - stm32g0xx_hal_msp.c - 0 - 0 - - - 4 - 27 - 1 - 0 - 0 - 0 - board\board.c - board.c - 0 - 0 - - - - - Finsh - 0 - 0 - 0 - 0 - - 5 - 28 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\cmd.c - cmd.c - 0 - 0 - - - 5 - 29 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\msh_parse.c - msh_parse.c - 0 - 0 - - - 5 - 30 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\shell.c - shell.c - 0 - 0 - - - 5 - 31 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\msh.c - msh.c - 0 - 0 - - - - - Kernel - 0 - 0 - 0 - 0 - - 6 - 32 - 1 - 0 - 0 - 0 - ..\..\..\src\clock.c - clock.c - 0 - 0 - - - 6 - 33 - 1 - 0 - 0 - 0 - ..\..\..\src\components.c - components.c - 0 - 0 - - - 6 - 34 - 1 - 0 - 0 - 0 - ..\..\..\src\cpu_up.c - cpu_up.c - 0 - 0 - - - 6 - 35 - 1 - 0 - 0 - 0 - ..\..\..\src\defunct.c - defunct.c - 0 - 0 - - - 6 - 36 - 1 - 0 - 0 - 0 - ..\..\..\src\idle.c - idle.c - 0 - 0 - - - 6 - 37 - 1 - 0 - 0 - 0 - ..\..\..\src\ipc.c - ipc.c - 0 - 0 - - - 6 - 38 - 1 - 0 - 0 - 0 - ..\..\..\src\irq.c - irq.c - 0 - 0 - - - 6 - 39 - 1 - 0 - 0 - 0 - ..\..\..\src\kservice.c - kservice.c - 0 - 0 - - - 6 - 40 - 1 - 0 - 0 - 0 - ..\..\..\src\mem.c - mem.c - 0 - 0 - - - 6 - 41 - 1 - 0 - 0 - 0 - ..\..\..\src\mempool.c - mempool.c - 0 - 0 - - - 6 - 42 - 1 - 0 - 0 - 0 - ..\..\..\src\object.c - object.c - 0 - 0 - - - 6 - 43 - 1 - 0 - 0 - 0 - ..\..\..\src\scheduler_comm.c - scheduler_comm.c - 0 - 0 - - - 6 - 44 - 1 - 0 - 0 - 0 - ..\..\..\src\scheduler_up.c - scheduler_up.c - 0 - 0 - - - 6 - 45 - 1 - 0 - 0 - 0 - ..\..\..\src\thread.c - thread.c - 0 - 0 - - - 6 - 46 - 1 - 0 - 0 - 0 - ..\..\..\src\timer.c - timer.c - 0 - 0 - - - - - klibc - 0 - 0 - 0 - 0 - - 7 - 47 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\kstring.c - kstring.c - 0 - 0 - - - 7 - 48 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\kstdio.c - kstdio.c - 0 - 0 - - - 7 - 49 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\kerrno.c - kerrno.c - 0 - 0 - - - - - libcpu - 0 - 0 - 0 - 0 - - 8 - 50 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\common\div0.c - div0.c - 0 - 0 - - - 8 - 51 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\common\showmem.c - showmem.c - 0 - 0 - - - 8 - 52 - 2 - 0 - 0 - 0 - ..\..\..\libcpu\arm\cortex-m0\context_rvds.S - context_rvds.S - 0 - 0 - - - 8 - 53 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\cortex-m0\cpuport.c - cpuport.c - 0 - 0 - - - - - Libraries + Source Group 1 0 0 0 0 - - 9 - 54 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c - stm32g0xx_hal.c - 0 - 0 - - - 9 - 55 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_usart_ex.c - stm32g0xx_hal_usart_ex.c - 0 - 0 - - - 9 - 56 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c - stm32g0xx_hal_flash.c - 0 - 0 - - - 9 - 57 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c - system_stm32g0xx.c - 0 - 0 - - - 9 - 58 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c - stm32g0xx_hal_pwr.c - 0 - 0 - - - 9 - 59 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c - stm32g0xx_hal_gpio.c - 0 - 0 - - - 9 - 60 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c - stm32g0xx_hal_uart.c - 0 - 0 - - - 9 - 61 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c - stm32g0xx_hal_uart_ex.c - 0 - 0 - - - 9 - 62 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c - stm32g0xx_hal_cortex.c - 0 - 0 - - - 9 - 63 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c - stm32g0xx_hal_rcc_ex.c - 0 - 0 - - - 9 - 64 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c - stm32g0xx_hal_flash_ex.c - 0 - 0 - - - 9 - 65 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c - stm32g0xx_hal_dma_ex.c - 0 - 0 - - - 9 - 66 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c - stm32g0xx_hal_pwr_ex.c - 0 - 0 - - - 9 - 67 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_usart.c - stm32g0xx_ll_usart.c - 0 - 0 - - - 9 - 68 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c - stm32g0xx_hal_dma.c - 0 - 0 - - - 9 - 69 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cec.c - stm32g0xx_hal_cec.c - 0 - 0 - - - 9 - 70 - 1 - 0 - 0 - 0 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c - stm32g0xx_hal_rcc.c - 0 - 0 - diff --git a/bsp/stm32/stm32g030-tiny-board/project.uvprojx b/bsp/stm32/stm32g030-tiny-board/project.uvprojx index 361322ce9f2..7397de3327d 100644 --- a/bsp/stm32/stm32g030-tiny-board/project.uvprojx +++ b/bsp/stm32/stm32g030-tiny-board/project.uvprojx @@ -1,16 +1,13 @@ - 2.1 -
### uVision Project, (C) Keil Software
- rt-thread 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::.\ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC 0 @@ -19,28 +16,28 @@ Keil.STM32G0xx_DFP.1.2.0 https://www.keil.com/pack/ IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE - - + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32G0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32G030C8Tx$CMSIS\Flash\STM32G0xx_64.FLM)) 0 $$Device:STM32G030C8Tx$Drivers\CMSIS\Device\ST\STM32G0xx\Include\stm32g0xx.h - - - - - - - - - + + + + + + + + + $$Device:STM32G030C8Tx$CMSIS\SVD\STM32G030.svd 0 0 - - - - - + + + + + 0 0 @@ -53,7 +50,7 @@ 1 0 0 - 1 + 0 0 .\build\keil\List\ 1 @@ -62,8 +59,8 @@ 0 0 - - + + 0 0 0 @@ -72,8 +69,8 @@ 0 0 - - + + 0 0 0 @@ -83,14 +80,14 @@ 1 0 fromelf --bin !L --output rtthread.bin - + 0 0 0 0 0 - + 0 @@ -104,8 +101,8 @@ 0 0 3 - - + + 1 @@ -139,10 +136,10 @@ 1 BIN\UL2CM3.DLL "" () - - - - + + + + 0 @@ -175,7 +172,7 @@ 0 0 "Cortex-M0+" - + 0 0 0 @@ -309,7 +306,7 @@ 0x0 - + 1 @@ -336,10 +333,10 @@ 0 0 - - USE_HAL_DRIVER, RT_USING_ARMLIBC, STM32G030xx, RT_USING_LIBC, __STDC_LIMIT_MACROS, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND - - applications;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\CMSIS\Include;..\..\..\components\drivers\smp_call;..\..\..\components\libc\posix\io\eventfd;..\libraries\HAL_Drivers\drivers\config;..\..\..\components\drivers\include;..\..\..\libcpu\arm\common;..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension;..\..\..\components\finsh;..\libraries\HAL_Drivers;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\epoll;..\..\..\libcpu\arm\cortex-m0;..\..\..\components\libc\posix\ipc;board\CubeMX_Config\Inc;..\..\..\components\libc\posix\io\poll;..\..\..\components\drivers\phy;..\..\..\components\libc\compilers\common\include;..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Inc;..\..\..\include;..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Include;.;board;..\libraries\HAL_Drivers\drivers;..\..\..\components\libc\compilers\common\extension\fcntl\octal + + STM32G030xx, RT_USING_LIBC, __STDC_LIMIT_MACROS, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND, RT_USING_ARMLIBC, USE_HAL_DRIVER + + ..\libraries\HAL_Drivers\CMSIS\Include;..\..\..\components\libc\compilers\common\include;applications;board;..\..\..\components\libc\posix\ipc;.;..\..\..\components\libc\posix\io\epoll;..\..\..\components\libc\compilers\common\extension;board\CubeMX_Config\Inc;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\libraries\HAL_Drivers\drivers\config;..\libraries\HAL_Drivers;..\..\..\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\smp_call;..\..\..\components\drivers\phy;..\..\..\components\drivers\include;..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Inc;..\..\..\components\libc\posix\io\poll;..\libraries\HAL_Drivers\drivers;..\..\..\components\drivers\include;..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Include;..\..\..\components\finsh;..\..\..\components\libc\posix\io\eventfd;..\..\..\libcpu\arm\cortex-m0;..\..\..\components\drivers\include;..\..\..\libcpu\arm\common @@ -354,10 +351,10 @@ 0 4 - - - - + + + + @@ -369,13 +366,13 @@ 0 0x08000000 0x20000000 - + .\board\linker_scripts\link.sct - - - - - + + + + + @@ -398,36 +395,50 @@ 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 + + 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 + + cunistd.c 1 ..\..\..\components\libc\compilers\common\cunistd.c + + cwchar.c 1 @@ -443,668 +454,222 @@ 1 ..\..\..\components\drivers\core\device.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + completion_comm.c 1 ..\..\..\components\drivers\ipc\completion_comm.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + completion_up.c 1 ..\..\..\components\drivers\ipc\completion_up.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + condvar.c 1 ..\..\..\components\drivers\ipc\condvar.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + dataqueue.c 1 ..\..\..\components\drivers\ipc\dataqueue.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + pipe.c 1 ..\..\..\components\drivers\ipc\pipe.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + ringblk_buf.c 1 ..\..\..\components\drivers\ipc\ringblk_buf.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + ringbuffer.c 1 ..\..\..\components\drivers\ipc\ringbuffer.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + waitqueue.c 1 ..\..\..\components\drivers\ipc\waitqueue.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + workqueue.c 1 ..\..\..\components\drivers\ipc\workqueue.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + dev_pin.c 1 ..\..\..\components\drivers\pin\dev_pin.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + dev_serial.c 1 ..\..\..\components\drivers\serial\dev_serial.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + @@ -1120,26 +685,36 @@ 1 ..\libraries\HAL_Drivers\drivers\drv_gpio.c + + drv_usart.c 1 ..\libraries\HAL_Drivers\drivers\drv_usart.c + + drv_common.c 1 ..\libraries\HAL_Drivers\drv_common.c + + startup_stm32g030xx.s 2 ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\arm\startup_stm32g030xx.s + + stm32g0xx_hal_msp.c 1 board\CubeMX_Config\Src\stm32g0xx_hal_msp.c + + board.c 1 @@ -1155,20 +730,26 @@ 1 ..\..\..\components\finsh\cmd.c + + msh_parse.c 1 ..\..\..\components\finsh\msh_parse.c + + - shell.c + msh.c 1 - ..\..\..\components\finsh\shell.c + ..\..\..\components\finsh\msh.c + + - msh.c + shell.c 1 - ..\..\..\components\finsh\msh.c + ..\..\..\components\finsh\shell.c @@ -1180,836 +761,279 @@ 1 ..\..\..\src\clock.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + components.c 1 ..\..\..\src\components.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + cpu_up.c 1 ..\..\..\src\cpu_up.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + defunct.c 1 ..\..\..\src\defunct.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + idle.c 1 ..\..\..\src\idle.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + ipc.c 1 ..\..\..\src\ipc.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + irq.c 1 ..\..\..\src\irq.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + kservice.c 1 ..\..\..\src\kservice.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + mem.c 1 ..\..\..\src\mem.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + mempool.c 1 ..\..\..\src\mempool.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + object.c 1 ..\..\..\src\object.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + scheduler_comm.c 1 ..\..\..\src\scheduler_comm.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + scheduler_up.c 1 ..\..\..\src\scheduler_up.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + thread.c 1 ..\..\..\src\thread.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + timer.c 1 ..\..\..\src\timer.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + @@ -2020,22 +1044,26 @@ klibc - - kstring.c - 1 - ..\..\..\src\klibc\kstring.c - kstdio.c 1 ..\..\..\src\klibc\kstdio.c + + kerrno.c 1 ..\..\..\src\klibc\kerrno.c + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.c + + libcpu @@ -2045,16 +1073,22 @@ 1 ..\..\..\libcpu\arm\common\div0.c + + showmem.c 1 ..\..\..\libcpu\arm\common\showmem.c + + context_rvds.S 2 ..\..\..\libcpu\arm\cortex-m0\context_rvds.S + + cpuport.c 1 @@ -2066,115 +1100,144 @@ Libraries - stm32g0xx_hal.c + stm32g0xx_hal_rcc_ex.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c + + - stm32g0xx_hal_usart_ex.c + system_stm32g0xx.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_usart_ex.c + ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c + + - stm32g0xx_hal_flash.c + stm32g0xx_hal_rcc.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c + + - system_stm32g0xx.c + stm32g0xx_hal_cec.c 1 - ..\libraries\STM32G0xx_HAL\CMSIS\Device\ST\STM32G0xx\Source\Templates\system_stm32g0xx.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cec.c + + - stm32g0xx_hal_pwr.c + stm32g0xx_hal_dma_ex.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c + + - stm32g0xx_hal_gpio.c + stm32g0xx_hal_uart_ex.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c + + - stm32g0xx_hal_uart.c + stm32g0xx_hal_flash_ex.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c + + - stm32g0xx_hal_uart_ex.c + stm32g0xx_hal_gpio.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart_ex.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c + + - stm32g0xx_hal_cortex.c + stm32g0xx_ll_usart.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_usart.c + + - stm32g0xx_hal_rcc_ex.c + stm32g0xx_hal_pwr_ex.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc_ex.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c + + - stm32g0xx_hal_flash_ex.c + stm32g0xx_hal_uart.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash_ex.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_uart.c + + - stm32g0xx_hal_dma_ex.c + stm32g0xx_hal_flash.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma_ex.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_flash.c + + - stm32g0xx_hal_pwr_ex.c + stm32g0xx_hal_usart_ex.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr_ex.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_usart_ex.c + + - stm32g0xx_ll_usart.c + stm32g0xx_hal.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_ll_usart.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal.c + + - stm32g0xx_hal_dma.c + stm32g0xx_hal_cortex.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cortex.c + + - stm32g0xx_hal_cec.c + stm32g0xx_hal_dma.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_cec.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_dma.c + + - stm32g0xx_hal_rcc.c + stm32g0xx_hal_pwr.c 1 - ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_rcc.c + ..\libraries\STM32G0xx_HAL\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_pwr.c - - - - + + + - <Project Info> - - - - - + + + + + 0 1 -
diff --git a/bsp/stm32/stm32g030-tiny-board/template.uvprojx b/bsp/stm32/stm32g030-tiny-board/template.uvprojx index 492f59ddf52..6f6f5acaa8e 100644 --- a/bsp/stm32/stm32g030-tiny-board/template.uvprojx +++ b/bsp/stm32/stm32g030-tiny-board/template.uvprojx @@ -53,7 +53,7 @@ 1 0 0 - 1 + 0 0 .\build\keil\List\ 1 @@ -313,7 +313,7 @@ 1 - 1 + 4 0 0 1 From 959102ab6383688f6463eddef99846e1624eabe5 Mon Sep 17 00:00:00 2001 From: hywing Date: Wed, 19 Mar 2025 09:13:35 +0800 Subject: [PATCH 3/4] [bsp][stm32][stm32g030-tiny-board] change link.lds to update ROM size --- bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds b/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds index 32bc1746538..e2394dc95e1 100644 --- a/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds +++ b/bsp/stm32/stm32g030-tiny-board/board/linker_scripts/link.lds @@ -5,8 +5,8 @@ /* Program Entry, set to mark it as "used" and avoid gc */ MEMORY { - ROM (rx) : ORIGIN = 0x08000000, LENGTH = 64k /* 256KB flash */ - RAM (rw) : ORIGIN = 0x20000000, LENGTH = 8k /* 32K sram */ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 128k /* 128KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 8k /* 8K sram */ } ENTRY(Reset_Handler) _system_stack_size = 0x400; From 272a588b119558a038bae5982c5470877e97e19d Mon Sep 17 00:00:00 2001 From: hywing Date: Thu, 20 Mar 2025 09:04:38 +0800 Subject: [PATCH 4/4] [bsp][stm32][stm32g030-tiny-board] delete unnecessary files && change board definiton in Kconfig --- bsp/stm32/stm32g030-tiny-board/.config | 2 +- bsp/stm32/stm32g030-tiny-board/Kconfig | 2 +- .../board/CubeMX_Config/Inc/stm32g0xx_it.h | 62 -------- .../board/CubeMX_Config/Src/stm32g0xx_it.c | 145 ------------------ bsp/stm32/stm32g030-tiny-board/rtconfig.h | 2 +- 5 files changed, 3 insertions(+), 210 deletions(-) delete mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h delete mode 100644 bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c diff --git a/bsp/stm32/stm32g030-tiny-board/.config b/bsp/stm32/stm32g030-tiny-board/.config index 491bd57dbb9..b1c820c800f 100644 --- a/bsp/stm32/stm32g030-tiny-board/.config +++ b/bsp/stm32/stm32g030-tiny-board/.config @@ -1,5 +1,5 @@ CONFIG_SOC_STM32G030RB=y -CONFIG_BOARD_STM32G030_NUCLEO=y +CONFIG_BOARD_STM32G030_TINY_BOARD=y # # RT-Thread Kernel diff --git a/bsp/stm32/stm32g030-tiny-board/Kconfig b/bsp/stm32/stm32g030-tiny-board/Kconfig index 127f3e09905..dd247b55bad 100644 --- a/bsp/stm32/stm32g030-tiny-board/Kconfig +++ b/bsp/stm32/stm32g030-tiny-board/Kconfig @@ -13,7 +13,7 @@ config SOC_STM32G030RB select RT_USING_USER_MAIN default y -config BOARD_STM32G030_NUCLEO +config BOARD_STM32G030_TINY_BOARD bool select BOARD_SERIES_STM32_NUCLEO_64 default y diff --git a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h deleted file mode 100644 index bd0060544ec..00000000000 --- a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Inc/stm32g0xx_it.h +++ /dev/null @@ -1,62 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32g0xx_it.h - * @brief This file contains the headers of the interrupt handlers. - ****************************************************************************** - * @attention - * - * Copyright (c) 2024 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 __STM32G0xx_IT_H -#define __STM32G0xx_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 SVC_Handler(void); -void PendSV_Handler(void); -void SysTick_Handler(void); -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32G0xx_IT_H */ diff --git a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c b/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c deleted file mode 100644 index c20b44b1a6b..00000000000 --- a/bsp/stm32/stm32g030-tiny-board/board/CubeMX_Config/Src/stm32g0xx_it.c +++ /dev/null @@ -1,145 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32g0xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - * Copyright (c) 2024 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 */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "stm32g0xx_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-M0+ 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 */ - while (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 System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - /* USER CODE BEGIN SVC_IRQn 0 */ - - /* USER CODE END SVC_IRQn 0 */ - /* USER CODE BEGIN SVC_IRQn 1 */ - - /* USER CODE END SVC_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 */ -} - -/******************************************************************************/ -/* STM32G0xx 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_stm32g0xx.s). */ -/******************************************************************************/ - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ diff --git a/bsp/stm32/stm32g030-tiny-board/rtconfig.h b/bsp/stm32/stm32g030-tiny-board/rtconfig.h index b31b392a035..a9d664c795b 100644 --- a/bsp/stm32/stm32g030-tiny-board/rtconfig.h +++ b/bsp/stm32/stm32g030-tiny-board/rtconfig.h @@ -2,7 +2,7 @@ #define RT_CONFIG_H__ #define SOC_STM32G030RB -#define BOARD_STM32G030_NUCLEO +#define BOARD_STM32G030_TINY_BOARD /* RT-Thread Kernel */