From f43e7ba90b35c8968049b7841d991e7790d9c92c Mon Sep 17 00:00:00 2001 From: Sunwancn Date: Sun, 17 May 2020 21:27:50 +0800 Subject: [PATCH 1/2] Add stm32l433-st-nucleo BSP --- bsp/stm32/stm32l433-st-nucleo/.config | 442 +++ bsp/stm32/stm32l433-st-nucleo/.gitignore | 42 + bsp/stm32/stm32l433-st-nucleo/Kconfig | 21 + bsp/stm32/stm32l433-st-nucleo/README.md | 113 + bsp/stm32/stm32l433-st-nucleo/SConscript | 15 + bsp/stm32/stm32l433-st-nucleo/SConstruct | 60 + .../applications/SConscript | 9 + .../stm32l433-st-nucleo/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CubeMX_Config.ioc | 235 ++ .../board/CubeMX_Config/Inc/main.h | 91 + .../CubeMX_Config/Inc/stm32l4xx_hal_conf.h | 450 +++ .../board/CubeMX_Config/Inc/stm32l4xx_it.h | 69 + .../board/CubeMX_Config/Src/main.c | 498 +++ .../CubeMX_Config/Src/stm32l4xx_hal_msp.c | 390 +++ .../board/CubeMX_Config/Src/stm32l4xx_it.c | 203 ++ .../CubeMX_Config/Src/system_stm32l4xx.c | 337 ++ bsp/stm32/stm32l433-st-nucleo/board/Kconfig | 96 + .../stm32l433-st-nucleo/board/SConscript | 39 + bsp/stm32/stm32l433-st-nucleo/board/board.c | 77 + bsp/stm32/stm32l433-st-nucleo/board/board.h | 41 + .../board/linker_scripts/link.icf | 33 + .../board/linker_scripts/link.lds | 158 + .../board/linker_scripts/link.sct | 15 + .../stm32l433-st-nucleo/figures/board.jpg | Bin 0 -> 155046 bytes bsp/stm32/stm32l433-st-nucleo/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32l433-st-nucleo/project.ewp | 2329 ++++++++++++++ bsp/stm32/stm32l433-st-nucleo/project.eww | 10 + bsp/stm32/stm32l433-st-nucleo/project.uvoptx | 1004 ++++++ bsp/stm32/stm32l433-st-nucleo/project.uvprojx | 747 +++++ bsp/stm32/stm32l433-st-nucleo/rtconfig.h | 170 + bsp/stm32/stm32l433-st-nucleo/rtconfig.py | 143 + bsp/stm32/stm32l433-st-nucleo/template.ewp | 2031 ++++++++++++ bsp/stm32/stm32l433-st-nucleo/template.eww | 10 + bsp/stm32/stm32l433-st-nucleo/template.uvoptx | 192 ++ .../stm32l433-st-nucleo/template.uvprojx | 395 +++ 36 files changed, 13346 insertions(+) create mode 100644 bsp/stm32/stm32l433-st-nucleo/.config create mode 100644 bsp/stm32/stm32l433-st-nucleo/.gitignore create mode 100644 bsp/stm32/stm32l433-st-nucleo/Kconfig create mode 100644 bsp/stm32/stm32l433-st-nucleo/README.md create mode 100644 bsp/stm32/stm32l433-st-nucleo/SConscript create mode 100644 bsp/stm32/stm32l433-st-nucleo/SConstruct create mode 100644 bsp/stm32/stm32l433-st-nucleo/applications/SConscript create mode 100644 bsp/stm32/stm32l433-st-nucleo/applications/main.c create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/Kconfig create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/SConscript create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/board.c create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/board.h create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32l433-st-nucleo/figures/board.jpg create mode 100644 bsp/stm32/stm32l433-st-nucleo/project.ewd create mode 100644 bsp/stm32/stm32l433-st-nucleo/project.ewp create mode 100644 bsp/stm32/stm32l433-st-nucleo/project.eww create mode 100644 bsp/stm32/stm32l433-st-nucleo/project.uvoptx create mode 100644 bsp/stm32/stm32l433-st-nucleo/project.uvprojx create mode 100644 bsp/stm32/stm32l433-st-nucleo/rtconfig.h create mode 100644 bsp/stm32/stm32l433-st-nucleo/rtconfig.py create mode 100644 bsp/stm32/stm32l433-st-nucleo/template.ewp create mode 100644 bsp/stm32/stm32l433-st-nucleo/template.eww create mode 100644 bsp/stm32/stm32l433-st-nucleo/template.uvoptx create mode 100644 bsp/stm32/stm32l433-st-nucleo/template.uvprojx diff --git a/bsp/stm32/stm32l433-st-nucleo/.config b/bsp/stm32/stm32l433-st-nucleo/.config new file mode 100644 index 0000000000..464e433c81 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/.config @@ -0,0 +1,442 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_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_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=256 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart2" +CONFIG_RT_VER_NUM=0x40003 +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M4=y +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +CONFIG_RT_USING_LIBC=y +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_LWP is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT 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_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# 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_IOTHUB 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_NIMBLE 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_ONNX_PARSER is not set +# CONFIG_PKG_USING_ONNX_BACKEND 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_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# 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 + +# +# 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_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH 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_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_URLENCODE is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_PERSIMMON is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS 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 + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set + +# +# miscellaneous 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_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_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set + +# +# 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 +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_UKAL is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32L4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32L433RC=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +# CONFIG_BSP_USING_UART1 is not set +CONFIG_BSP_USING_UART2=y +# CONFIG_BSP_UART2_RX_USING_DMA is not set +# CONFIG_BSP_USING_ON_CHIP_FLASH is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +# CONFIG_BSP_USING_CRC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32l433-st-nucleo/.gitignore b/bsp/stm32/stm32l433-st-nucleo/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/.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/stm32l433-st-nucleo/Kconfig b/bsp/stm32/stm32l433-st-nucleo/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/stm32/stm32l433-st-nucleo/README.md b/bsp/stm32/stm32l433-st-nucleo/README.md new file mode 100644 index 0000000000..2757522345 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/README.md @@ -0,0 +1,113 @@ +# NUCLEO-L433RC-P 开发板 BSP 说明 + +## 简介 + +本文档为ST官方 NUCLEO-L433RC-P 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +对于 NUCLEO-L433RC-P,内核是 Cortex-M4,绿色的 Nucleo 标志显示了这款芯片是低功耗系列,板载 ST-LINK/V2-1 调试器/编程器,迷你尺寸,mirco USB 接口,可数的外设,Arduino™ nano 兼容的接口。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32L433RC,主频 80MHz,256KB FLASH ,64KB RAM。 +- 常用外设 + - LED:4个,USB communication(LD1 双色),USB overcurrent(LD2 红色),power LED(LD3 绿色),user LED(LD4 绿色) + - 按键:2 个,USER and RESET 。 +- 常用接口:USB 转串口、Arduino Uno 和 ST morpho 两类扩展接口 +- 调试接口:板载 ST-LINK/V2-1 调试器。 + +快速入门:[STM32 Nucleo板软件开发工具入门](https://www.st.com/resource/zh/user_manual/dm00105928-getting-started-with-stm32-nucleo-board-software-development-tools-stmicroelectronics.pdf) + +原理图下载:[NUCLEO-L433RC-P schematic](https://www.st.com/resource/en/schematic_pack/nucleo-l433rc-p_sch.zip) + +开发板更多详细信息请参考【STMicroelectronics】 [NUCLEO-L433RC-P](https://www.st.com/content/st_com/zh/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-nucleo-boards/nucleo-l433rc-p.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------ | +| GPIO | 支持 | PA0, PA1... PH1 ---> PIN: 0, 1...63 | +| UART | 支持 | UART1, UART2 | +| SPI | 支持 | SPI1 | +| RTC | 支持 | 支持外部晶振和内部低速时钟 | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-LINK 仿真器下载程序,在通过 microUSB 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,红色 LD1 和 绿色 LD3 常亮、绿色 LD4 会周期性闪烁。 + +USB 虚拟 COM 端口默认连接串口 2,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Jan 9 2019 + 2006 - 2018 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口2 的功能,如果需使用更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 开机时如果不能打印 RT-Thread 版本信息,请将BSP中串口 GPIO 速率调低 +- 开机时如果不能打印 RT-Thread 版本信息,请重新选择 PC 端串口调试软件的串口号 + +## 联系人信息 + +维护人: + +- [Sunwancn](https://github.com/Sunwancn), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32l433-st-nucleo/SConscript b/bsp/stm32/stm32l433-st-nucleo/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32l433-st-nucleo/SConstruct b/bsp/stm32/stm32l433-st-nucleo/SConstruct new file mode 100644 index 0000000000..c4b3facad7 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/SConstruct @@ -0,0 +1,60 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = 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 == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $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 = 'STM32L4xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32l433-st-nucleo/applications/SConscript b/bsp/stm32/stm32l433-st-nucleo/applications/SConscript new file mode 100644 index 0000000000..4939638d41 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/applications/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [str(Dir('#')), cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32l433-st-nucleo/applications/main.c b/bsp/stm32/stm32l433-st-nucleo/applications/main.c new file mode 100644 index 0000000000..43c2522c51 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include +#include +#include + +/* defined the LED0 pin: PB13 */ +#define LED0_PIN GET_PIN(B, 13) + +int main(void) +{ + int count = 1; + /* set LED0 pin mode to output */ + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + 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/stm32l433-st-nucleo/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..094ef2cb05 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousGenFiles] +HeaderPath=D:/GitRp/rt-thread/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc +HeaderFiles=stm32l4xx_it.h;stm32l4xx_hal_conf.h;main.h; +SourcePath=D:/GitRp/rt-thread/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src +SourceFiles=stm32l4xx_it.c;stm32l4xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_lptim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_def.h;Drivers/STM32L4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ramfunc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_cortex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_exti.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_spi.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_spi_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart_ex.h;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_lptim.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_exti.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_spi.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_spi_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_lptim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_def.h;Drivers/STM32L4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_i2c_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_flash_ramfunc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_gpio_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_dma_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_pwr_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_cortex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_exti.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rtc_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_spi.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_spi_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim_ex.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_uart_ex.h;Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l433xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Include/system_stm32l4xx.h;Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Src\main.c;..\Src\stm32l4xx_it.c;..\Src\stm32l4xx_hal_msp.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_lptim.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_exti.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_spi.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_spi_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;..\\Src/system_stm32l4xx.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_lptim.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_exti.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rtc_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_spi.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_spi_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c;..\Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c;..\\Src/system_stm32l4xx.c;..\Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c;; +HeaderPath=..\Drivers\STM32L4xx_HAL_Driver\Inc;..\Drivers\STM32L4xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32L4xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_HAL_DRIVER;STM32L433xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..6dce14b8ae --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,235 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +KeepUserPlacement=false +Mcu.Family=STM32L4 +Mcu.IP0=LPTIM1 +Mcu.IP1=NVIC +Mcu.IP2=RCC +Mcu.IP3=RTC +Mcu.IP4=SPI1 +Mcu.IP5=SYS +Mcu.IP6=TIM2 +Mcu.IP7=USART1 +Mcu.IP8=USART2 +Mcu.IPNb=9 +Mcu.Name=STM32L433RCTxP +Mcu.Package=LQFP64 +Mcu.Pin0=PC13 +Mcu.Pin1=PC14-OSC32_IN (PC14) +Mcu.Pin10=PA6 +Mcu.Pin11=PA7 +Mcu.Pin12=PB13 +Mcu.Pin13=PA9 +Mcu.Pin14=PA10 +Mcu.Pin15=PA11 +Mcu.Pin16=PA12 +Mcu.Pin17=PA13 (JTMS-SWDIO) +Mcu.Pin18=PA14 (JTCK-SWCLK) +Mcu.Pin19=PB3 (JTDO-TRACESWO) +Mcu.Pin2=PC15-OSC32_OUT (PC15) +Mcu.Pin20=VP_LPTIM1_VS_LPTIM_counterModeInternalClock +Mcu.Pin21=VP_RTC_VS_RTC_Activate +Mcu.Pin22=VP_SYS_VS_Systick +Mcu.Pin23=VP_TIM2_VS_ClockSourceINT +Mcu.Pin3=PH0-OSC_IN (PH0) +Mcu.Pin4=PH1-OSC_OUT (PH1) +Mcu.Pin5=PA1 +Mcu.Pin6=PA2 +Mcu.Pin7=PA3 +Mcu.Pin8=PA4 +Mcu.Pin9=PA5 +Mcu.PinsNb=24 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32L433RCTxP +MxCube.Version=5.6.0 +MxDb.Version=DB.5.0.60 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:true\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false +PA1.Mode=Full_Duplex_Master +PA1.Signal=SPI1_SCK +PA10.Locked=true +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA11.Mode=Full_Duplex_Master +PA11.Signal=SPI1_MISO +PA12.Mode=Full_Duplex_Master +PA12.Signal=SPI1_MOSI +PA13\ (JTMS-SWDIO).GPIOParameters=GPIO_Label +PA13\ (JTMS-SWDIO).GPIO_Label=TMS +PA13\ (JTMS-SWDIO).Locked=true +PA13\ (JTMS-SWDIO).Mode=Serial_Wire +PA13\ (JTMS-SWDIO).Signal=SYS_JTMS-SWDIO +PA14\ (JTCK-SWCLK).GPIOParameters=GPIO_Label +PA14\ (JTCK-SWCLK).GPIO_Label=TCK +PA14\ (JTCK-SWCLK).Locked=true +PA14\ (JTCK-SWCLK).Mode=Serial_Wire +PA14\ (JTCK-SWCLK).Signal=SYS_JTCK-SWCLK +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.Locked=true +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA4.GPIOParameters=GPIO_Label +PA4.GPIO_Label=SMPS_EN [ADP5301ACBZ_VEN] +PA4.Locked=true +PA4.Signal=GPIO_Output +PA5.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP +PA5.GPIO_Label=SMPS_V1 +PA5.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP +PA5.GPIO_PuPd=GPIO_NOPULL +PA5.GPIO_Speed=GPIO_SPEED_FREQ_LOW +PA5.Locked=true +PA5.Signal=GPIO_Output +PA6.GPIOParameters=GPIO_PuPd,GPIO_Label +PA6.GPIO_Label=SMPS_PG [ADP5301ACBZ_OUTOK] +PA6.GPIO_PuPd=GPIO_PULLUP +PA6.Locked=true +PA6.Signal=GPIO_Input +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=SMPS_SW [TS3A44159PWR_IN1_2] +PA7.Locked=true +PA7.Signal=GPIO_Output +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB13.GPIOParameters=GPIO_Label +PB13.GPIO_Label=LD4 [green Led] +PB13.Locked=true +PB13.Signal=GPIO_Output +PB3\ (JTDO-TRACESWO).GPIOParameters=GPIO_Label +PB3\ (JTDO-TRACESWO).GPIO_Label=SWO +PB3\ (JTDO-TRACESWO).Locked=true +PB3\ (JTDO-TRACESWO).Signal=SYS_JTDO-SWO +PC13.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +PC13.GPIO_Label=B1 [Blue PushButton] +PC13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PC13.GPIO_PuPd=GPIO_NOPULL +PC13.Locked=true +PC13.Signal=GPXTI13 +PC14-OSC32_IN\ (PC14).Locked=true +PC14-OSC32_IN\ (PC14).Mode=LSE-External-Oscillator +PC14-OSC32_IN\ (PC14).Signal=RCC_OSC32_IN +PC15-OSC32_OUT\ (PC15).Locked=true +PC15-OSC32_OUT\ (PC15).Mode=LSE-External-Oscillator +PC15-OSC32_OUT\ (PC15).Signal=RCC_OSC32_OUT +PH0-OSC_IN\ (PH0).GPIOParameters=GPIO_Label +PH0-OSC_IN\ (PH0).GPIO_Label=MCO +PH0-OSC_IN\ (PH0).Locked=true +PH0-OSC_IN\ (PH0).Mode=HSE-External-Clock-Source +PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN +PH1-OSC_OUT\ (PH1).Locked=true +PH1-OSC_OUT\ (PH1).Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32L433RCTxP +ProjectManager.FirmwarePackage=STM32Cube FW_L4 V1.15.1 +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.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_LPTIM1_Init-LPTIM1-false-HAL-true,5-MX_RTC_Init-RTC-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true +RCC.ADCFreq_Value=16000000 +RCC.AHBFreq_Value=80000000 +RCC.APB1Freq_Value=80000000 +RCC.APB1TimFreq_Value=80000000 +RCC.APB2Freq_Value=80000000 +RCC.APB2TimFreq_Value=80000000 +RCC.CortexFreq_Value=80000000 +RCC.FCLKCortexFreq_Value=80000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=80000000 +RCC.HSE_VALUE=8000000 +RCC.HSI48_VALUE=48000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=80000000 +RCC.I2C2Freq_Value=80000000 +RCC.I2C3Freq_Value=80000000 +RCC.I2C4Freq_Value=80000000 +RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,LCDFreq_Value,LPTIM1CLockSelection,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,MSI_VALUE,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSAI1PoutputFreq_Value,PLLSAI1QoutputFreq_Value,PLLSAI1RoutputFreq_Value,PREFETCH_ENABLE,PWRFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SDMMCFreq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value,VCOSAI2OutputFreq_Value +RCC.LCDFreq_Value=32768 +RCC.LPTIM1CLockSelection=RCC_LPTIM1CLKSOURCE_LSE +RCC.LPTIM1Freq_Value=32768 +RCC.LPTIM2Freq_Value=80000000 +RCC.LPUART1Freq_Value=80000000 +RCC.LSCOPinFreq_Value=32000 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=80000000 +RCC.MSI_VALUE=4000000 +RCC.PLLN=40 +RCC.PLLPoutputFreq_Value=22857142.85714286 +RCC.PLLQoutputFreq_Value=80000000 +RCC.PLLRCLKFreq_Value=80000000 +RCC.PLLSAI1PoutputFreq_Value=4571428.571428572 +RCC.PLLSAI1QoutputFreq_Value=16000000 +RCC.PLLSAI1RoutputFreq_Value=16000000 +RCC.PREFETCH_ENABLE=1 +RCC.PWRFreq_Value=80000000 +RCC.RNGFreq_Value=16000000 +RCC.RTCClockSelection=RCC_RTCCLKSOURCE_LSE +RCC.RTCFreq_Value=32768 +RCC.SAI1Freq_Value=4571428.571428572 +RCC.SDMMCFreq_Value=64000000 +RCC.SWPMI1Freq_Value=80000000 +RCC.SYSCLKFreq_VALUE=80000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.UART4Freq_Value=80000000 +RCC.UART5Freq_Value=80000000 +RCC.USART1Freq_Value=80000000 +RCC.USART2Freq_Value=80000000 +RCC.USART3Freq_Value=80000000 +RCC.USBFreq_Value=16000000 +RCC.VCOInputFreq_Value=4000000 +RCC.VCOOutputFreq_Value=160000000 +RCC.VCOSAI1OutputFreq_Value=32000000 +RCC.VCOSAI2OutputFreq_Value=128000000 +SH.GPXTI13.0=GPIO_EXTI13 +SH.GPXTI13.ConfNb=1 +SPI1.CalculateBaudRate=40.0 MBits/s +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualType=VM_MASTER +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +USART2.IPParameters=VirtualMode-Asynchronous +USART2.VirtualMode-Asynchronous=VM_ASYNC +VP_LPTIM1_VS_LPTIM_counterModeInternalClock.Mode=Counts__internal_clock_event_00 +VP_LPTIM1_VS_LPTIM_counterModeInternalClock.Signal=LPTIM1_VS_LPTIM_counterModeInternalClock +VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled +VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM2_VS_ClockSourceINT.Mode=Internal +VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +board=NUCLEO-L433RC-P +boardIOC=true diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..5c2ab9a10e --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,91 @@ +/* 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) 2020 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_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 -----------------------------------------------------------*/ +#define B1_Pin GPIO_PIN_13 +#define B1_GPIO_Port GPIOC +#define MCO_Pin GPIO_PIN_0 +#define MCO_GPIO_Port GPIOH +#define SMPS_EN_Pin GPIO_PIN_4 +#define SMPS_EN_GPIO_Port GPIOA +#define SMPS_V1_Pin GPIO_PIN_5 +#define SMPS_V1_GPIO_Port GPIOA +#define SMPS_PG_Pin GPIO_PIN_6 +#define SMPS_PG_GPIO_Port GPIOA +#define SMPS_SW_Pin GPIO_PIN_7 +#define SMPS_SW_GPIO_Port GPIOA +#define LD4_Pin GPIO_PIN_13 +#define LD4_GPIO_Port GPIOB +#define TMS_Pin GPIO_PIN_13 +#define TMS_GPIO_Port GPIOA +#define TCK_Pin GPIO_PIN_14 +#define TCK_GPIO_Port GPIOA +#define SWO_Pin GPIO_PIN_3 +#define SWO_GPIO_Port GPIOB +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h new file mode 100644 index 0000000000..743caabb9a --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h @@ -0,0 +1,450 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2020 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_CONF_H +#define __STM32L4xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ + +#define HAL_MODULE_ENABLED +/*#define HAL_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_COMP_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_DCMI_MODULE_ENABLED */ +/*#define HAL_DMA2D_MODULE_ENABLED */ +/*#define HAL_DFSDM_MODULE_ENABLED */ +/*#define HAL_DSI_MODULE_ENABLED */ +/*#define HAL_FIREWALL_MODULE_ENABLED */ +/*#define HAL_GFXMMU_MODULE_ENABLED */ +/*#define HAL_HCD_MODULE_ENABLED */ +/*#define HAL_HASH_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LTDC_MODULE_ENABLED */ +/*#define HAL_LCD_MODULE_ENABLED */ +#define HAL_LPTIM_MODULE_ENABLED +/*#define HAL_MMC_MODULE_ENABLED */ +/*#define HAL_NAND_MODULE_ENABLED */ +/*#define HAL_NOR_MODULE_ENABLED */ +/*#define HAL_OPAMP_MODULE_ENABLED */ +/*#define HAL_OSPI_MODULE_ENABLED */ +/*#define HAL_OSPI_MODULE_ENABLED */ +/*#define HAL_PCD_MODULE_ENABLED */ +/*#define HAL_PKA_MODULE_ENABLED */ +/*#define HAL_QSPI_MODULE_ENABLED */ +/*#define HAL_QSPI_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +#define HAL_RTC_MODULE_ENABLED +/*#define HAL_SAI_MODULE_ENABLED */ +/*#define HAL_SD_MODULE_ENABLED */ +/*#define HAL_SMBUS_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +/*#define HAL_SRAM_MODULE_ENABLED */ +/*#define HAL_SWPMI_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED +/*#define HAL_TSC_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +/*#define HAL_EXTI_MODULE_ENABLED */ +/*#define HAL_PSSI_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_I2C_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 + +/* ########################## 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 ((uint32_t)8000000U) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100U) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal Multiple Speed oscillator (MSI) default value. + * This value is the default MSI range value after Reset. + */ +#if !defined (MSI_VALUE) + #define MSI_VALUE ((uint32_t)4000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* MSI_VALUE */ +/** + * @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 ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @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 ((uint32_t)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 */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE ((uint32_t)32000U) /*!< 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 ((uint32_t)32768U) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for SAI1 peripheral + * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source + * frequency. + */ +#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) + #define EXTERNAL_SAI1_CLOCK_VALUE ((uint32_t)2097000U) /*!< Value of the SAI1 External clock source in Hz*/ +#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ + +/** + * @brief External clock source for SAI2 peripheral + * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source + * frequency. + */ +#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) + #define EXTERNAL_SAI2_CLOCK_VALUE ((uint32_t)48000U) /*!< Value of the SAI2 External clock source in Hz*/ +#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ + +/* 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 ((uint32_t)3300U) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0U) /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 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 + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32l4xx_hal_rcc.h" + #include "stm32l4xx_hal_rcc_ex.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32l4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32l4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32l4xx_hal_dma.h" + #include "stm32l4xx_hal_dma_ex.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32l4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32l4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32l4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32l4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32l4xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32l4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32l4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32l4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32l4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32l4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32l4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_FIREWALL_MODULE_ENABLED + #include "stm32l4xx_hal_firewall.h" +#endif /* HAL_FIREWALL_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32l4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32l4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32l4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32l4xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32l4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32l4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32l4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32l4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LCD_MODULE_ENABLED + #include "stm32l4xx_hal_lcd.h" +#endif /* HAL_LCD_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32l4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32l4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_OPAMP_MODULE_ENABLED + #include "stm32l4xx_hal_opamp.h" +#endif /* HAL_OPAMP_MODULE_ENABLED */ + +#ifdef HAL_OSPI_MODULE_ENABLED + #include "stm32l4xx_hal_ospi.h" +#endif /* HAL_OSPI_MODULE_ENABLED */ + +#ifdef HAL_PKA_MODULE_ENABLED + #include "stm32l4xx_hal_pka.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32l4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32l4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32l4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32l4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32l4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32l4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32l4xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32l4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_SWPMI_MODULE_ENABLED + #include "stm32l4xx_hal_swpmi.h" +#endif /* HAL_SWPMI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32l4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_TSC_MODULE_ENABLED + #include "stm32l4xx_hal_tsc.h" +#endif /* HAL_TSC_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32l4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32l4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32l4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32l4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32l4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32l4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32l4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_GFXMMU_MODULE_ENABLED + #include "stm32l4xx_hal_gfxmmu.h" +#endif /* HAL_GFXMMU_MODULE_ENABLED */ + +#ifdef HAL_PSSI_MODULE_ENABLED + #include "stm32l4xx_hal_pssi.h" +#endif /* HAL_PSSI_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(char *file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h new file mode 100644 index 0000000000..1bedbf684d --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Inc/stm32l4xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32l4xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_IT_H +#define __STM32L4xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..9f8efab2b3 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/main.c @@ -0,0 +1,498 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +LPTIM_HandleTypeDef hlptim1; + +RTC_HandleTypeDef hrtc; + +SPI_HandleTypeDef hspi1; + +TIM_HandleTypeDef htim2; + +UART_HandleTypeDef huart1; +UART_HandleTypeDef huart2; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART2_UART_Init(void); +static void MX_LPTIM1_Init(void); +static void MX_RTC_Init(void); +static void MX_TIM2_Init(void); +static void MX_USART1_UART_Init(void); +static void MX_SPI1_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART2_UART_Init(); + MX_LPTIM1_Init(); + MX_RTC_Init(); + MX_TIM2_Init(); + MX_USART1_UART_Init(); + MX_SPI1_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.MSIState = RCC_MSI_ON; + RCC_OscInitStruct.MSICalibrationValue = 0; + RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI; + RCC_OscInitStruct.PLL.PLLM = 1; + RCC_OscInitStruct.PLL.PLLN = 40; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7; + RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; + RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1 + |RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_LPTIM1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSE; + PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + /** Configure the main internal regulator output voltage + */ + if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) + { + Error_Handler(); + } + /** Enable MSI Auto calibration + */ + HAL_RCCEx_EnableMSIPLLMode(); +} + +/** + * @brief LPTIM1 Initialization Function + * @param None + * @retval None + */ +static void MX_LPTIM1_Init(void) +{ + + /* USER CODE BEGIN LPTIM1_Init 0 */ + + /* USER CODE END LPTIM1_Init 0 */ + + /* USER CODE BEGIN LPTIM1_Init 1 */ + + /* USER CODE END LPTIM1_Init 1 */ + hlptim1.Instance = LPTIM1; + hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; + hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1; + hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; + hlptim1.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; + hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; + hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; + hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO; + hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO; + if (HAL_LPTIM_Init(&hlptim1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPTIM1_Init 2 */ + + /* USER CODE END LPTIM1_Init 2 */ + +} + +/** + * @brief RTC Initialization Function + * @param None + * @retval None + */ +static void MX_RTC_Init(void) +{ + + /* USER CODE BEGIN RTC_Init 0 */ + + /* USER CODE END RTC_Init 0 */ + + /* USER CODE BEGIN RTC_Init 1 */ + + /* USER CODE END RTC_Init 1 */ + /** Initialize RTC Only + */ + hrtc.Instance = RTC; + hrtc.Init.HourFormat = RTC_HOURFORMAT_24; + hrtc.Init.AsynchPrediv = 127; + hrtc.Init.SynchPrediv = 255; + hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; + hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE; + hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; + hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; + if (HAL_RTC_Init(&hrtc) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN RTC_Init 2 */ + + /* USER CODE END RTC_Init 2 */ + +} + +/** + * @brief SPI1 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI1_Init(void) +{ + + /* USER CODE BEGIN SPI1_Init 0 */ + + /* USER CODE END SPI1_Init 0 */ + + /* USER CODE BEGIN SPI1_Init 1 */ + + /* USER CODE END SPI1_Init 1 */ + /* SPI1 parameter configuration*/ + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_4BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 7; + hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; + hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; + if (HAL_SPI_Init(&hspi1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI1_Init 2 */ + + /* USER CODE END SPI1_Init 2 */ + +} + +/** + * @brief TIM2 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM2_Init(void) +{ + + /* USER CODE BEGIN TIM2_Init 0 */ + + /* USER CODE END TIM2_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM2_Init 1 */ + + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + htim2.Init.Prescaler = 0; + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.Period = 0; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief USART2 Initialization Function + * @param None + * @retval None + */ +static void MX_USART2_UART_Init(void) +{ + + /* USER CODE BEGIN USART2_Init 0 */ + + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + huart2.Init.BaudRate = 115200; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, SMPS_EN_Pin|SMPS_V1_Pin|SMPS_SW_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : B1_Pin */ + GPIO_InitStruct.Pin = B1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pins : SMPS_EN_Pin SMPS_V1_Pin SMPS_SW_Pin */ + GPIO_InitStruct.Pin = SMPS_EN_Pin|SMPS_V1_Pin|SMPS_SW_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pin : SMPS_PG_Pin */ + GPIO_InitStruct.Pin = SMPS_PG_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLUP; + HAL_GPIO_Init(SMPS_PG_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : LD4_Pin */ + GPIO_InitStruct.Pin = LD4_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LD4_GPIO_Port, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c new file mode 100644 index 0000000000..1ce37c7e25 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c @@ -0,0 +1,390 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32l4xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief LPTIM MSP Initialization +* This function configures the hardware resources used in this example +* @param hlptim: LPTIM handle pointer +* @retval None +*/ +void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim) +{ + if(hlptim->Instance==LPTIM1) + { + /* USER CODE BEGIN LPTIM1_MspInit 0 */ + + /* USER CODE END LPTIM1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_LPTIM1_CLK_ENABLE(); + /* USER CODE BEGIN LPTIM1_MspInit 1 */ + + /* USER CODE END LPTIM1_MspInit 1 */ + } + +} + +/** +* @brief LPTIM MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hlptim: LPTIM handle pointer +* @retval None +*/ +void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef* hlptim) +{ + if(hlptim->Instance==LPTIM1) + { + /* USER CODE BEGIN LPTIM1_MspDeInit 0 */ + + /* USER CODE END LPTIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPTIM1_CLK_DISABLE(); + /* USER CODE BEGIN LPTIM1_MspDeInit 1 */ + + /* USER CODE END LPTIM1_MspDeInit 1 */ + } + +} + +/** +* @brief RTC MSP Initialization +* This function configures the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) +{ + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspInit 0 */ + + /* USER CODE END RTC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_RTC_ENABLE(); + /* USER CODE BEGIN RTC_MspInit 1 */ + + /* USER CODE END RTC_MspInit 1 */ + } + +} + +/** +* @brief RTC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hrtc: RTC handle pointer +* @retval None +*/ +void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) +{ + if(hrtc->Instance==RTC) + { + /* USER CODE BEGIN RTC_MspDeInit 0 */ + + /* USER CODE END RTC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_RTC_DISABLE(); + /* USER CODE BEGIN RTC_MspDeInit 1 */ + + /* USER CODE END RTC_MspDeInit 1 */ + } + +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hspi->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspInit 0 */ + + /* USER CODE END SPI1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**SPI1 GPIO Configuration + PA1 ------> SPI1_SCK + PA11 ------> SPI1_MISO + PA12 ------> SPI1_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI1_MspInit 1 */ + + /* USER CODE END SPI1_MspInit 1 */ + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspDeInit 0 */ + + /* USER CODE END SPI1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI1_CLK_DISABLE(); + + /**SPI1 GPIO Configuration + PA1 ------> SPI1_SCK + PA11 ------> SPI1_MISO + PA12 ------> SPI1_MOSI + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_11|GPIO_PIN_12); + + /* USER CODE BEGIN SPI1_MspDeInit 1 */ + + /* USER CODE END SPI1_MspDeInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } + +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + else if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + else if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c new file mode 100644 index 0000000000..8f827e4821 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/stm32l4xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32l4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32l4xx_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-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Prefetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32L4xx 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_stm32l4xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c new file mode 100644 index 0000000000..26bd517974 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/CubeMX_Config/Src/system_stm32l4xx.c @@ -0,0 +1,337 @@ +/** + ****************************************************************************** + * @file system_stm32l4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32l4xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * After each device reset the MSI (4 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32l4xx.s" file, to + * configure the system clock before to branch to main program. + * + * This file configures the system clock as follows: + *============================================================================= + *----------------------------------------------------------------------------- + * System Clock source | MSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 4000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 4000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 1 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 1 + *----------------------------------------------------------------------------- + * PLL_M | 1 + *----------------------------------------------------------------------------- + * PLL_N | 8 + *----------------------------------------------------------------------------- + * PLL_P | 7 + *----------------------------------------------------------------------------- + * PLL_Q | 2 + *----------------------------------------------------------------------------- + * PLL_R | 2 + *----------------------------------------------------------------------------- + * PLLSAI1_P | NA + *----------------------------------------------------------------------------- + * PLLSAI1_Q | NA + *----------------------------------------------------------------------------- + * PLLSAI1_R | NA + *----------------------------------------------------------------------------- + * PLLSAI2_P | NA + *----------------------------------------------------------------------------- + * PLLSAI2_Q | NA + *----------------------------------------------------------------------------- + * PLLSAI2_R | NA + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Disabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

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

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32l4xx_system + * @{ + */ + +/** @addtogroup STM32L4xx_System_Private_Includes + * @{ + */ + +#include "stm32l4xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (MSI_VALUE) + #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* MSI_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +/******************************************************************************/ +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Variables + * @{ + */ + /* The SystemCoreClock variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 4000000U; + + const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U}; + const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U}; + const uint32_t MSIRangeTable[12] = {100000U, 200000U, 400000U, 800000U, 1000000U, 2000000U, \ + 4000000U, 8000000U, 16000000U, 24000000U, 32000000U, 48000000U}; +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32L4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * @param None + * @retval None + */ + +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set MSION bit */ + RCC->CR |= RCC_CR_MSION; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000U; + + /* Reset HSEON, CSSON , HSION, and PLLON bits */ + RCC->CR &= 0xEAF6FFFFU; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x00001000U; + + /* Reset HSEBYP bit */ + RCC->CR &= 0xFFFBFFFFU; + + /* Disable all interrupts */ + RCC->CIER = 0x00000000U; + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is MSI, SystemCoreClock will contain the MSI_VALUE(*) + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***) + * or HSI_VALUE(*) or MSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) MSI_VALUE is a constant defined in stm32l4xx_hal.h file (default value + * 4 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSI_VALUE is a constant defined in stm32l4xx_hal.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***) HSE_VALUE is a constant defined in stm32l4xx_hal.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0U, msirange = 0U, pllvco = 0U, pllr = 2U, pllsource = 0U, pllm = 2U; + + /* Get MSI Range frequency--------------------------------------------------*/ + if((RCC->CR & RCC_CR_MSIRGSEL) == RESET) + { /* MSISRANGE from RCC_CSR applies */ + msirange = (RCC->CSR & RCC_CSR_MSISRANGE) >> 8U; + } + else + { /* MSIRANGE from RCC_CR applies */ + msirange = (RCC->CR & RCC_CR_MSIRANGE) >> 4U; + } + /*MSI frequency range in HZ*/ + msirange = MSIRangeTable[msirange]; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case 0x00: /* MSI used as system clock source */ + SystemCoreClock = msirange; + break; + + case 0x04: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + + case 0x08: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + + case 0x0C: /* PLL used as system clock source */ + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); + pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> 4U) + 1U ; + + switch (pllsource) + { + case 0x02: /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm); + break; + + case 0x03: /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm); + break; + + default: /* MSI used as PLL clock source */ + pllvco = (msirange / pllm); + break; + } + pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 8U); + pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 25U) + 1U) * 2U; + SystemCoreClock = pllvco/pllr; + break; + + default: + SystemCoreClock = msirange; + break; + } + /* Compute HCLK clock frequency --------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l433-st-nucleo/board/Kconfig b/bsp/stm32/stm32l433-st-nucleo/board/Kconfig new file mode 100644 index 0000000000..81895298e8 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/Kconfig @@ -0,0 +1,96 @@ +menu "Hardware Drivers Config" + +config SOC_STM32L433RC + bool + select SOC_SERIES_STM32L4 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default n + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART2 + bool "Enable UART2" + default y + + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + default n + + config BSP_SPI1_TX_USING_DMA + bool "Enable SPI1 TX DMA" + depends on BSP_USING_SPI1 + default n + + config BSP_SPI1_RX_USING_DMA + bool "Enable SPI1 RX DMA" + depends on BSP_USING_SPI1 + select BSP_SPI1_TX_USING_DMA + default n + endif + + config BSP_USING_ON_CHIP_FLASH + bool "Enable on-chip FLASH" + default n + + menuconfig BSP_USING_ONCHIP_RTC + bool "Enable RTC" + select RT_USING_RTC + select RT_USING_LIBC + default n + if BSP_USING_ONCHIP_RTC + choice + prompt "Select clock source" + default BSP_RTC_USING_LSE + + config BSP_RTC_USING_LSE + bool "RTC USING LSE" + + config BSP_RTC_USING_LSI + bool "RTC USING LSI" + endchoice + endif + + source "../libraries/HAL_Drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32l433-st-nucleo/board/SConscript b/bsp/stm32/stm32l433-st-nucleo/board/SConscript new file mode 100644 index 0000000000..162a1183ef --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/SConscript @@ -0,0 +1,39 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32l4xx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/gcc/startup_stm32l433xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/arm/startup_stm32l433xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/iar/startup_stm32l433xx.s'] + +# STM32L412xx || STM32L422xx || STM32L431xx +# STM32L432xx || STM32L433xx || STM32L442xx +# STM32L443xx || STM32L451xx || STM32L452xx +# STM32L462xx || STM32L471xx || STM32L475xx +# STM32L476xx || STM32L485xx || STM32L486xx +# STM32L496xx || STM32L4A6xx || STM32L4R5xx +# STM32L4R7xx || STM32L4R9xx || STM32L4S5xx +# STM32L4S7xx || STM32L4S9xx +# You can select chips from the list above +CPPDEFINES = ['STM32L433xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32l433-st-nucleo/board/board.c b/bsp/stm32/stm32l433-st-nucleo/board/board.c new file mode 100644 index 0000000000..0cf319801f --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/board.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#include "board.h" + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.MSIState = RCC_MSI_ON; + RCC_OscInitStruct.MSICalibrationValue = 0; + RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI; + RCC_OscInitStruct.PLL.PLLM = 1; + RCC_OscInitStruct.PLL.PLLN = 40; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7; + RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; + RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1 + |RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_LPTIM1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSE; + PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + /** Configure the main internal regulator output voltage + */ + if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) + { + Error_Handler(); + } + /** Enable MSI Auto calibration + */ + HAL_RCCEx_EnableMSIPLLMode(); +} diff --git a/bsp/stm32/stm32l433-st-nucleo/board/board.h b/bsp/stm32/stm32l433-st-nucleo/board/board.h new file mode 100644 index 0000000000..3b3a77e103 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/board.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2018, 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 (256 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM1_SIZE (48) +#define STM32_SRAM1_START (0x20000000) +#define STM32_SRAM1_END (STM32_SRAM1_START + STM32_SRAM1_SIZE * 1024) + +#define HEAP_BEGIN STM32_SRAM1_START +#define HEAP_END STM32_SRAM1_END + +void SystemClock_Config(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.icf b/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.icf new file mode 100644 index 0000000000..1d95e70851 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.icf @@ -0,0 +1,33 @@ +/*###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__ = 0x0803FFFF; +define symbol __ICFEDIT_region_RAM1_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM1_end__ = 0x2000BFFF; +define symbol __ICFEDIT_region_RAM2_start__ = 0x10000000; +define symbol __ICFEDIT_region_RAM2_end__ = 0x10003FFF; + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** 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 RAM1_region = mem:[from __ICFEDIT_region_RAM1_start__ to __ICFEDIT_region_RAM1_end__]; +define region RAM2_region = mem:[from __ICFEDIT_region_RAM2_start__ to __ICFEDIT_region_RAM2_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 RAM1_region { section .sram }; +place in RAM2_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.lds new file mode 100644 index 0000000000..f659e99588 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.lds @@ -0,0 +1,158 @@ +/* + * linker script for STM32L4XX with GNU ld + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 256k /* 256KB flash */ + RAM1 (rw) : ORIGIN = 0x20000000, LENGTH = 48k /* 48K sram */ + RAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 16k /* 16K 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 = . ; + } >RAM2 + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM2 + + __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) + } > RAM2 + __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/stm32l433-st-nucleo/board/linker_scripts/link.sct b/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.sct new file mode 100644 index 0000000000..ed86f920e0 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00040000 { ; load region size_region + ER_IROM1 0x08000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM2 0x10000000 0x00004000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32l433-st-nucleo/figures/board.jpg b/bsp/stm32/stm32l433-st-nucleo/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ca826db87e24fa2997d51dfd667f732c231dd1c GIT binary patch literal 155046 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 z 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\a37PQ~Ns2!I8?6Wgk#`X*2 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 Ug(v^}`QLZ&|91{3{x|x60R9@Zo&W#< literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32l433-st-nucleo/project.ewd b/bsp/stm32/stm32l433-st-nucleo/project.ewd new file mode 100644 index 0000000000..0055f03d6a --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/project.ewd @@ -0,0 +1,2834 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\IARProbe\IarProbePlugin.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32l433-st-nucleo/project.ewp b/bsp/stm32/stm32l433-st-nucleo/project.ewp new file mode 100644 index 0000000000..4e1733711f --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/project.ewp @@ -0,0 +1,2329 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32l4xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\iar\startup_stm32l432xx.s + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + cpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m4\context_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\rtc\rtc.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\watchdog\watchdog.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.c + + + + dlib + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\libc.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\rmtx.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\stdio.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rtc.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rtc_ex.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_iwdg.c + + + $PROJ_DIR$\..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_wwdg.c + + + diff --git a/bsp/stm32/stm32l433-st-nucleo/project.eww b/bsp/stm32/stm32l433-st-nucleo/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32l433-st-nucleo/project.uvoptx b/bsp/stm32/stm32l433-st-nucleo/project.uvoptx new file mode 100644 index 0000000000..fe048932d8 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/project.uvoptx @@ -0,0 +1,1004 @@ + + + + 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 ) -FN1 -FC1000 -FD20000000 -FF0STM32L4xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32L433RCTx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U -O206 -SF5000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L433RCTx$CMSIS\Flash\STM32L4xx_256.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 + 5000000 + + + + + + Kernel + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Applications + 1 + 0 + 0 + 0 + + 2 + 15 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 3 + 16 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32l4xx_hal_msp.c + stm32l4xx_hal_msp.c + 0 + 0 + + + 3 + 18 + 2 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l433xx.s + startup_stm32l433xx.s + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 4 + 22 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 26 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 5 + 27 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 7 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\libc.c + libc.c + 0 + 0 + + + 7 + 40 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + mem_std.c + 0 + 0 + + + 7 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stubs.c + stubs.c + 0 + 0 + + + 7 + 42 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 8 + 43 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + system_stm32l4xx.c + 0 + 0 + + + 8 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + stm32l4xx_hal.c + 0 + 0 + + + 8 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + stm32l4xx_hal_comp.c + 0 + 0 + + + 8 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + stm32l4xx_hal_cortex.c + 0 + 0 + + + 8 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + stm32l4xx_hal_crc.c + 0 + 0 + + + 8 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + stm32l4xx_hal_crc_ex.c + 0 + 0 + + + 8 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + stm32l4xx_hal_cryp.c + 0 + 0 + + + 8 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + stm32l4xx_hal_cryp_ex.c + 0 + 0 + + + 8 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + stm32l4xx_hal_dma.c + 0 + 0 + + + 8 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + stm32l4xx_hal_dma_ex.c + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + stm32l4xx_hal_exti.c + 0 + 0 + + + 8 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + stm32l4xx_hal_pwr.c + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + stm32l4xx_hal_pwr_ex.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + stm32l4xx_hal_rcc.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + stm32l4xx_hal_rcc_ex.c + 0 + 0 + + + 8 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + stm32l4xx_hal_rng.c + 0 + 0 + + + 8 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + stm32l4xx_hal_gpio.c + 0 + 0 + + + 8 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + stm32l4xx_hal_uart.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + stm32l4xx_hal_uart_ex.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + stm32l4xx_hal_usart.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + stm32l4xx_hal_usart_ex.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32l433-st-nucleo/project.uvprojx b/bsp/stm32/stm32l433-st-nucleo/project.uvprojx new file mode 100644 index 0000000000..7a7fdfe915 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/project.uvprojx @@ -0,0 +1,747 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32L433RCTx + STMicroelectronics + Keil.STM32L4xx_DFP.2.3.0 + https://www.keil.com/pack/ + IRAM(0x20000000,0x0000C000) IRAM2(0x10000000,0x00004000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") FPU2 DSP CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L433RCTx$CMSIS\Flash\STM32L4xx_256.FLM)) + 0 + $$Device:STM32L433RCTx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h + + + + + + + + + + $$Device:STM32L433RCTx$CMSIS\SVD\STM32L4x3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 1 + 1 + 1 + .\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 + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 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 + 0xc000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0xc000 + + + 0 + 0x10000000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, STM32L433xx, RT_USING_ARM_LIBC + + .;..\..\..\include;.;applications;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\libc\compilers\armlibc;..\..\..\components\libc\compilers\common;..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Inc;..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Include;..\libraries\STM32L4xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32l4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32l4xx_hal_msp.c + + + startup_stm32l433xx.s + 2 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l433xx.s + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + ..\libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + + + cpu + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + libc + + + libc.c + 1 + ..\..\..\components\libc\compilers\armlibc\libc.c + + + mem_std.c + 1 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + + + stubs.c + 1 + ..\..\..\components\libc\compilers\armlibc\stubs.c + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + STM32_HAL + + + system_stm32l4xx.c + 1 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + + + stm32l4xx_hal.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + + + stm32l4xx_hal_comp.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + + + stm32l4xx_hal_cortex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + + + stm32l4xx_hal_crc.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + + + stm32l4xx_hal_crc_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + + + stm32l4xx_hal_cryp.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + + + stm32l4xx_hal_cryp_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + + + stm32l4xx_hal_dma.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + + + stm32l4xx_hal_dma_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + + + stm32l4xx_hal_exti.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + + + stm32l4xx_hal_pwr.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + + + stm32l4xx_hal_pwr_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + + + stm32l4xx_hal_rcc.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + + + stm32l4xx_hal_rcc_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + + + stm32l4xx_hal_rng.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + + + stm32l4xx_hal_gpio.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + + + stm32l4xx_hal_uart.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + + + stm32l4xx_hal_uart_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + + + stm32l4xx_hal_usart.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + + + stm32l4xx_hal_usart_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + + + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32l433-st-nucleo/rtconfig.h b/bsp/stm32/stm32l433-st-nucleo/rtconfig.h new file mode 100644 index 0000000000..df72265b6c --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/rtconfig.h @@ -0,0 +1,170 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 256 +#define RT_CONSOLE_DEVICE_NAME "uart2" +#define RT_VER_NUM 0x40003 +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M4 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_USING_LIBC + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32L4 + +/* Hardware Drivers Config */ + +#define SOC_STM32L433RC + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART2 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32l433-st-nucleo/rtconfig.py b/bsp/stm32/stm32l433-st-nucleo/rtconfig.py new file mode 100644 index 0000000000..2e022a964b --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/rtconfig.py @@ -0,0 +1,143 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +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 = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +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-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -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-M4.fp ' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict --scatter "board\linker_scripts\link.sct"' + 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 == 'iar': + # 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-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + 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-M4' + AFLAGS += ' --fpu VFPv4_sp' + 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' diff --git a/bsp/stm32/stm32l433-st-nucleo/template.ewp b/bsp/stm32/stm32l433-st-nucleo/template.ewp new file mode 100644 index 0000000000..a04ab0c3e3 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/template.ewp @@ -0,0 +1,2031 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32l433-st-nucleo/template.eww b/bsp/stm32/stm32l433-st-nucleo/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32l433-st-nucleo/template.uvoptx b/bsp/stm32/stm32l433-st-nucleo/template.uvoptx new file mode 100644 index 0000000000..6122affd8f --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/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 + + + 0 + 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 ) -FN1 -FC1000 -FD20000000 -FF0STM32L4xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32L433RCTx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U -O206 -SF5000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO18 -TC10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L433RCTx$CMSIS\Flash\STM32L4xx_256.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 + 5000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32l433-st-nucleo/template.uvprojx b/bsp/stm32/stm32l433-st-nucleo/template.uvprojx new file mode 100644 index 0000000000..f4e671bde3 --- /dev/null +++ b/bsp/stm32/stm32l433-st-nucleo/template.uvprojx @@ -0,0 +1,395 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060300::V5.06 update 3 (build 300)::ARMCC + 0 + + + STM32L433RCTx + STMicroelectronics + Keil.STM32L4xx_DFP.2.3.0 + https://www.keil.com/pack/ + IRAM(0x20000000,0x0000C000) IRAM2(0x10000000,0x00004000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") FPU2 DSP CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L433RCTx$CMSIS\Flash\STM32L4xx_256.FLM)) + 0 + $$Device:STM32L433RCTx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h + + + + + + + + + + $$Device:STM32L433RCTx$CMSIS\SVD\STM32L4x3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 1 + 1 + 1 + .\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 + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 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-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 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 + 0xc000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0xc000 + + + 0 + 0x10000000 + 0x4000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +
From 166138d42d2bb07d4330e3a8ed3b6172f7c96759 Mon Sep 17 00:00:00 2001 From: Sunwancn Date: Fri, 22 May 2020 14:51:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20CI=20=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 82421e993c..143cfad7c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -109,6 +109,7 @@ env: - RTT_BSP='stm32/stm32l4r9-st-eval' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32l053-st-nucleo' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32l432-st-nucleo' RTT_TOOL_CHAIN='sourcery-arm' + - RTT_BSP='stm32/stm32l433-st-nucleo' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32l475-atk-pandora' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32l475-st-discovery' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='stm32/stm32l476-st-nucleo' RTT_TOOL_CHAIN='sourcery-arm'