From bced43b8a76b06c298a04a9b05952be9fcc3c065 Mon Sep 17 00:00:00 2001 From: sabas1080 Date: Thu, 12 Aug 2021 09:07:51 -0500 Subject: [PATCH 1/2] variant: WL: add generic WL54CCU, WL55CCU, WLE4C(8-B-C)U and WLE5C --- README.md | 3 + boards.txt | 64 ++++++ .../generic_clock.c | 32 ++- .../ldscript.ld | 186 ++++++++++++++++++ 4 files changed, 283 insertions(+), 2 deletions(-) create mode 100644 variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/ldscript.ld diff --git a/README.md b/README.md index dd31683d3e..2e0e99d0ab 100644 --- a/README.md +++ b/README.md @@ -420,8 +420,11 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d | Status | Device(s) | Name | Release | Notes | | :----: | :-------: | ---- | :-----: | :---- | +| :yellow_heart: | STM32WL54CC
STM32WL55CC | Generic Board | **2.1.0** | | | :yellow_heart: | STM32WL55JC
STM32WL55JC | Generic Board | **2.1.0** | | +| :yellow_heart: | STM32WLE4C8
STM32WLE4CB
STM32WLE4CC | Generic Board | **2.1.0** | | | :yellow_heart: | STM32WLE4J8
STM32WLE4JB
STM32WLE4JC | Generic Board | **2.1.0** | | +| :yellow_heart: | STM32WLE5C8
STM32WLE5CB
STM32WLE5CC | Generic Board | **2.1.0** | | | :yellow_heart: | STM32WLE5J8
STM32WLE5JB
STM32WLE5JC | Generic Board | **2.1.0** | | ### 3D printer boards diff --git a/boards.txt b/boards.txt index 0cd52955a3..5220f99250 100644 --- a/boards.txt +++ b/boards.txt @@ -5081,6 +5081,14 @@ GenWL.build.mcu=cortex-m4 GenWL.build.series=STM32WLxx GenWL.build.cmsis_lib_gcc=arm_cortexM4lf_math +# Generic WL54CCUx +GenWL.menu.pnum.GENERIC_WL54CCUX=Generic WL54CCUx +GenWL.menu.pnum.GENERIC_WL54CCUX.upload.maximum_size=262144 +GenWL.menu.pnum.GENERIC_WL54CCUX.upload.maximum_data_size=65536 +GenWL.menu.pnum.GENERIC_WL54CCUX.build.board=GENERIC_WL54CCUX +GenWL.menu.pnum.GENERIC_WL54CCUX.build.product_line=STM32WL54xx +GenWL.menu.pnum.GENERIC_WL54CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + # Generic WL54JCIx GenWL.menu.pnum.GENERIC_WL54JCIX=Generic WL54JCIx GenWL.menu.pnum.GENERIC_WL54JCIX.upload.maximum_size=262144 @@ -5089,6 +5097,14 @@ GenWL.menu.pnum.GENERIC_WL54JCIX.build.board=GENERIC_WL54JCIX GenWL.menu.pnum.GENERIC_WL54JCIX.build.product_line=STM32WL54xx GenWL.menu.pnum.GENERIC_WL54JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I +# Generic WL55CCUx +GenWL.menu.pnum.GENERIC_WL55CCUX=Generic WL55CCUx +GenWL.menu.pnum.GENERIC_WL55CCUX.upload.maximum_size=262144 +GenWL.menu.pnum.GENERIC_WL55CCUX.upload.maximum_data_size=65536 +GenWL.menu.pnum.GENERIC_WL55CCUX.build.board=GENERIC_WL55CCUX +GenWL.menu.pnum.GENERIC_WL55CCUX.build.product_line=STM32WL55xx +GenWL.menu.pnum.GENERIC_WL55CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + # Generic WL55JCIx GenWL.menu.pnum.GENERIC_WL55JCIX=Generic WL55JCIx GenWL.menu.pnum.GENERIC_WL55JCIX.upload.maximum_size=262144 @@ -5097,6 +5113,30 @@ GenWL.menu.pnum.GENERIC_WL55JCIX.build.board=GENERIC_WL55JCIX GenWL.menu.pnum.GENERIC_WL55JCIX.build.product_line=STM32WL55xx GenWL.menu.pnum.GENERIC_WL55JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I +# Generic WLE4C8Ux +GenWL.menu.pnum.GENERIC_WLE4C8UX=Generic WLE4C8Ux +GenWL.menu.pnum.GENERIC_WLE4C8UX.upload.maximum_size=65536 +GenWL.menu.pnum.GENERIC_WLE4C8UX.upload.maximum_data_size=20480 +GenWL.menu.pnum.GENERIC_WLE4C8UX.build.board=GENERIC_WLE4C8UX +GenWL.menu.pnum.GENERIC_WLE4C8UX.build.product_line=STM32WLE4xx +GenWL.menu.pnum.GENERIC_WLE4C8UX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + +# Generic WLE4CBUx +GenWL.menu.pnum.GENERIC_WLE4CBUX=Generic WLE4CBUx +GenWL.menu.pnum.GENERIC_WLE4CBUX.upload.maximum_size=131072 +GenWL.menu.pnum.GENERIC_WLE4CBUX.upload.maximum_data_size=49152 +GenWL.menu.pnum.GENERIC_WLE4CBUX.build.board=GENERIC_WLE4CBUX +GenWL.menu.pnum.GENERIC_WLE4CBUX.build.product_line=STM32WLE4xx +GenWL.menu.pnum.GENERIC_WLE4CBUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + +# Generic WLE4CCUx +GenWL.menu.pnum.GENERIC_WLE4CCUX=Generic WLE4CCUx +GenWL.menu.pnum.GENERIC_WLE4CCUX.upload.maximum_size=262144 +GenWL.menu.pnum.GENERIC_WLE4CCUX.upload.maximum_data_size=65536 +GenWL.menu.pnum.GENERIC_WLE4CCUX.build.board=GENERIC_WLE4CCUX +GenWL.menu.pnum.GENERIC_WLE4CCUX.build.product_line=STM32WLE4xx +GenWL.menu.pnum.GENERIC_WLE4CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + # Generic WLE4J8Ix GenWL.menu.pnum.GENERIC_WLE4J8IX=Generic WLE4J8Ix GenWL.menu.pnum.GENERIC_WLE4J8IX.upload.maximum_size=65536 @@ -5121,6 +5161,30 @@ GenWL.menu.pnum.GENERIC_WLE4JCIX.build.board=GENERIC_WLE4JCIX GenWL.menu.pnum.GENERIC_WLE4JCIX.build.product_line=STM32WLE4xx GenWL.menu.pnum.GENERIC_WLE4JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I +# Generic WLE5C8Ux +GenWL.menu.pnum.GENERIC_WLE5C8UX=Generic WLE5C8Ux +GenWL.menu.pnum.GENERIC_WLE5C8UX.upload.maximum_size=65536 +GenWL.menu.pnum.GENERIC_WLE5C8UX.upload.maximum_data_size=20480 +GenWL.menu.pnum.GENERIC_WLE5C8UX.build.board=GENERIC_WLE5C8UX +GenWL.menu.pnum.GENERIC_WLE5C8UX.build.product_line=STM32WLE5xx +GenWL.menu.pnum.GENERIC_WLE5C8UX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + +# Generic WLE5CBUx +GenWL.menu.pnum.GENERIC_WLE5CBUX=Generic WLE5CBUx +GenWL.menu.pnum.GENERIC_WLE5CBUX.upload.maximum_size=131072 +GenWL.menu.pnum.GENERIC_WLE5CBUX.upload.maximum_data_size=49152 +GenWL.menu.pnum.GENERIC_WLE5CBUX.build.board=GENERIC_WLE5CBUX +GenWL.menu.pnum.GENERIC_WLE5CBUX.build.product_line=STM32WLE5xx +GenWL.menu.pnum.GENERIC_WLE5CBUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + +# Generic WLE5CCUx +GenWL.menu.pnum.GENERIC_WLE5CCUX=Generic WLE5CCUx +GenWL.menu.pnum.GENERIC_WLE5CCUX.upload.maximum_size=262144 +GenWL.menu.pnum.GENERIC_WLE5CCUX.upload.maximum_data_size=65536 +GenWL.menu.pnum.GENERIC_WLE5CCUX.build.board=GENERIC_WLE5CCUX +GenWL.menu.pnum.GENERIC_WLE5CCUX.build.product_line=STM32WLE5xx +GenWL.menu.pnum.GENERIC_WLE5CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + # Generic WLE5J8Ix GenWL.menu.pnum.GENERIC_WLE5J8IX=Generic WLE5J8Ix GenWL.menu.pnum.GENERIC_WLE5J8IX.upload.maximum_size=65536 diff --git a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/generic_clock.c b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/generic_clock.c index 4eed36f4e3..dc70a944ea 100644 --- a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/generic_clock.c +++ b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/generic_clock.c @@ -23,8 +23,36 @@ */ WEAK void SystemClock_Config(void) { - /* SystemClock_Config can be generated by STM32CubeMX */ -#warning "SystemClock_Config() is empty. Default clock at reset is used." + RCC_OscInitTypeDef RCC_OscInitStruct = {}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {}; + + /** 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(); + } } #endif /* ARDUINO_GENERIC_* */ diff --git a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/ldscript.ld b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/ldscript.ld new file mode 100644 index 0000000000..93f1c4a763 --- /dev/null +++ b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/ldscript.ld @@ -0,0 +1,186 @@ +/* +****************************************************************************** +** +** File : ldscript.ld +** +** Author : STM32CubeIDE +** +** Abstract : Linker script for STM32WL55xC Device +** 256Kbytes FLASH +** 64Kbytes RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** Distribution: The file is distributed as is without any warranty +** of any kind. +** +***************************************************************************** +** @attention +** +**

© Copyright (c) 2021 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 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ + +_Min_Heap_Size = 0x200 ; /* required amount of heap */ +_Min_Stack_Size = 0x400 ; /* required amount of stack */ + +/* Memories definition */ +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE + FLASH (rx) : ORIGIN = 0x08000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET +} + +/* Sections */ +SECTIONS +{ + /* The startup code into "FLASH" Rom type memory */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data into "FLASH" Rom type memory */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data into "FLASH" Rom type memory */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { + . = ALIGN(4); + *(.ARM.extab* .gnu.linkonce.armextab.*) + . = ALIGN(4); + } >FLASH + + .ARM : { + . = ALIGN(4); + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + . = ALIGN(4); + } >FLASH + + .preinit_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4); + } >FLASH + + .init_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4); + } >FLASH + + .fini_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4); + } >FLASH + + /* Used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections into "RAM" Ram type memory */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + *(.RamFunc) /* .RamFunc sections */ + *(.RamFunc*) /* .RamFunc* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + + } >RAM AT> FLASH + + /* Uninitialized data section into "RAM" Ram type memory */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + /* Remove information from the compiler libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} From 49cfeb4d95698490f2ebf52bddeb182c7cc52379 Mon Sep 17 00:00:00 2001 From: sabas1080 Date: Thu, 12 Aug 2021 09:11:53 -0500 Subject: [PATCH 2/2] variant: WL: add Generic Node Sensor Edition from TTI --- README.md | 1 + boards.txt | 9 + .../variant_GENERIC_NODE_SE_TTI.cpp | 105 ++++++++++++ .../variant_GENERIC_NODE_SE_TTI.h | 157 ++++++++++++++++++ 4 files changed, 272 insertions(+) create mode 100644 variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.cpp create mode 100644 variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.h diff --git a/README.md b/README.md index 2e0e99d0ab..773c757e09 100644 --- a/README.md +++ b/README.md @@ -420,6 +420,7 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d | Status | Device(s) | Name | Release | Notes | | :----: | :-------: | ---- | :-----: | :---- | +| :yellow_heart: | STM32WL55CC | [Generic Node Sensor Edition](https://www.genericnode.com/docs/sensor-edition) (GNSE) by TTI | **2.1.0** | [GNSE GitHub](https://github.com/TheThingsIndustries/generic-node-se) | | :yellow_heart: | STM32WL54CC
STM32WL55CC | Generic Board | **2.1.0** | | | :yellow_heart: | STM32WL55JC
STM32WL55JC | Generic Board | **2.1.0** | | | :yellow_heart: | STM32WLE4C8
STM32WLE4CB
STM32WLE4CC | Generic Board | **2.1.0** | | diff --git a/boards.txt b/boards.txt index 5220f99250..9df12555f6 100644 --- a/boards.txt +++ b/boards.txt @@ -5081,6 +5081,15 @@ GenWL.build.mcu=cortex-m4 GenWL.build.series=STM32WLxx GenWL.build.cmsis_lib_gcc=arm_cortexM4lf_math +# Generic node SE by The Things Industries +GenWL.menu.pnum.GENERIC_NODE_SE_TTI=Generic Node SE (TTI) +GenWL.menu.pnum.GENERIC_NODE_SE_TTI.upload.maximum_size=262144 +GenWL.menu.pnum.GENERIC_NODE_SE_TTI.upload.maximum_data_size=65536 +GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.board=GENERIC_NODE_SE_TTI +GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.product_line=STM32WL55xx +GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.variant_h=variant_GENERIC_NODE_SE_TTI.h +GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U + # Generic WL54CCUx GenWL.menu.pnum.GENERIC_WL54CCUX=Generic WL54CCUx GenWL.menu.pnum.GENERIC_WL54CCUX.upload.maximum_size=262144 diff --git a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.cpp b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.cpp new file mode 100644 index 0000000000..fec1879805 --- /dev/null +++ b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.cpp @@ -0,0 +1,105 @@ +/* + ******************************************************************************* + * Copyright (c) 2021, 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 + * + ******************************************************************************* + */ +#if defined(ARDUINO_GENERIC_NODE_SE_TTI) +#include "pins_arduino.h" + +// Digital PinName array +const PinName digitalPin[] = { + PB_3, // D0/USR_BTN/SWO/RTS + PA_15, // D1/BUZZER + PA_2, // D2/TX + PA_3, // D3/RX + PA_11, // D4/SDA2/A1 + PA_12, // D5/SCL2/A2 + PA_13, // D6/A3/SWDIO + PA_14, // D7/A4/SWCLK + PA_0, // D8/FE_CTRL1 + PA_1, // D9/FE_CTRL2 + PA_4, // D10/CS1 FLASH + PA_5, // D11/SCK1 + PA_6, // D12/MISO + PA_7, // D13/MOSI + PA_8, // D14/ACCEL_INT2 + PA_9, // D15/SCL1 + PA_10, // D16/SDA1 + PB_0, // D17/VDD_TCX0 + PB_2, // D18/VABAT_ADC/A0 + PB_4, // D19/VBAT_READ_EN + PB_5, // D20/LED_RED + PB_6, // D21/LED_GREEN + PB_7, // D22/LED_BLUE + PB_8, // D23/FE_CTRL3 + PB_12, // D24/LS1_SENSORS_EN + PC_13, // D25/LS2_FLASH_EN + PH_3, // D26/BOOT0 + PC_14, // D27/OSC32-IN + PC_15 // D28/OSC32-OUT +}; + +// Analog (Ax) pin number array +const uint32_t analogInputPin[] = { + 18, // A0, PB2 + 4, // A1, PA11 + 5, // A2, PA12 + 6, // A3, PA13 + 7 // A4, PA14 +}; + +// ---------------------------------------------------------------------------- +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief System Clock Configuration + * @param None + * @retval None + */ +WEAK void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {}; + + /** Configure the main internal regulator output voltage + */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + /** 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_6; + 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_0) != HAL_OK) { + Error_Handler(); + } +} + +#ifdef __cplusplus +} +#endif +#endif /* ARDUINO_GENERIC_* */ diff --git a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.h b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.h new file mode 100644 index 0000000000..6a340aecef --- /dev/null +++ b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_GENERIC_NODE_SE_TTI.h @@ -0,0 +1,157 @@ +/* + ******************************************************************************* + * Copyright (c) 2021, 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 + * + ******************************************************************************* + */ +#pragma once + +/*---------------------------------------------------------------------------- + * STM32 pins number + *----------------------------------------------------------------------------*/ +#define PB3 0 +#define PA15 1 +#define PA2 2 +#define PA3 3 +#define PA11 PIN_A1 +#define PA12 PIN_A2 +#define PA13 PIN_A3 +#define PA14 PIN_A4 +#define PA0 8 +#define PA1 9 +#define PA4 10 +#define PA5 11 +#define PA6 12 +#define PA7 13 +#define PA8 14 +#define PA9 15 +#define PA10 16 +#define PB0 17 +#define PB2 PIN_A0 +#define PB4 19 +#define PB5 20 +#define PB6 21 +#define PB7 22 +#define PB8 23 +#define PB12 24 +#define PC13 25 +#define PH3 26 +#define PC14 27 // OSC32-IN +#define PC15 28 // OSC32-OUT + +// Alternate pins number +#define PA1_ALT1 (PA1 | ALT1) +#define PA2_ALT1 (PA2 | ALT1) +#define PA3_ALT1 (PA3 | ALT1) +#define PA7_ALT1 (PA7 | ALT1) +#define PB8_ALT1 (PB8 | ALT1) + +#define NUM_DIGITAL_PINS 29 +#define NUM_ANALOG_INPUTS 5 + +// On-board LED pin number +#define LED_RED PB5 +#ifndef LED_BUILTIN + #define LED_BUILTIN LED_RED +#endif +#define LED_GREEN PB6 +#define LED_BLUE PB7 + + +// On-board user button +#define B1_BTN PB3 +#ifndef USER_BTN + #define USER_BTN B1_BTN +#endif + +// SPI definitions +#ifndef PIN_SPI_SS + #define PIN_SPI_SS PA4 +#endif +#ifndef PIN_SPI_SS1 + #define PIN_SPI_SS1 PA15 +#endif +#ifndef PIN_SPI_SS2 + #define PIN_SPI_SS2 PB2 +#endif +#ifndef PIN_SPI_SS3 + #define PIN_SPI_SS3 PNUM_NOT_DEFINED +#endif +#ifndef PIN_SPI_MOSI + #define PIN_SPI_MOSI PA7 +#endif +#ifndef PIN_SPI_MISO + #define PIN_SPI_MISO PA6 +#endif +#ifndef PIN_SPI_SCK + #define PIN_SPI_SCK PA5 +#endif + +// I2C definitions +#ifndef PIN_WIRE_SDA + #define PIN_WIRE_SDA PA10 +#endif +#ifndef PIN_WIRE_SCL + #define PIN_WIRE_SCL PA9 +#endif + +// Timer Definitions +#ifndef TIMER_TONE + #define TIMER_TONE TIM16 +#endif +#ifndef TIMER_SERVO + #define TIMER_SERVO TIM17 +#endif + +// UART Definitions +#ifndef SERIAL_UART_INSTANCE + #define SERIAL_UART_INSTANCE 101 +#endif + +// Default pin used for generic 'Serial' instance +// Mandatory for Firmata +#ifndef PIN_SERIAL_RX + #define PIN_SERIAL_RX PA3 +#endif +#ifndef PIN_SERIAL_TX + #define PIN_SERIAL_TX PA2 +#endif + +// Extra HAL modules +#if !defined(HAL_DAC_MODULE_DISABLED) + #define HAL_DAC_MODULE_ENABLED +#endif + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + // These serial port names are intended to allow libraries and architecture-neutral + // sketches to automatically default to the correct port name for a particular type + // of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, + // the first hardware serial port whose RX/TX pins are not dedicated to another use. + // + // SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor + // + // SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial + // + // SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library + // + // SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. + // + // SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX + // pins are NOT connected to anything by default. + #ifndef SERIAL_PORT_MONITOR + #define SERIAL_PORT_MONITOR Serial + #endif + #ifndef SERIAL_PORT_HARDWARE + #define SERIAL_PORT_HARDWARE Serial + #endif +#endif