From 6b56515249757d55ac9a63f3fba9425c36b54905 Mon Sep 17 00:00:00 2001 From: CaocoWang <92237100+CaocoWang@users.noreply.github.com> Date: Fri, 8 Apr 2022 01:12:37 +0800 Subject: [PATCH] Lm402 (#5746) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 1、添加基于STM32WLE5JC的BSP 2、修正stm32wlxx的引用 * edit readme --- bsp/stm32/libraries/STM32WLxx_HAL/SConscript | 2 +- .../stm32wle5-yizhilian-lm401/project.uvoptx | 802 +++++++++++++- .../stm32wle5-yizhilian-lm401/project.uvprojx | 363 +++---- bsp/stm32/stm32wle5-yizhilian-lm402/.config | 592 +++++++++++ .../stm32wle5-yizhilian-lm402/.gitignore | 42 + bsp/stm32/stm32wle5-yizhilian-lm402/Kconfig | 21 + bsp/stm32/stm32wle5-yizhilian-lm402/README.md | 107 ++ .../stm32wle5-yizhilian-lm402/SConscript | 14 + .../stm32wle5-yizhilian-lm402/SConstruct | 59 ++ .../applications/SConscript | 11 + .../applications/main.c | 32 + .../board/.ignore_format.yml | 6 + .../board/CubeMX_Config/.mxproject | 25 + .../board/CubeMX_Config/CubeMX_Config.ioc | 162 +++ .../board/CubeMX_Config/Inc/main.h | 83 ++ .../CubeMX_Config/Inc/stm32wlxx_hal_conf.h | 338 ++++++ .../board/CubeMX_Config/Inc/stm32wlxx_it.h | 69 ++ .../board/CubeMX_Config/Src/main.c | 312 ++++++ .../CubeMX_Config/Src/stm32wlxx_hal_msp.c | 208 ++++ .../board/CubeMX_Config/Src/stm32wlxx_it.c | 205 ++++ .../CubeMX_Config/Src/system_stm32wlxx.c | 359 +++++++ .../stm32wle5-yizhilian-lm402/board/Kconfig | 70 ++ .../board/SConscript | 31 + .../stm32wle5-yizhilian-lm402/board/board.c | 47 + .../stm32wle5-yizhilian-lm402/board/board.h | 42 + .../board/linker_scripts/link.sct | 15 + .../figures/LM402_lora.jpg | Bin 0 -> 167035 bytes .../stm32wle5-yizhilian-lm402/project.uvoptx | 985 ++++++++++++++++++ .../stm32wle5-yizhilian-lm402/project.uvprojx | 742 +++++++++++++ .../stm32wle5-yizhilian-lm402/rtconfig.h | 176 ++++ .../stm32wle5-yizhilian-lm402/rtconfig.py | 177 ++++ .../stm32wle5-yizhilian-lm402/template.uvoptx | 185 ++++ .../template.uvprojx | 395 +++++++ 33 files changed, 6442 insertions(+), 235 deletions(-) create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/.config create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/.gitignore create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/Kconfig create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/README.md create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/SConscript create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/SConstruct create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/applications/SConscript create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/applications/main.c create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/.ignore_format.yml create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_hal_conf.h create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_it.h create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_hal_msp.c create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_it.c create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/system_stm32wlxx.c create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/Kconfig create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/SConscript create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/board.c create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/board.h create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/figures/LM402_lora.jpg create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/project.uvoptx create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/project.uvprojx create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.h create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.py create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/template.uvoptx create mode 100644 bsp/stm32/stm32wle5-yizhilian-lm402/template.uvprojx diff --git a/bsp/stm32/libraries/STM32WLxx_HAL/SConscript b/bsp/stm32/libraries/STM32WLxx_HAL/SConscript index 71c8bb2578..1df3fa86a9 100644 --- a/bsp/stm32/libraries/STM32WLxx_HAL/SConscript +++ b/bsp/stm32/libraries/STM32WLxx_HAL/SConscript @@ -69,7 +69,7 @@ if GetDepend(['BSP_USING_SUBGHZ']): src += ['STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_subghz.c'] path = [cwd + '/STM32WLxx_HAL_Driver/Inc', - cwd + '/CMSIS/Device/ST/stm32lwxx/Include', + cwd + '/CMSIS/Device/ST/STM32WLxx/Include', cwd + '/CMSIS/Include'] CPPDEFINES = ['USE_HAL_DRIVER'] diff --git a/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvoptx b/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvoptx index 1fbdc86a88..e21e60c867 100644 --- a/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvoptx +++ b/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvoptx @@ -180,11 +180,811 @@ - Source Group 1 + Applications 0 0 0 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Compiler + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\stdlib.c + stdlib.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 3 + 6 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 3 + 9 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 4 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 4 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 4 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 4 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 4 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 4 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion.c + completion.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 5 + 20 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32wlxx_hal_msp.c + stm32wlxx_hal_msp.c + 0 + 0 + + + 5 + 21 + 2 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\arm\startup_stm32wle5xx.s + startup_stm32wle5xx.s + 0 + 0 + + + 5 + 22 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 5 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 5 + 24 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 5 + 25 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 6 + 26 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 7 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 7 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 7 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 7 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 7 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 7 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + 7 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 7 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 7 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 7 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 7 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 7 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 7 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 8 + 42 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr.c + stm32wlxx_hal_pwr.c + 0 + 0 + + + 8 + 43 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma_ex.c + stm32wlxx_hal_dma_ex.c + 0 + 0 + + + 8 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_gpio.c + stm32wlxx_hal_gpio.c + 0 + 0 + + + 8 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc_ex.c + stm32wlxx_hal_rcc_ex.c + 0 + 0 + + + 8 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart.c + stm32wlxx_hal_usart.c + 0 + 0 + + + 8 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr_ex.c + stm32wlxx_hal_pwr_ex.c + 0 + 0 + + + 8 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cryp.c + stm32wlxx_hal_cryp.c + 0 + 0 + + + 8 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart_ex.c + stm32wlxx_hal_usart_ex.c + 0 + 0 + + + 8 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_exti.c + stm32wlxx_hal_exti.c + 0 + 0 + + + 8 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\system_stm32wlxx.c + system_stm32wlxx.c + 0 + 0 + + + 8 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cortex.c + stm32wlxx_hal_cortex.c + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart_ex.c + stm32wlxx_hal_uart_ex.c + 0 + 0 + + + 8 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal.c + stm32wlxx_hal.c + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc.c + stm32wlxx_hal_rcc.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma.c + stm32wlxx_hal_dma.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart.c + stm32wlxx_hal_uart.c + 0 + 0 + + + 8 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_comp.c + stm32wlxx_hal_comp.c + 0 + 0 + + + 8 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rng.c + stm32wlxx_hal_rng.c + 0 + 0 + + + 8 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc.c + stm32wlxx_hal_crc.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc_ex.c + stm32wlxx_hal_crc_ex.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cryp_ex.c + stm32wlxx_hal_cryp_ex.c + 0 + 0 + diff --git a/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvprojx b/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvprojx index 5bf69ee080..b82c16df39 100644 --- a/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvprojx +++ b/bsp/stm32/stm32wle5-yizhilian-lm401/project.uvprojx @@ -1,7 +1,10 @@ + 2.1 +
### uVision Project, (C) Keil Software
+ rt-thread @@ -13,31 +16,31 @@ STM32WLE5CBUx STMicroelectronics - Keil.STM32WLxx_DFP.1.0.7 - http://www.keil.com/pack + Keil.STM32WLxx_DFP.1.1.0 + http://www.keil.com/pack/ IRAM(0x20000000,0x4000) IROM(0x08000000,0x20000) CPUTYPE("Cortex-M4") CLOCK(12000000) ELITTLE - - + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WLxx_CM4 -FS08000000 -FL020000 -FP0($$Device:STM32WLE5CBUx$CMSIS\Flash\STM32WLExx_128.FLM)) 0 $$Device:STM32WLE5CBUx$Drivers\Device\ST\STM32WLxx\Include\stm32wlxx.h - - - - - - - - - + + + + + + + + + $$Device:STM32WLE5CBUx$CMSIS\SVD\STM32WLE5_CM4.svd 0 0 - - - - - + + + + + 0 0 @@ -59,8 +62,8 @@ 0 0 - - + + 0 0 0 @@ -69,8 +72,8 @@ 0 0 - - + + 0 0 0 @@ -80,14 +83,14 @@ 1 0 fromelf --bin !L --output rtthread.bin - + 0 0 0 0 0 - + 0 @@ -101,8 +104,8 @@ 0 0 3 - - + + 1 @@ -136,10 +139,10 @@ 1 BIN\UL2CM3.DLL "" () - - - - + + + + 0 @@ -172,7 +175,7 @@ 0 0 "Cortex-M4" - + 0 0 0 @@ -305,7 +308,7 @@ 0x0 - + 1 @@ -332,10 +335,10 @@ 0 0 - + USE_HAL_DRIVER, __RTTHREAD__, STM32WLxx, RT_USING_ARM_LIBC, __CLK_TCK=RT_TICK_PER_SECOND - - applications;.;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\extension;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\io\stdio;..\..\..\components\libc\posix\ipc;..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Inc;..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\stm32lwxx\Include;..\libraries\STM32WLxx_HAL\CMSIS\Include + + applications;.;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\extension;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\io\stdio;..\..\..\components\libc\posix\ipc;..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Inc;..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Include;..\libraries\STM32WLxx_HAL\CMSIS\Include @@ -350,10 +353,10 @@ 0 0 - - - - + + + + @@ -365,13 +368,13 @@ 0 0x08000000 0x20000000 - + .\board\linker_scripts\link.sct - - - - - + + + + + @@ -388,28 +391,22 @@ Compiler - - - syscall_mem.c - 1 - ..\..\..\components\libc\compilers\armlibc\syscall_mem.c - - syscalls.c 1 ..\..\..\components\libc\compilers\armlibc\syscalls.c - - + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + time.c 1 ..\..\..\components\libc\compilers\common\time.c - - stdlib.c 1 @@ -419,35 +416,27 @@ CPU - - - div0.c - 1 - ..\..\..\libcpu\arm\common\div0.c - - showmem.c 1 ..\..\..\libcpu\arm\common\showmem.c - - + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + backtrace.c 1 ..\..\..\libcpu\arm\common\backtrace.c - - context_rvds.S 2 ..\..\..\libcpu\arm\cortex-m4\context_rvds.S - - cpuport.c 1 @@ -458,62 +447,46 @@ DeviceDrivers + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + ringblk_buf.c 1 ..\..\..\components\drivers\ipc\ringblk_buf.c - - dataqueue.c 1 ..\..\..\components\drivers\ipc\dataqueue.c - - - - pipe.c - 1 - ..\..\..\components\drivers\ipc\pipe.c - - - - - workqueue.c - 1 - ..\..\..\components\drivers\ipc\workqueue.c - - - ringbuffer.c 1 ..\..\..\components\drivers\ipc\ringbuffer.c - - - completion.c + pipe.c 1 - ..\..\..\components\drivers\ipc\completion.c + ..\..\..\components\drivers\ipc\pipe.c - - waitqueue.c 1 ..\..\..\components\drivers\ipc\waitqueue.c - - + + completion.c + 1 + ..\..\..\components\drivers\ipc\completion.c + pin.c 1 ..\..\..\components\drivers\misc\pin.c - - serial.c 1 @@ -529,36 +502,26 @@ 1 board\CubeMX_Config\Src\stm32wlxx_hal_msp.c - - - - board.c - 1 - board\board.c - - - startup_stm32wle5xx.s 2 ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\arm\startup_stm32wle5xx.s - - + + board.c + 1 + board\board.c + drv_gpio.c 1 ..\libraries\HAL_Drivers\drv_gpio.c - - drv_usart.c 1 ..\libraries\HAL_Drivers\drv_usart.c - - drv_common.c 1 @@ -574,15 +537,11 @@ 1 ..\..\..\components\finsh\shell.c - - msh.c 1 ..\..\..\components\finsh\msh.c - - cmd.c 1 @@ -598,90 +557,66 @@ 1 ..\..\..\src\mempool.c - - - - device.c - 1 - ..\..\..\src\device.c - - - - - scheduler.c - 1 - ..\..\..\src\scheduler.c - - - - - timer.c - 1 - ..\..\..\src\timer.c - - - - - components.c - 1 - ..\..\..\src\components.c - - - - - mem.c - 1 - ..\..\..\src\mem.c - - - - - ipc.c - 1 - ..\..\..\src\ipc.c - - - - - kservice.c - 1 - ..\..\..\src\kservice.c - - - - - idle.c - 1 - ..\..\..\src\idle.c - - - - - object.c - 1 - ..\..\..\src\object.c - - - - - clock.c - 1 - ..\..\..\src\clock.c - - - irq.c 1 ..\..\..\src\irq.c - - + + ipc.c + 1 + ..\..\..\src\ipc.c + + + device.c + 1 + ..\..\..\src\device.c + + + components.c + 1 + ..\..\..\src\components.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + object.c + 1 + ..\..\..\src\object.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + clock.c + 1 + ..\..\..\src\clock.c + thread.c 1 ..\..\..\src\thread.c + + idle.c + 1 + ..\..\..\src\idle.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + @@ -692,141 +627,101 @@ 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr.c - - stm32wlxx_hal_dma_ex.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma_ex.c - - stm32wlxx_hal_gpio.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_gpio.c - - stm32wlxx_hal_rcc_ex.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc_ex.c - - stm32wlxx_hal_usart.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart.c - - stm32wlxx_hal_pwr_ex.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr_ex.c - - stm32wlxx_hal_cryp.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cryp.c - - stm32wlxx_hal_usart_ex.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart_ex.c - - stm32wlxx_hal_exti.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_exti.c - - system_stm32wlxx.c 1 ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\system_stm32wlxx.c - - stm32wlxx_hal_cortex.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cortex.c - - stm32wlxx_hal_uart_ex.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart_ex.c - - stm32wlxx_hal.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal.c - - stm32wlxx_hal_rcc.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc.c - - stm32wlxx_hal_dma.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma.c - - stm32wlxx_hal_uart.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart.c - - stm32wlxx_hal_comp.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_comp.c - - stm32wlxx_hal_rng.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rng.c - - stm32wlxx_hal_crc.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc.c - - stm32wlxx_hal_crc_ex.c 1 ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc_ex.c - - stm32wlxx_hal_cryp_ex.c 1 @@ -837,9 +732,11 @@ + - - - + + + +
diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/.config b/bsp/stm32/stm32wle5-yizhilian-lm402/.config new file mode 100644 index 0000000000..08c84427a0 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/.config @@ -0,0 +1,592 @@ +# +# 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=100 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_TINY_FFS is not set +# CONFIG_RT_PRINTF_LONGLONG is not set +# CONFIG_RT_DEBUG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="lpuart1" +CONFIG_RT_VER_NUM=0x40100 +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 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +# CONFIG_RT_USING_DFS is not set +# CONFIG_RT_USING_FAL is not set +# CONFIG_RT_USING_LWP is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +# CONFIG_RT_SERIAL_USING_DMA is not set +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB is not set +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# C/C++ and POSIX layer +# +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RT_LINK is not set +# CONFIG_RT_USING_VBUS is not set + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_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 +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_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_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 +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set + +# +# 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 +# CONFIG_PKG_USING_PIKASCRIPT 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_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set + +# +# U8G2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set + +# +# system packages +# + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set + +# +# 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_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_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_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_WCWIDTH is not set +# CONFIG_PKG_USING_MCUBOOT 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_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_BL_MCU_SDK is not set + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set + +# +# miscellaneous packages +# + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_TERMBOX is not set +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32WL=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32WLE5JC=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_USB_TO_UART=y + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +# CONFIG_BSP_USING_ONCHIP_RTC is not set +CONFIG_BSP_USING_UART=y +# CONFIG_BSP_USING_UART1 is not set +# CONFIG_BSP_USING_UART2 is not set +CONFIG_BSP_USING_LPUART1=y + +# +# Board extended module Drivers +# diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/.gitignore b/bsp/stm32/stm32wle5-yizhilian-lm402/.gitignore new file mode 100644 index 0000000000..7221bde019 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/.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/stm32wle5-yizhilian-lm402/Kconfig b/bsp/stm32/stm32wle5-yizhilian-lm402/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/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/stm32wle5-yizhilian-lm402/README.md b/bsp/stm32/stm32wle5-yizhilian-lm402/README.md new file mode 100644 index 0000000000..af62a4a546 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/README.md @@ -0,0 +1,107 @@ +# LM402-LoraWan 开发板的 BSP 说明 + +## 简介 + +本文档为易智联(西安)科技有限公司基于STM32WLE5JC SOC 的Lora模块评估板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +LM402-LoraWAN评估板是易智联(西安)科技有限公司推出的基于STM32WLE5JC的Lora模块评估板。提供了基本的硬件电路,并板载USB转COM以及LDO。 + +开发板外观如下图所示: + +![board](figures/LM402_lora.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32WLE5JC,主频 48MHz,256KB FLASH ,64KB RAM(32KB+32KB)。 +- 常用外设: + - LED:power LED(LED4 红色),3个User LED(LED1 蓝色、LED2 黄绿色、LED3 红色) + - 按键:复位按键(B4),3个 User Button(B1、B2、B3)。 +- 常用接口:USB转串口,可拨码开(S1)关断开。 + +开发板更多详细信息请参考(https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-23675552484.16.14f23fb8Dhsg1H&id=670469995404)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| 板载 USB 转串口 | 支持 | LPUART1 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | LED1(PB5)\LED2(PB4)\LED3(PB3) | +| UART | 支持 | LPUART1 | +| **扩展模块** | **支持情况** | **备注** | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST_LINK 仿真器下载程序,在通过 ST_LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,LED5 常亮、LED1\LED2\LED3 会周期性闪烁。 + +USB 转 COM 端口默认连接LPUART1,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.1.0 build Mar 30 2022 14:55:43 + 2006 - 2022 Copyright by RT-Thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 LPUART1的功能,如果需使用更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk5` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 开机时如果不能打印 RT-Thread 版本信息,请重新选择 PC 端串口调试软件的串口号. + +## 联系人信息 + +维护人: + +- [CaocoWang] 邮箱:<18092050692@163.com> \ No newline at end of file diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/SConscript b/bsp/stm32/stm32wle5-yizhilian-lm402/SConscript new file mode 100644 index 0000000000..c6932b3c6f --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/SConscript @@ -0,0 +1,14 @@ +# RT-Thread scons bridge +import os +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/SConstruct b/bsp/stm32/stm32wle5-yizhilian-lm402/SConstruct new file mode 100644 index 0000000000..f3769ce5b6 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/SConstruct @@ -0,0 +1,59 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32WLxx_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/stm32wle5-yizhilian-lm402/applications/SConscript b/bsp/stm32/stm32wle5-yizhilian-lm402/applications/SConscript new file mode 100644 index 0000000000..01eb940dfb --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = os.path.join(str(Dir('#')), 'applications') +src = Glob('*.c') +CPPPATH = [cwd, str(Dir('#'))] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/applications/main.c b/bsp/stm32/stm32wle5-yizhilian-lm402/applications/main.c new file mode 100644 index 0000000000..6752dcb830 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/applications/main.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-3-30 CaocoWang first version + */ + +#include +#include +#include + +/* LM401_LoraWan Color led */ +#define LED_BLUE_PIN GET_PIN(B,5) /* defined the LED_BLUE pin: PB5 */ +#define LED_GREEN_PIN GET_PIN(B,4) +#define LED_RED_PIN GET_PIN(B,3) + +int main(void) +{ + /* set LED_BLUE pin mode to output */ + rt_pin_mode(LED_BLUE_PIN, PIN_MODE_OUTPUT); + + while (1) + { + rt_pin_write(LED_BLUE_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_BLUE_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/.ignore_format.yml b/bsp/stm32/stm32wle5-yizhilian-lm402/board/.ignore_format.yml new file mode 100644 index 0000000000..0d7f3e360c --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/.ignore_format.yml @@ -0,0 +1,6 @@ +# files format check exclude path, please follow the instructions below to modify; +# If you need to exclude an entire folder, add the folder path in dir_path; +# If you need to exclude a file, add the path to the file in file_path. + +dir_path: +- CubeMX_Config diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..35af7178f1 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/.mxproject @@ -0,0 +1,25 @@ +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Inc/stm32wlxx_it.h +HeaderFiles#1=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Inc/stm32wlxx_hal_conf.h +HeaderFiles#2=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Src/stm32wlxx_it.c +SourceFiles#1=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Src/stm32wlxx_hal_msp.c +SourceFiles#2=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=E:/rt-thread/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Core/Src +SourceFiles=; + +[PreviousLibFiles] +LibFiles=Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_uart.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_uart_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_rcc.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_rcc_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_pwr.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_rcc.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_bus.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_exti.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_system.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_flash.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_flash_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_gpio.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_gpio_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_dma.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_dma.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_dmamux.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_dma_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_pwr.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_pwr_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_cortex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_def.h;Drivers/STM32WLxx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_exti.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_tim.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_tim_ex.h;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc_ex.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash_ex.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_gpio.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma_ex.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr_ex.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_cortex.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_exti.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_tim.c;Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_tim_ex.c;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_uart.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_uart_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_rcc.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_rcc_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_pwr.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_rcc.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_bus.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_exti.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_system.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_flash.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_flash_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_gpio.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_gpio_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_dma.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_dma.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_ll_dmamux.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_dma_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_pwr.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_pwr_ex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_cortex.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_def.h;Drivers/STM32WLxx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_exti.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_tim.h;Drivers/STM32WLxx_HAL_Driver/Inc/stm32wlxx_hal_tim_ex.h;Drivers/CMSIS/Device/ST/STM32WLxx/Include/stm32wle5xx.h;Drivers/CMSIS/Device/ST/STM32WLxx/Include/stm32wlxx.h;Drivers/CMSIS/Device/ST/STM32WLxx/Include/system_stm32wlxx.h;Drivers/CMSIS/Device/ST/STM32WLxx/Source/Templates/system_stm32wlxx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_armclang_ltm.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv81mml.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm35p.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[PreviousUsedKeilFiles] +SourceFiles=..\Core\Src\main.c;..\Core\Src\stm32wlxx_it.c;..\Core\Src\stm32wlxx_hal_msp.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_gpio.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_cortex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_exti.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_tim.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_tim_ex.c;..\Drivers/CMSIS/Device/ST/STM32WLxx/Source/Templates/system_stm32wlxx.c;..\Core\Src/system_stm32wlxx.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_gpio.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr_ex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_cortex.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_exti.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_tim.c;..\Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_tim_ex.c;..\Drivers/CMSIS/Device/ST/STM32WLxx/Source/Templates/system_stm32wlxx.c;..\Core\Src/system_stm32wlxx.c;;; +HeaderPath=..\Drivers\STM32WLxx_HAL_Driver\Inc;..\Drivers\STM32WLxx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32WLxx\Include;..\Drivers\CMSIS\Include;..\Core\Inc; +CDefines=CORE_CM4;USE_HAL_DRIVER;STM32WLE5xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..b6e03ba7f7 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,162 @@ +#MicroXplorer Configuration settings - do not modify +File.Version=6 +GPIO.groupedBy=Group By Peripherals +KeepUserPlacement=false +Mcu.Family=STM32WL +Mcu.IP0=LPUART1 +Mcu.IP1=NVIC +Mcu.IP2=RCC +Mcu.IP3=SYS +Mcu.IP4=USART1 +Mcu.IPNb=5 +Mcu.Name=STM32WLE5JCIx +Mcu.Package=UFBGA73 +Mcu.Pin0=PB15 +Mcu.Pin1=PB3 +Mcu.Pin10=VP_SYS_VS_Systick +Mcu.Pin2=PB4 +Mcu.Pin3=PB7 +Mcu.Pin4=PB9 +Mcu.Pin5=PB14 +Mcu.Pin6=PB5 +Mcu.Pin7=PB6 +Mcu.Pin8=PA3 +Mcu.Pin9=PA2 +Mcu.PinsNb=11 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32WLE5JCIx +MxCube.Version=6.3.0 +MxDb.Version=DB.6.0.30 +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\:15\:0\:false\:false\:true\:false\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +PA2.GPIOParameters=GPIO_PuPd +PA2.GPIO_PuPd=GPIO_PULLUP +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=LPUART1_TX +PA3.GPIOParameters=GPIO_PuPd +PA3.GPIO_PuPd=GPIO_PULLUP +PA3.Locked=true +PA3.Mode=Asynchronous +PA3.Signal=LPUART1_RX +PB14.GPIOParameters=GPIO_Label +PB14.GPIO_Label=BUT3 +PB14.Locked=true +PB14.Signal=GPIO_Input +PB15.GPIOParameters=GPIO_Label +PB15.GPIO_Label=BUT2 +PB15.Locked=true +PB15.Signal=GPIO_Input +PB3.GPIOParameters=GPIO_Label +PB3.GPIO_Label=LED3 +PB3.Locked=true +PB3.Signal=GPIO_Output +PB4.GPIOParameters=GPIO_Label +PB4.GPIO_Label=LED2 +PB4.Locked=true +PB4.Signal=GPIO_Output +PB5.GPIOParameters=GPIO_Label +PB5.GPIO_Label=LED1 +PB5.Locked=true +PB5.Signal=GPIO_Output +PB6.GPIOParameters=GPIO_PuPd +PB6.GPIO_PuPd=GPIO_PULLUP +PB6.Mode=Asynchronous +PB6.Signal=USART1_TX +PB7.GPIOParameters=GPIO_PuPd +PB7.GPIO_PuPd=GPIO_PULLUP +PB7.Mode=Asynchronous +PB7.Signal=USART1_RX +PB9.GPIOParameters=GPIO_Label +PB9.GPIO_Label=BUT1 +PB9.Locked=true +PB9.Signal=GPIO_Input +PCC.SUBGHZ.FrequencyBand=High +PCC.SUBGHZ.Modulation=FSK +PCC.SUBGHZ.OptionalSettings=false +PCC.SUBGHZ.Output.Power=14 +PCC.SUBGHZ.PowerAmplifier=Low Power +PCC.SUBGHZ.RxBoosted=false +PCC.SUBGHZ.SMPS=Off +PinOutPanel.CurrentBGAView=Top +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=STM32WLE5JCIx +ProjectManager.FirmwarePackage=STM32Cube FW_WL V1.1.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=MDK-ARM V5.32 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true +RCC.AHBFreq_Value=48000000 +RCC.APB1Freq_Value=48000000 +RCC.APB1TimFreq_Value=48000000 +RCC.APB2Freq_Value=48000000 +RCC.APB2TimFreq_Value=48000000 +RCC.APB3Freq_Value=48000000 +RCC.CortexFreq_Value=48000000 +RCC.FCLKCortexFreq_Value=48000000 +RCC.FamilyName=M +RCC.HCLK3Freq_Value=48000000 +RCC.HCLKFreq_Value=48000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=48000000 +RCC.I2C2Freq_Value=48000000 +RCC.I2C3Freq_Value=48000000 +RCC.I2S2Freq_Value=16000000 +RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,APB3Freq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLK3Freq_Value,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2S2Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM3Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,MCO1PinFreq_Value,MSIClockRange,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PWRFreq_Value,RNGFreq_Value,SYSCLKFreq_VALUE,USART1CLockSelection,USART1Freq_Value,USART2Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value +RCC.LPTIM1Freq_Value=48000000 +RCC.LPTIM2Freq_Value=48000000 +RCC.LPTIM3Freq_Value=48000000 +RCC.LPUART1Freq_Value=48000000 +RCC.LSCOPinFreq_Value=32000 +RCC.LSE_VALUE=32768 +RCC.MCO1PinFreq_Value=48000000 +RCC.MSIClockRange=RCC_MSIRANGE_11 +RCC.PLLPoutputFreq_Value=192000000 +RCC.PLLQoutputFreq_Value=192000000 +RCC.PLLRCLKFreq_Value=192000000 +RCC.PWRFreq_Value=48000000 +RCC.RNGFreq_Value=32000 +RCC.SYSCLKFreq_VALUE=48000000 +RCC.USART1CLockSelection=RCC_USART1CLKSOURCE_SYSCLK +RCC.USART1Freq_Value=48000000 +RCC.USART2Freq_Value=48000000 +RCC.VCOInputFreq_Value=48000000 +RCC.VCOOutputFreq_Value=384000000 +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/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..e47a4e862e --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,83 @@ +/* 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) 2022 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 "stm32wlxx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define BUT2_Pin GPIO_PIN_15 +#define BUT2_GPIO_Port GPIOB +#define LED3_Pin GPIO_PIN_3 +#define LED3_GPIO_Port GPIOB +#define LED2_Pin GPIO_PIN_4 +#define LED2_GPIO_Port GPIOB +#define BUT1_Pin GPIO_PIN_9 +#define BUT1_GPIO_Port GPIOB +#define BUT3_Pin GPIO_PIN_14 +#define BUT3_GPIO_Port GPIOB +#define LED1_Pin GPIO_PIN_5 +#define LED1_GPIO_Port GPIOB +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_hal_conf.h b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_hal_conf.h new file mode 100644 index 0000000000..031ed1da20 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_hal_conf.h @@ -0,0 +1,338 @@ +/** + ****************************************************************************** + * @file stm32wlxx_hal_conf.h + * @author MCD Application Team + * @brief HAL configuration file. + ****************************************************************************** + * @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 + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32WLxx_HAL_CONF_H +#define STM32WLxx_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_COMP_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_GTZC_MODULE_ENABLED */ +/*#define HAL_HSEM_MODULE_ENABLED */ +/*#define HAL_I2C_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IPCC_MODULE_ENABLED */ +/*#define HAL_IRDA_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LPTIM_MODULE_ENABLED */ +/*#define HAL_PKA_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +/*#define HAL_RTC_MODULE_ENABLED */ +/*#define HAL_SMARTCARD_MODULE_ENABLED */ +/*#define HAL_SMBUS_MODULE_ENABLED */ +/*#define HAL_SPI_MODULE_ENABLED */ +/*#define HAL_SUBGHZ_MODULE_ENABLED */ +/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/*#define HAL_USART_MODULE_ENABLED */ +/*#define HAL_WWDG_MODULE_ENABLED */ +#define HAL_EXTI_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED + +/* ########################## Register Callbacks selection ############################## */ +/** + * @brief This is the list of modules where register callback can be used + */ +#define USE_HAL_ADC_REGISTER_CALLBACKS 0u +#define USE_HAL_COMP_REGISTER_CALLBACKS 0u +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u +#define USE_HAL_DAC_REGISTER_CALLBACKS 0u +#define USE_HAL_I2C_REGISTER_CALLBACKS 0u +#define USE_HAL_I2S_REGISTER_CALLBACKS 0u +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u +#define USE_HAL_PKA_REGISTER_CALLBACKS 0u +#define USE_HAL_RNG_REGISTER_CALLBACKS 0u +#define USE_HAL_RTC_REGISTER_CALLBACKS 0u +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u +#define USE_HAL_SPI_REGISTER_CALLBACKS 0u +#define USE_HAL_SUBGHZ_REGISTER_CALLBACKS 0u +#define USE_HAL_TIM_REGISTER_CALLBACKS 0u +#define USE_HAL_UART_REGISTER_CALLBACKS 0u +#define USE_HAL_USART_REGISTER_CALLBACKS 0u +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ + +#if !defined (HSE_VALUE) +#define HSE_VALUE 32000000UL /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) +#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal Multiple Speed oscillator (MSI) default value. + * This value is the default MSI range value after Reset. + */ +#if !defined (MSI_VALUE) +#define MSI_VALUE 4000000UL /*!< 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 16000000UL /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) +#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature. */ + +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) +#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +/** + * @brief Internal Multiple Speed oscillator (HSI48) default value. + * This value is the default HSI48 range value after Reset. + */ +#if !defined (HSI48_VALUE) +#define HSI48_VALUE 48000000UL /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI48_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) +#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE 3300U /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((1uL <<__NVIC_PRIO_BITS) - 1uL) /*!< tick interrupt priority (lowest by default) */ +#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 1 */ + +/* ################## 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 1U + +/* ################## CRYP peripheral configuration ########################## */ + +#define USE_HAL_CRYP_SUSPEND_RESUME 1U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32wlxx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32wlxx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32wlxx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32wlxx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32wlxx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32wlxx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32wlxx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32wlxx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32wlxx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32wlxx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_GTZC_MODULE_ENABLED + #include "stm32wlxx_hal_gtzc.h" +#endif /* HAL_GTZC_MODULE_ENABLED */ + +#ifdef HAL_HSEM_MODULE_ENABLED + #include "stm32wlxx_hal_hsem.h" +#endif /* HAL_HSEM_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32wlxx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32wlxx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IPCC_MODULE_ENABLED + #include "stm32wlxx_hal_ipcc.h" +#endif /* HAL_IPCC_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32wlxx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32wlxx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32wlxx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_PKA_MODULE_ENABLED + #include "stm32wlxx_hal_pka.h" +#endif /* HAL_PKA_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32wlxx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32wlxx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32wlxx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32wlxx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32wlxx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32wlxx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32wlxx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_SUBGHZ_MODULE_ENABLED + #include "stm32wlxx_hal_subghz.h" +#endif /* HAL_SUBGHZ_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32wlxx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32wlxx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32wlxx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32wlxx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32WLxx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_it.h b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_it.h new file mode 100644 index 0000000000..ef5528ee36 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Inc/stm32wlxx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32wlxx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2022 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 __STM32WLxx_IT_H +#define __STM32WLxx_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 /* __STM32WLxx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..0b2e3177e3 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/main.c @@ -0,0 +1,312 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2022 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 hlpuart1; +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_LPUART1_UART_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_LPUART1_UART_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}; + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.MSIState = RCC_MSI_ON; + RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT; + RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK + |RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1 + |RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief LPUART1 Initialization Function + * @param None + * @retval None + */ +static void MX_LPUART1_UART_Init(void) +{ + + /* USER CODE BEGIN LPUART1_Init 0 */ + + /* USER CODE END LPUART1_Init 0 */ + + /* USER CODE BEGIN LPUART1_Init 1 */ + + /* USER CODE END LPUART1_Init 1 */ + hlpuart1.Instance = LPUART1; + hlpuart1.Init.BaudRate = 209700; + hlpuart1.Init.WordLength = UART_WORDLENGTH_8B; + hlpuart1.Init.StopBits = UART_STOPBITS_1; + hlpuart1.Init.Parity = UART_PARITY_NONE; + hlpuart1.Init.Mode = UART_MODE_TX_RX; + hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + hlpuart1.FifoMode = UART_FIFOMODE_DISABLE; + if (HAL_UART_Init(&hlpuart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN LPUART1_Init 2 */ + + /* USER CODE END LPUART1_Init 2 */ + +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) + { + Error_Handler(); + } + if (HAL_UARTEx_DisableFifoMode(&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_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOB, LED3_Pin|LED2_Pin|LED1_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pins : BUT2_Pin BUT1_Pin BUT3_Pin */ + GPIO_InitStruct.Pin = BUT2_Pin|BUT1_Pin|BUT3_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pins : LED3_Pin LED2_Pin LED1_Pin */ + GPIO_InitStruct.Pin = LED3_Pin|LED2_Pin|LED1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* 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, + ex: 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/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_hal_msp.c b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_hal_msp.c new file mode 100644 index 0000000000..95edac82d1 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_hal_msp.c @@ -0,0 +1,208 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32wlxx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2022 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 */ +#include "drv_common.h" +/* 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 */ + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + if(huart->Instance==LPUART1) + { + /* USER CODE BEGIN LPUART1_MspInit 0 */ + + /* USER CODE END LPUART1_MspInit 0 */ + /** Initializes the peripherals clocks + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; + PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_LPUART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**LPUART1 GPIO Configuration + PA3 ------> LPUART1_RX + PA2 ------> LPUART1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN LPUART1_MspInit 1 */ + + /* USER CODE END LPUART1_MspInit 1 */ + } + else if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + + /** Initializes the peripherals clocks + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_SYSCLK; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART1 GPIO Configuration + PB7 ------> USART1_RX + PB6 ------> USART1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==LPUART1) + { + /* USER CODE BEGIN LPUART1_MspDeInit 0 */ + + /* USER CODE END LPUART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_LPUART1_CLK_DISABLE(); + + /**LPUART1 GPIO Configuration + PA3 ------> LPUART1_RX + PA2 ------> LPUART1_TX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_2); + + /* USER CODE BEGIN LPUART1_MspDeInit 1 */ + + /* USER CODE END LPUART1_MspDeInit 1 */ + } + else 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 + PB7 ------> USART1_RX + PB6 ------> USART1_TX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7|GPIO_PIN_6); + + /* 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/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_it.c b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_it.c new file mode 100644 index 0000000000..c7349da4d5 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/stm32wlxx_it.c @@ -0,0 +1,205 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32wlxx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2022 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 "stm32wlxx_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 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles 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 */ +} + +/******************************************************************************/ +/* STM32WLxx 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_stm32wlxx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/system_stm32wlxx.c b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/system_stm32wlxx.c new file mode 100644 index 0000000000..3ce5556be9 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/CubeMX_Config/Src/system_stm32wlxx.c @@ -0,0 +1,359 @@ +/** + ****************************************************************************** + * @file system_stm32wlxx.c + * @author MCD Application Team + * @brief CMSIS Cortex Device Peripheral Access Layer System Source File + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2020(-2021) STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + * 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_stm32wlxx.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_stm32wlxx.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 + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Disabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32WLxx_system + * @{ + */ + +/** @addtogroup stm32WLxx_System_Private_Includes + * @{ + */ + +#include "stm32wlxx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (MSI_VALUE) + #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* MSI_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +#if !defined (LSI_VALUE) + #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/ +#endif /* LSI_VALUE */ + +#if !defined (LSE_VALUE) + #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/ +#endif /* LSE_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32WLxx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32WLxx_System_Private_Defines + * @{ + */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate CPU1 CM4 and/or CPU2 + CM0+ vector table anywhere in Sram or Flash. Else vector table will be kept + at address 0x00 which correspond to automatic remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ +#if defined(USER_VECT_TAB_ADDRESS) +#ifdef CORE_CM0PLUS + /*!< Uncomment this line for user vector table remap in Sram else user remap + will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM2_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x100. */ +#define VECT_TAB_OFFSET 0x00008000U /*!< Vector Table base offset field. + This value must be a multiple of 0x100. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x100. */ +#define VECT_TAB_OFFSET 0x00020000U /*!< Vector Table base offset field. + This value must be a multiple of 0x100. */ +#endif +#else /* CORE_CM4 */ + /*!< Uncomment this line for user vector table remap in Sram else user remap + will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM1_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#endif +#endif +#endif + +/** + * @} + */ + +/** @addtogroup STM32WLxx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32WLxx_System_Private_Variables + * @{ + */ + /* The SystemCoreClock variable is updated in three ways: + 1) from within HAL_Init() + 2) by calling CMSIS function SystemCoreClockUpdate() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + */ + uint32_t SystemCoreClock = 4000000UL; /*CPU1: M4 on MSI clock after startup (4MHz)*/ + + const uint32_t AHBPrescTable[16UL] = {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL}; + + const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL}; + + const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \ + 4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */ +/** + * @} + */ + +/** @addtogroup STM32WLxx_System_Private_FunctionPrototypes + * @{ + */ +/** + * @} + */ + +/** @addtogroup STM32WLxx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * @param None + * @retval None + */ +void SystemInit(void) +{ +#if defined(USER_VECT_TAB_ADDRESS) + /* Configure the Vector Table location add offset address ------------------*/ + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; +#endif + + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */ +#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 stm32wlxx_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 stm32wlxx_hal_conf.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 stm32wlxx_hal_conf.h file (default value + * 32 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, msirange, pllvco, pllr, pllsource , pllm; + + /* Get MSI Range frequency--------------------------------------------------*/ + + /* Get MSI Range frequency--------------------------------------------------*/ + if((RCC->CR & RCC_CR_MSIRGSEL) == 0U) + { /* 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]; + + + /*SystemCoreClock=HAL_RCC_GetSysClockFreq();*/ + /* 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 */ + /* 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) >> RCC_PLLCFGR_PLLM_Pos) + 1UL ; + + 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) >> RCC_PLLCFGR_PLLN_Pos); + pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL); + + SystemCoreClock = pllvco/pllr; + break; + + default: + SystemCoreClock = msirange; + break; + } + + /* Compute HCLK clock frequency --------------------------------------------*/ +#if defined(DUAL_CORE) && defined(CORE_CM0PLUS) + /* Get HCLK2 prescaler */ + tmp = AHBPrescTable[((RCC->EXTCFGR & RCC_EXTCFGR_C2HPRE) >> RCC_EXTCFGR_C2HPRE_Pos)]; +#else + /* Get HCLK1 prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)]; +#endif + + /* Core clock frequency */ + SystemCoreClock = SystemCoreClock / tmp; +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/Kconfig b/bsp/stm32/stm32wle5-yizhilian-lm402/board/Kconfig new file mode 100644 index 0000000000..bf8c660bd2 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/Kconfig @@ -0,0 +1,70 @@ +menu "Hardware Drivers Config" + +config SOC_STM32WLE5JC + bool + select SOC_SERIES_STM32WL + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + + config BSP_USING_USB_TO_UART + bool "Enable USB TO UART (lpuart1)" + select BSP_USING_UART + select BSP_USING_LPUART1 + default y + +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + config BSP_USING_ONCHIP_RTC + bool "Enable RTC" + default n + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART1 + bool "Enable UART1" + default n + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART2 + bool "Enable UART2" + default n + + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_LPUART1 + bool "Enable LPUART1" + default y + config BSP_LPUART1_RX_USING_DMA + bool "Enable LPUART1 RX DMA" + depends on BSP_USING_LPUART1 && RT_SERIAL_USING_DMA + default n + + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/SConscript b/bsp/stm32/stm32wle5-yizhilian-lm402/board/SConscript new file mode 100644 index 0000000000..a84e1c8a7d --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/SConscript @@ -0,0 +1,31 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add general drivers +src = Split(''' +board.c +CubeMX_Config/Src/stm32wlxx_hal_msp.c +''') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] +path += [cwd + '/ports'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32WLxx_HAL/CMSIS/Device/ST/STM32WLxx/Source/Templates/gcc/startup_stm32wle5xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32WLxx_HAL/CMSIS/Device/ST/STM32WLxx/Source/Templates/arm/startup_stm32wle5xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32WLxx_HAL/CMSIS/Device/ST/STM32WLxx/Source/Templates/iar/startup_stm32wle5xx.s'] + +CPPDEFINES = ['STM32WLxx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/board.c b/bsp/stm32/stm32wle5-yizhilian-lm402/board/board.c new file mode 100644 index 0000000000..0ae1c7ef77 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/board.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-3-30 CaocoWang first version + */ + +#include + +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the CPU, AHB and APB busses clocks + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI; + RCC_OscInitStruct.MSIState = RCC_MSI_ON; + RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT; + RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK + |RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1 + |RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/board/board.h b/bsp/stm32/stm32wle5-yizhilian-lm402/board/board.h new file mode 100644 index 0000000000..f95ae40e27 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/board.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-3-30 CaoCoWang first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include "stm32wlxx.h" +#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 (64) +#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/stm32wle5-yizhilian-lm402/board/linker_scripts/link.sct b/bsp/stm32/stm32wle5-yizhilian-lm402/board/linker_scripts/link.sct new file mode 100644 index 0000000000..e68eea6daf --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x40000 { ; load region size_region + ER_IROM1 0x08000000 0x40000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM2 0x10000000 0x00008000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/figures/LM402_lora.jpg b/bsp/stm32/stm32wle5-yizhilian-lm402/figures/LM402_lora.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f5ef61a5a8c862b3f3ade50a540b91f43b21503 GIT binary patch literal 167035 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 + + + 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 + 0 + 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 -FF0STM32WLxx_CM4 -FL040000 -FS08000000 -FP0($$Device:STM32WLE5JCIx$CMSIS\Flash\STM32WLxx_CM4.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U-O206 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -TO18 -TC10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32WLxx_CM4 -FS08000000 -FL040000 -FP0($$Device:STM32WLE5JCIx$CMSIS\Flash\STM32WLxx_CM4.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 + + + + + + + + + + + + + Applications + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Compiler + 1 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\stdlib.c + stdlib.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + + + CPU + 1 + 0 + 0 + 0 + + 3 + 6 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 3 + 9 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + + + DeviceDrivers + 1 + 0 + 0 + 0 + + 4 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 4 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 4 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion.c + completion.c + 0 + 0 + + + 4 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 4 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 4 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 5 + 20 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32wlxx_hal_msp.c + stm32wlxx_hal_msp.c + 0 + 0 + + + 5 + 21 + 2 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\arm\startup_stm32wle5xx.s + startup_stm32wle5xx.s + 0 + 0 + + + 5 + 22 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 5 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 5 + 24 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 5 + 25 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 6 + 26 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 27 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 7 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 7 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 7 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 7 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 7 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 7 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 7 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 7 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 7 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 7 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 7 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 7 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 7 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 8 + 42 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr.c + stm32wlxx_hal_pwr.c + 0 + 0 + + + 8 + 43 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma_ex.c + stm32wlxx_hal_dma_ex.c + 0 + 0 + + + 8 + 44 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_gpio.c + stm32wlxx_hal_gpio.c + 0 + 0 + + + 8 + 45 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc_ex.c + stm32wlxx_hal_rcc_ex.c + 0 + 0 + + + 8 + 46 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart.c + stm32wlxx_hal_usart.c + 0 + 0 + + + 8 + 47 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr_ex.c + stm32wlxx_hal_pwr_ex.c + 0 + 0 + + + 8 + 48 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cryp.c + stm32wlxx_hal_cryp.c + 0 + 0 + + + 8 + 49 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart_ex.c + stm32wlxx_hal_usart_ex.c + 0 + 0 + + + 8 + 50 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_exti.c + stm32wlxx_hal_exti.c + 0 + 0 + + + 8 + 51 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\system_stm32wlxx.c + system_stm32wlxx.c + 0 + 0 + + + 8 + 52 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cortex.c + stm32wlxx_hal_cortex.c + 0 + 0 + + + 8 + 53 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart_ex.c + stm32wlxx_hal_uart_ex.c + 0 + 0 + + + 8 + 54 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal.c + stm32wlxx_hal.c + 0 + 0 + + + 8 + 55 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc.c + stm32wlxx_hal_rcc.c + 0 + 0 + + + 8 + 56 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma.c + stm32wlxx_hal_dma.c + 0 + 0 + + + 8 + 57 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart.c + stm32wlxx_hal_uart.c + 0 + 0 + + + 8 + 58 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_comp.c + stm32wlxx_hal_comp.c + 0 + 0 + + + 8 + 59 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rng.c + stm32wlxx_hal_rng.c + 0 + 0 + + + 8 + 60 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc.c + stm32wlxx_hal_crc.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc_ex.c + stm32wlxx_hal_crc_ex.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cryp_ex.c + stm32wlxx_hal_cryp_ex.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/project.uvprojx b/bsp/stm32/stm32wle5-yizhilian-lm402/project.uvprojx new file mode 100644 index 0000000000..c21c78b02d --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/project.uvprojx @@ -0,0 +1,742 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32WLE5JCIx + STMicroelectronics + Keil.STM32WLxx_DFP.1.1.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00008000) IRAM2(0x20008000,0x00008000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WLxx_CM4 -FS08000000 -FL040000 -FP0($$Device:STM32WLE5JCIx$CMSIS\Flash\STM32WLxx_CM4.FLM)) + 0 + + + + + + + + + + + $$Device:STM32WLE5JCIx$CMSIS\SVD\STM32WLE5_CM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 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 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 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 + 0x8000 + + + 0 + 0x20008000 + 0x8000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER, __RTTHREAD__, STM32WLxx, RT_USING_ARM_LIBC, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;..\..\..\components\libc\compilers\common;..\..\..\components\libc\compilers\common\extension;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;board\CubeMX_Config\Inc;board\ports;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\io\stdio;..\..\..\components\libc\posix\ipc;..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Inc;..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Include;..\libraries\STM32WLxx_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 + + + + + Compiler + + + syscalls.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + + + stdlib.c + 1 + ..\..\..\components\libc\compilers\common\stdlib.c + + + time.c + 1 + ..\..\..\components\libc\compilers\common\time.c + + + + + CPU + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + DeviceDrivers + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + completion.c + 1 + ..\..\..\components\drivers\ipc\completion.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + + + Drivers + + + stm32wlxx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32wlxx_hal_msp.c + + + startup_stm32wle5xx.s + 2 + ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\arm\startup_stm32wle5xx.s + + + board.c + 1 + board\board.c + + + 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 + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + + + Kernel + + + mem.c + 1 + ..\..\..\src\mem.c + + + device.c + 1 + ..\..\..\src\device.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + components.c + 1 + ..\..\..\src\components.c + + + object.c + 1 + ..\..\..\src\object.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + clock.c + 1 + ..\..\..\src\clock.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + STM32_HAL + + + stm32wlxx_hal_pwr.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr.c + + + stm32wlxx_hal_dma_ex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma_ex.c + + + stm32wlxx_hal_gpio.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_gpio.c + + + stm32wlxx_hal_rcc_ex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc_ex.c + + + stm32wlxx_hal_usart.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart.c + + + stm32wlxx_hal_pwr_ex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_pwr_ex.c + + + stm32wlxx_hal_cryp.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cryp.c + + + stm32wlxx_hal_usart_ex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_usart_ex.c + + + stm32wlxx_hal_exti.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_exti.c + + + system_stm32wlxx.c + 1 + ..\libraries\STM32WLxx_HAL\CMSIS\Device\ST\STM32WLxx\Source\Templates\system_stm32wlxx.c + + + stm32wlxx_hal_cortex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cortex.c + + + stm32wlxx_hal_uart_ex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart_ex.c + + + stm32wlxx_hal.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal.c + + + stm32wlxx_hal_rcc.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rcc.c + + + stm32wlxx_hal_dma.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_dma.c + + + stm32wlxx_hal_uart.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_uart.c + + + stm32wlxx_hal_comp.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_comp.c + + + stm32wlxx_hal_rng.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_rng.c + + + stm32wlxx_hal_crc.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc.c + + + stm32wlxx_hal_crc_ex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_crc_ex.c + + + stm32wlxx_hal_cryp_ex.c + 1 + ..\libraries\STM32WLxx_HAL\STM32WLxx_HAL_Driver\Src\stm32wlxx_hal_cryp_ex.c + + + + + + + + + + + + + +
diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.h b/bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.h new file mode 100644 index 0000000000..ace7b44266 --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.h @@ -0,0 +1,176 @@ +#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 100 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice optimization */ + + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "lpuart1" +#define RT_VER_NUM 0x40100 +#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 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* C/C++ and POSIX layer */ + +#define RT_LIBC_DEFAULT_TIMEZONE 8 + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + + +/* Network */ + + +/* Utilities */ + + +/* RT-Thread Utestcases */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* U8G2: a monochrome graphic library */ + + +/* tools packages */ + + +/* system packages */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + + +/* Micrium: Micrium software products porting for RT-Thread */ + + +/* peripheral libraries and drivers */ + + +/* AI packages */ + + +/* miscellaneous packages */ + +/* samples: kernel and components samples */ + + +/* entertainment: terminal games and other interesting software packages */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32WL + +/* Hardware Drivers Config */ + +#define SOC_STM32WLE5JC + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_UART + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_LPUART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.py b/bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.py new file mode 100644 index 0000000000..fc0386eaea --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/rtconfig.py @@ -0,0 +1,177 @@ +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 == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M4.fp ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m4 ' + CFLAGS += ' -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 ' + CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' + CFLAGS += ' -gdwarf-3 -ffunction-sections ' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' + LFLAGS += ' --list rt-thread.map ' + LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' + + EXEC_PATH += '/ARM/ARMCLANG/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O1' # armclang recommend + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M4' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv4_sp' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M4' + AFLAGS += ' --fpu VFPv4_sp' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/template.uvoptx b/bsp/stm32/stm32wle5-yizhilian-lm402/template.uvoptx new file mode 100644 index 0000000000..14d579b60b --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/template.uvoptx @@ -0,0 +1,185 @@ + + + + 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 + 0 + 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 -FF0STM32WLxx_CM4 -FL040000 -FS08000000 -FP0($$Device:STM32WLE5JCIx$CMSIS\Flash\STM32WLxx_CM4.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U-O206 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -TO18 -TC10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32WLxx_CM4 -FS08000000 -FL040000 -FP0($$Device:STM32WLE5JCIx$CMSIS\Flash\STM32WLxx_CM4.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 + + + + + + + + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32wle5-yizhilian-lm402/template.uvprojx b/bsp/stm32/stm32wle5-yizhilian-lm402/template.uvprojx new file mode 100644 index 0000000000..5bc5a915dc --- /dev/null +++ b/bsp/stm32/stm32wle5-yizhilian-lm402/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 + + + STM32WLE5JCIx + STMicroelectronics + Keil.STM32WLxx_DFP.1.1.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00008000) IRAM2(0x20008000,0x00008000) IROM(0x08000000,0x00040000) CPUTYPE("Cortex-M4") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WLxx_CM4 -FS08000000 -FL040000 -FP0($$Device:STM32WLE5JCIx$CMSIS\Flash\STM32WLxx_CM4.FLM)) + 0 + + + + + + + + + + + $$Device:STM32WLE5JCIx$CMSIS\SVD\STM32WLE5_CM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 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 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 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 + 0x8000 + + + 0 + 0x20008000 + 0x8000 + + + + + + 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 + + + + + + + + + + + +