From 3c9d5d7af2961cead7f83bc7af45bde56e1cf0ca Mon Sep 17 00:00:00 2001 From: chenjiafan Date: Tue, 29 Dec 2020 00:46:47 +0800 Subject: [PATCH] [add]add Bear-Pi BSP --- bsp/stm32/stm32l431-BearPi/.config | 499 +++ bsp/stm32/stm32l431-BearPi/.gitignore | 42 + bsp/stm32/stm32l431-BearPi/Kconfig | 21 + bsp/stm32/stm32l431-BearPi/README.md | 113 + bsp/stm32/stm32l431-BearPi/SConscript | 15 + bsp/stm32/stm32l431-BearPi/SConstruct | 60 + .../stm32l431-BearPi/applications/SConscript | 9 + .../stm32l431-BearPi/applications/main.c | 35 + .../board/CubeMX_Config/.mxproject | 14 + .../board/CubeMX_Config/CubeMX_Config.ioc | 128 + .../board/CubeMX_Config/Inc/main.h | 71 + .../CubeMX_Config/Inc/stm32l4xx_hal_conf.h | 450 +++ .../board/CubeMX_Config/Inc/stm32l4xx_it.h | 69 + .../board/CubeMX_Config/Src/main.c | 252 ++ .../CubeMX_Config/Src/stm32l4xx_hal_msp.c | 149 + .../board/CubeMX_Config/Src/stm32l4xx_it.c | 203 ++ .../CubeMX_Config/Src/system_stm32l4xx.c | 337 ++ bsp/stm32/stm32l431-BearPi/board/Kconfig | 36 + bsp/stm32/stm32l431-BearPi/board/SConscript | 39 + bsp/stm32/stm32l431-BearPi/board/board.c | 89 + bsp/stm32/stm32l431-BearPi/board/board.h | 41 + .../board/linker_scripts/link.icf | 33 + .../board/linker_scripts/link.lds | 158 + .../board/linker_scripts/link.sct | 15 + bsp/stm32/stm32l431-BearPi/figures/board.jpg | Bin 0 -> 233190 bytes bsp/stm32/stm32l431-BearPi/project.ewd | 2834 +++++++++++++++++ bsp/stm32/stm32l431-BearPi/project.ewp | 2355 ++++++++++++++ bsp/stm32/stm32l431-BearPi/project.eww | 10 + bsp/stm32/stm32l431-BearPi/project.uvoptx | 1076 +++++++ bsp/stm32/stm32l431-BearPi/project.uvprojx | 777 +++++ bsp/stm32/stm32l431-BearPi/rtconfig.h | 173 + bsp/stm32/stm32l431-BearPi/rtconfig.py | 150 + bsp/stm32/stm32l431-BearPi/template.ewp | 2058 ++++++++++++ bsp/stm32/stm32l431-BearPi/template.eww | 10 + bsp/stm32/stm32l431-BearPi/template.uvoptx | 192 ++ bsp/stm32/stm32l431-BearPi/template.uvprojx | 395 +++ 36 files changed, 12908 insertions(+) create mode 100644 bsp/stm32/stm32l431-BearPi/.config create mode 100644 bsp/stm32/stm32l431-BearPi/.gitignore create mode 100644 bsp/stm32/stm32l431-BearPi/Kconfig create mode 100644 bsp/stm32/stm32l431-BearPi/README.md create mode 100644 bsp/stm32/stm32l431-BearPi/SConscript create mode 100644 bsp/stm32/stm32l431-BearPi/SConstruct create mode 100644 bsp/stm32/stm32l431-BearPi/applications/SConscript create mode 100644 bsp/stm32/stm32l431-BearPi/applications/main.c create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/stm32l4xx_it.h create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/stm32l4xx_it.c create mode 100644 bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/system_stm32l4xx.c create mode 100644 bsp/stm32/stm32l431-BearPi/board/Kconfig create mode 100644 bsp/stm32/stm32l431-BearPi/board/SConscript create mode 100644 bsp/stm32/stm32l431-BearPi/board/board.c create mode 100644 bsp/stm32/stm32l431-BearPi/board/board.h create mode 100644 bsp/stm32/stm32l431-BearPi/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32l431-BearPi/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32l431-BearPi/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32l431-BearPi/figures/board.jpg create mode 100644 bsp/stm32/stm32l431-BearPi/project.ewd create mode 100644 bsp/stm32/stm32l431-BearPi/project.ewp create mode 100644 bsp/stm32/stm32l431-BearPi/project.eww create mode 100644 bsp/stm32/stm32l431-BearPi/project.uvoptx create mode 100644 bsp/stm32/stm32l431-BearPi/project.uvprojx create mode 100644 bsp/stm32/stm32l431-BearPi/rtconfig.h create mode 100644 bsp/stm32/stm32l431-BearPi/rtconfig.py create mode 100644 bsp/stm32/stm32l431-BearPi/template.ewp create mode 100644 bsp/stm32/stm32l431-BearPi/template.eww create mode 100644 bsp/stm32/stm32l431-BearPi/template.uvoptx create mode 100644 bsp/stm32/stm32l431-BearPi/template.uvprojx diff --git a/bsp/stm32/stm32l431-BearPi/.config b/bsp/stm32/stm32l431-BearPi/.config new file mode 100644 index 0000000000..9ede141fd9 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/.config @@ -0,0 +1,499 @@ +# +# 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_USERHEAP 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="uart1" +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_PHY is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +CONFIG_RT_USING_RTC=y +# CONFIG_RT_USING_ALARM is not set +# CONFIG_RT_USING_SOFT_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +CONFIG_RT_USING_WDT=y +# 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_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_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_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_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 +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set + +# +# 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 +# CONFIG_PKG_USING_YD_CRYPTO 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 +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT 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_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set + +# +# 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_FLASHDB 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 +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP 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_WS2812B is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE 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_LZMA is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_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_KI 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_PKG_USING_CRCLIB is not set + +# +# games: games run on RT-Thread console +# +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32L4=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32L431RC=y + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_CRC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set diff --git a/bsp/stm32/stm32l431-BearPi/.gitignore b/bsp/stm32/stm32l431-BearPi/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/.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/stm32l431-BearPi/Kconfig b/bsp/stm32/stm32l431-BearPi/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/README.md b/bsp/stm32/stm32l431-BearPi/README.md new file mode 100644 index 0000000000..01da74f959 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/README.md @@ -0,0 +1,113 @@ +# Bear-Pi 开发板 BSP 说明 + +## 简介 + +本文档为Bear-Pi 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +对于 Bear-Pi,内核是 Cortex-M4,这款芯片是低功耗系列,板载 ST-LINK/V2-1 调试器/编程器,迷你尺寸,mirco USB 接口,可数的外设,Arduino™ nano 兼容的接口。 + +开发板外观如下图所示: + +![board](figures/board.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32L431RC,主频 80MHz,256KB FLASH ,64KB RAM。 +- 常用外设 + - SPI FLASH: 8M + - 按键:2个功能键,一个复位按键。 + - 支持E53系列传感器案例扩展板 + - LCD: 240 * 240 tft + - LED:一个用户LED, 上电指示灯,下载灯。 +- 常用接口:USB 支持 3 种不同接口:虚拟 COM 端口、大容量存储和调试端口。 +- 调试接口:板载 ST-LINK/V2-1 调试器。 + +开发板更多详细信息请参考【Bear-Pi 官网】 [Bear-Pi](http://www.holdiot.com/product/showproduct.php?id=26)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| 板载 ST-LINK 转串口 | 支持 | UART1 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PC15 ---> PIN: 0, 1...47 | +| UART | 支持 | UART1 | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-LINK 仿真器下载程序,在通过 microUSB 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,红色 D5、蓝色 LED 会周期性闪烁。 + +USB 虚拟 COM 端口默认连接串口 1,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.3 build Dec 28 2020 + 2006 - 2020 Copyright by rt-thread team +---Welcome use BearPi--- +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 端串口调试软件的串口号 + +## 联系人信息 + +维护人: + +- [RiceChen](https://github.com/RiceChen), 邮箱:<980307037@qq.com> \ No newline at end of file diff --git a/bsp/stm32/stm32l431-BearPi/SConscript b/bsp/stm32/stm32l431-BearPi/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/SConstruct b/bsp/stm32/stm32l431-BearPi/SConstruct new file mode 100644 index 0000000000..c4b3facad7 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/applications/SConscript b/bsp/stm32/stm32l431-BearPi/applications/SConscript new file mode 100644 index 0000000000..4939638d41 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/applications/main.c b/bsp/stm32/stm32l431-BearPi/applications/main.c new file mode 100644 index 0000000000..8bda11b8cd --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-11 RiceChen first edition + */ + +#include +#include +#include + +/* defined the LED pin: PC13 */ +#define LED0_PIN GET_PIN(C, 13) + +int main(void) +{ + int count = 1; + + rt_kprintf("---Welcome use BearPi---\n"); + /* set LED 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/stm32l431-BearPi/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..568f4ba3ec --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/.mxproject @@ -0,0 +1,14 @@ +[PreviousGenFiles] +HeaderPath=D:/Users/rtt/Desktop/CubeMX_Config/Inc +HeaderFiles=stm32l4xx_it.h;stm32l4xx_hal_conf.h;main.h; +SourcePath=D:/Users/rtt/Desktop/CubeMX_Config/Src +SourceFiles=stm32l4xx_it.c;stm32l4xx_hal_msp.c;main.c; + +[PreviousLibFiles] +LibFiles=Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_tim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.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/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/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/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/Inc/stm32l4xx_hal_tim.h;Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal.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/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/CMSIS/Device/ST/STM32L4xx/Include/stm32l431xx.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_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/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;..\\Src/system_stm32l4xx.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/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;..\\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;STM32L431xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..79ec749333 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,128 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +GPIO.groupedBy= +KeepUserPlacement=false +Mcu.Family=STM32L4 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IPNb=4 +Mcu.Name=STM32L431R(B-C)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PC14-OSC32_IN (PC14) +Mcu.Pin1=PC15-OSC32_OUT (PC15) +Mcu.Pin2=PH0-OSC_IN (PH0) +Mcu.Pin3=PH1-OSC_OUT (PH1) +Mcu.Pin4=PA9 +Mcu.Pin5=PA10 +Mcu.Pin6=VP_SYS_VS_Systick +Mcu.PinsNb=7 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32L431RCTx +MxCube.Version=5.6.0 +MxDb.Version=DB.5.0.60 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +PA10.Locked=true +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +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).Locked=true +PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator +PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN +PH1-OSC_OUT\ (PH1).Locked=true +PH1-OSC_OUT\ (PH1).Mode=HSE-External-Oscillator +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=STM32L431RCTx +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 +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.IPParameters=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,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,PWRFreq_Value,SAI1Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAI1OutputFreq_Value +RCC.LPTIM1Freq_Value=80000000 +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.PWRFreq_Value=80000000 +RCC.SAI1Freq_Value=4571428.571428572 +RCC.SWPMI1Freq_Value=80000000 +RCC.SYSCLKFreq_VALUE=80000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.USART1Freq_Value=80000000 +RCC.USART2Freq_Value=80000000 +RCC.USART3Freq_Value=80000000 +RCC.VCOInputFreq_Value=4000000 +RCC.VCOOutputFreq_Value=160000000 +RCC.VCOSAI1OutputFreq_Value=32000000 +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..307e47b9f2 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,71 @@ +/* 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 -----------------------------------------------------------*/ +/* 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/stm32l431-BearPi/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/stm32l4xx_hal_conf.h new file mode 100644 index 0000000000..347da3fe30 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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 0U +#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/stm32l431-BearPi/board/CubeMX_Config/Inc/stm32l4xx_it.h b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Inc/stm32l4xx_it.h new file mode 100644 index 0000000000..1bedbf684d --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..f3fe151ae7 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/main.c @@ -0,0 +1,252 @@ +/* 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 ---------------------------------------------------------*/ +UART_HandleTypeDef huart1; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART1_UART_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_USART1_UART_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_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2; + 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 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 GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + +} + +/* 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/stm32l431-BearPi/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c new file mode 100644 index 0000000000..45d1b1a9e2 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/stm32l4xx_hal_msp.c @@ -0,0 +1,149 @@ +/* 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 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 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA9 ------> USART1_TX + PA10 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/stm32l4xx_it.c b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/stm32l4xx_it.c new file mode 100644 index 0000000000..8f827e4821 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/board/CubeMX_Config/Src/system_stm32l4xx.c b/bsp/stm32/stm32l431-BearPi/board/CubeMX_Config/Src/system_stm32l4xx.c new file mode 100644 index 0000000000..26bd517974 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/board/Kconfig b/bsp/stm32/stm32l431-BearPi/board/Kconfig new file mode 100644 index 0000000000..49cc8cadc9 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/board/Kconfig @@ -0,0 +1,36 @@ +menu "Hardware Drivers Config" + +config SOC_STM32L431RC + bool + select SOC_SERIES_STM32L4 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +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 + endif + + source "../libraries/HAL_Drivers/Kconfig" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32l431-BearPi/board/SConscript b/bsp/stm32/stm32l431-BearPi/board/SConscript new file mode 100644 index 0000000000..c95510d979 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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_stm32l431xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/arm/startup_stm32l431xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32L4xx_HAL/CMSIS/Device/ST/STM32L4xx/Source/Templates/iar/startup_stm32l431xx.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 = ['STM32L432xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32l431-BearPi/board/board.c b/bsp/stm32/stm32l431-BearPi/board/board.c new file mode 100644 index 0000000000..368ab74da1 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/board/board.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 RiceChen first version + */ + +#include "board.h" + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_PeriphCLKInitTypeDef PeriphClkInit; + + /**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_LSI|RCC_OSCILLATORTYPE_LSE + |RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.LSIState = RCC_LSI_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 = 16; + 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(__FILE__, __LINE__); + } + + /**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_1) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART2; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**Configure the main internal regulator output voltage + */ + if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) + { + _Error_Handler(__FILE__, __LINE__); + } + + /**Configure the Systick interrupt time + */ + HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); + + /**Configure the Systick + */ + HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); + + /**Enable MSI Auto calibration + */ + HAL_RCCEx_EnableMSIPLLMode(); + + /* SysTick_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); +} diff --git a/bsp/stm32/stm32l431-BearPi/board/board.h b/bsp/stm32/stm32l431-BearPi/board/board.h new file mode 100644 index 0000000000..3b3a77e103 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/board/linker_scripts/link.icf b/bsp/stm32/stm32l431-BearPi/board/linker_scripts/link.icf new file mode 100644 index 0000000000..1d95e70851 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/board/linker_scripts/link.lds b/bsp/stm32/stm32l431-BearPi/board/linker_scripts/link.lds new file mode 100644 index 0000000000..a20112b7ef --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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 = 0x200; + +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/stm32l431-BearPi/board/linker_scripts/link.sct b/bsp/stm32/stm32l431-BearPi/board/linker_scripts/link.sct new file mode 100644 index 0000000000..ed86f920e0 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/figures/board.jpg b/bsp/stm32/stm32l431-BearPi/figures/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e42c1a2743ce7cdf772db30ac7c57a1f3ac11bb GIT binary patch literal 233190 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

IhI6@ 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

RFSEj5gfZ~^|MOV$4PNi> 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 avgVL)1kRZIO!xSG-n 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 K5*_frH~tSuLcl8k literal 0 HcmV?d00001 diff --git a/bsp/stm32/stm32l431-BearPi/project.ewd b/bsp/stm32/stm32l431-BearPi/project.ewd new file mode 100644 index 0000000000..4b27053590 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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/stm32l431-BearPi/project.ewp b/bsp/stm32/stm32l431-BearPi/project.ewp new file mode 100644 index 0000000000..eaae257ffd --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/project.ewp @@ -0,0 +1,2355 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 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 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 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 + + 21 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.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 + + + + 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 + + + + 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_stm32l431xx.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 + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.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/stm32l431-BearPi/project.eww b/bsp/stm32/stm32l431-BearPi/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32l431-BearPi/project.uvoptx b/bsp/stm32/stm32l431-BearPi/project.uvoptx new file mode 100644 index 0000000000..528c410d17 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/project.uvoptx @@ -0,0 +1,1076 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32L4xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066AFF363639465243223443 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$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 + 10000000 + + + + + + Applications + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + 2 + 6 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\rtc\rtc.c + rtc.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\watchdog\watchdog.c + watchdog.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 4 + 18 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32l4xx_hal_msp.c + stm32l4xx_hal_msp.c + 0 + 0 + + + 4 + 20 + 2 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l431xx.s + startup_stm32l431xx.s + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 5 + 24 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 5 + 25 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 5 + 26 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 6 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 7 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\libc.c + libc.c + 0 + 0 + + + 7 + 42 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + mem_std.c + 0 + 0 + + + 7 + 43 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stubs.c + stubs.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 8 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\system_stm32l4xx.c + system_stm32l4xx.c + 0 + 0 + + + 8 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + stm32l4xx_hal.c + 0 + 0 + + + 8 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_comp.c + stm32l4xx_hal_comp.c + 0 + 0 + + + 8 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + stm32l4xx_hal_cortex.c + 0 + 0 + + + 8 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc.c + stm32l4xx_hal_crc.c + 0 + 0 + + + 8 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_crc_ex.c + stm32l4xx_hal_crc_ex.c + 0 + 0 + + + 8 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp.c + stm32l4xx_hal_cryp.c + 0 + 0 + + + 8 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cryp_ex.c + stm32l4xx_hal_cryp_ex.c + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + stm32l4xx_hal_dma.c + 0 + 0 + + + 8 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + stm32l4xx_hal_dma_ex.c + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_exti.c + stm32l4xx_hal_exti.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + stm32l4xx_hal_pwr.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + stm32l4xx_hal_pwr_ex.c + 0 + 0 + + + 8 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + stm32l4xx_hal_rcc.c + 0 + 0 + + + 8 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + stm32l4xx_hal_rcc_ex.c + 0 + 0 + + + 8 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rng.c + stm32l4xx_hal_rng.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + stm32l4xx_hal_gpio.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + stm32l4xx_hal_uart.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + stm32l4xx_hal_uart_ex.c + 0 + 0 + + + 8 + 64 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart.c + stm32l4xx_hal_usart.c + 0 + 0 + + + 8 + 65 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_usart_ex.c + stm32l4xx_hal_usart_ex.c + 0 + 0 + + + 8 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rtc.c + stm32l4xx_hal_rtc.c + 0 + 0 + + + 8 + 67 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rtc_ex.c + stm32l4xx_hal_rtc_ex.c + 0 + 0 + + + 8 + 68 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_iwdg.c + stm32l4xx_hal_iwdg.c + 0 + 0 + + + 8 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_wwdg.c + stm32l4xx_hal_wwdg.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32l431-BearPi/project.uvprojx b/bsp/stm32/stm32l431-BearPi/project.uvprojx new file mode 100644 index 0000000000..549412b461 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/project.uvprojx @@ -0,0 +1,777 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32L431RCTx + STMicroelectronics + Keil.STM32L4xx_DFP.2.0.0 + http://www.keil.com/pack + IRAM(0x20000000,0x0000C000) IRAM2(0x10000000,0x00004000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM)) + 0 + $$Device:STM32L431RCTx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h + + + + + + + + + + $$Device:STM32L431RCTx$CMSIS\SVD\STM32L4x1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + 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 + + + RT_USING_ARM_LIBC, USE_HAL_DRIVER, STM32L432xx, __RTTHREAD__ + + .;applications;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\..\..\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 + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.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 + + + rtc.c + 1 + ..\..\..\components\drivers\rtc\rtc.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 + + + watchdog.c + 1 + ..\..\..\components\drivers\watchdog\watchdog.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32l4xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32l4xx_hal_msp.c + + + startup_stm32l431xx.s + 2 + ..\libraries\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l431xx.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 + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.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 + + + stm32l4xx_hal_rtc.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rtc.c + + + stm32l4xx_hal_rtc_ex.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rtc_ex.c + + + stm32l4xx_hal_iwdg.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_iwdg.c + + + stm32l4xx_hal_wwdg.c + 1 + ..\libraries\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_wwdg.c + + + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32l431-BearPi/rtconfig.h b/bsp/stm32/stm32l431-BearPi/rtconfig.h new file mode 100644 index 0000000000..6fbc67f2c5 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/rtconfig.h @@ -0,0 +1,173 @@ +#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 "uart1" +#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 +#define RT_USING_RTC +#define RT_USING_WDT + +/* 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 */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + + +/* games: games run on RT-Thread console */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32L4 + +/* Hardware Drivers Config */ + +#define SOC_STM32L431RC + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART1 + +#endif diff --git a/bsp/stm32/stm32l431-BearPi/rtconfig.py b/bsp/stm32/stm32l431-BearPi/rtconfig.py new file mode 100644 index 0000000000..798999ad56 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/rtconfig.py @@ -0,0 +1,150 @@ +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' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/stm32/stm32l431-BearPi/template.ewp b/bsp/stm32/stm32l431-BearPi/template.ewp new file mode 100644 index 0000000000..74fcafa329 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/template.ewp @@ -0,0 +1,2058 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 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 + + 21 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 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 + + 21 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32l431-BearPi/template.eww b/bsp/stm32/stm32l431-BearPi/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32l431-BearPi/template.uvoptx b/bsp/stm32/stm32l431-BearPi/template.uvoptx new file mode 100644 index 0000000000..e269ad5100 --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/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 + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32L4xx_256 -FL040000 -FS08000000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066AFF363639465243223443 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$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 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32l431-BearPi/template.uvprojx b/bsp/stm32/stm32l431-BearPi/template.uvprojx new file mode 100644 index 0000000000..6c072bde0b --- /dev/null +++ b/bsp/stm32/stm32l431-BearPi/template.uvprojx @@ -0,0 +1,395 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32L431RCTx + STMicroelectronics + Keil.STM32L4xx_DFP.2.0.0 + http://www.keil.com/pack + IRAM(0x20000000,0x0000C000) IRAM2(0x10000000,0x00004000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM)) + 0 + $$Device:STM32L431RCTx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h + + + + + + + + + + $$Device:STM32L431RCTx$CMSIS\SVD\STM32L4x1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + 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 + + + + + + + + + + + +
-- GitLab