Skip to content

Commit 9209335

Browse files
committed
Merge pull request #1459 from ElectronicCats/generic_node_ttn
Add support for Generic Node Sensor Edition by TTI
2 parents f2cec8c + 3e7428a commit 9209335

File tree

6 files changed

+555
-2
lines changed

6 files changed

+555
-2
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,12 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
421421

422422
| Status | Device(s) | Name | Release | Notes |
423423
| :----: | :-------: | ---- | :-----: | :---- |
424+
| :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) |
425+
| :yellow_heart: | STM32WL54CC<br>STM32WL55CC | Generic Board | **2.1.0** | |
424426
| :yellow_heart: | STM32WL55JC<br>STM32WL55JC | Generic Board | **2.1.0** | |
427+
| :yellow_heart: | STM32WLE4C8<br>STM32WLE4CB<br>STM32WLE4CC | Generic Board | **2.1.0** | |
425428
| :yellow_heart: | STM32WLE4J8<br>STM32WLE4JB<br>STM32WLE4JC | Generic Board | **2.1.0** | |
429+
| :yellow_heart: | STM32WLE5C8<br>STM32WLE5CB<br>STM32WLE5CC | Generic Board | **2.1.0** | |
426430
| :yellow_heart: | STM32WLE5J8<br>STM32WLE5JB<br>STM32WLE5JC | Generic Board | **2.1.0** | |
427431

428432
### 3D printer boards

boards.txt

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5153,6 +5153,23 @@ GenWL.build.mcu=cortex-m4
51535153
GenWL.build.series=STM32WLxx
51545154
GenWL.build.cmsis_lib_gcc=arm_cortexM4lf_math
51555155

5156+
# Generic node SE by The Things Industries
5157+
GenWL.menu.pnum.GENERIC_NODE_SE_TTI=Generic Node SE (TTI)
5158+
GenWL.menu.pnum.GENERIC_NODE_SE_TTI.upload.maximum_size=262144
5159+
GenWL.menu.pnum.GENERIC_NODE_SE_TTI.upload.maximum_data_size=65536
5160+
GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.board=GENERIC_NODE_SE_TTI
5161+
GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.product_line=STM32WL55xx
5162+
GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.variant_h=variant_GENERIC_NODE_SE_TTI.h
5163+
GenWL.menu.pnum.GENERIC_NODE_SE_TTI.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5164+
5165+
# Generic WL54CCUx
5166+
GenWL.menu.pnum.GENERIC_WL54CCUX=Generic WL54CCUx
5167+
GenWL.menu.pnum.GENERIC_WL54CCUX.upload.maximum_size=262144
5168+
GenWL.menu.pnum.GENERIC_WL54CCUX.upload.maximum_data_size=65536
5169+
GenWL.menu.pnum.GENERIC_WL54CCUX.build.board=GENERIC_WL54CCUX
5170+
GenWL.menu.pnum.GENERIC_WL54CCUX.build.product_line=STM32WL54xx
5171+
GenWL.menu.pnum.GENERIC_WL54CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5172+
51565173
# Generic WL54JCIx
51575174
GenWL.menu.pnum.GENERIC_WL54JCIX=Generic WL54JCIx
51585175
GenWL.menu.pnum.GENERIC_WL54JCIX.upload.maximum_size=262144
@@ -5161,6 +5178,14 @@ GenWL.menu.pnum.GENERIC_WL54JCIX.build.board=GENERIC_WL54JCIX
51615178
GenWL.menu.pnum.GENERIC_WL54JCIX.build.product_line=STM32WL54xx
51625179
GenWL.menu.pnum.GENERIC_WL54JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
51635180

5181+
# Generic WL55CCUx
5182+
GenWL.menu.pnum.GENERIC_WL55CCUX=Generic WL55CCUx
5183+
GenWL.menu.pnum.GENERIC_WL55CCUX.upload.maximum_size=262144
5184+
GenWL.menu.pnum.GENERIC_WL55CCUX.upload.maximum_data_size=65536
5185+
GenWL.menu.pnum.GENERIC_WL55CCUX.build.board=GENERIC_WL55CCUX
5186+
GenWL.menu.pnum.GENERIC_WL55CCUX.build.product_line=STM32WL55xx
5187+
GenWL.menu.pnum.GENERIC_WL55CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5188+
51645189
# Generic WL55JCIx
51655190
GenWL.menu.pnum.GENERIC_WL55JCIX=Generic WL55JCIx
51665191
GenWL.menu.pnum.GENERIC_WL55JCIX.upload.maximum_size=262144
@@ -5169,6 +5194,30 @@ GenWL.menu.pnum.GENERIC_WL55JCIX.build.board=GENERIC_WL55JCIX
51695194
GenWL.menu.pnum.GENERIC_WL55JCIX.build.product_line=STM32WL55xx
51705195
GenWL.menu.pnum.GENERIC_WL55JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
51715196

5197+
# Generic WLE4C8Ux
5198+
GenWL.menu.pnum.GENERIC_WLE4C8UX=Generic WLE4C8Ux
5199+
GenWL.menu.pnum.GENERIC_WLE4C8UX.upload.maximum_size=65536
5200+
GenWL.menu.pnum.GENERIC_WLE4C8UX.upload.maximum_data_size=20480
5201+
GenWL.menu.pnum.GENERIC_WLE4C8UX.build.board=GENERIC_WLE4C8UX
5202+
GenWL.menu.pnum.GENERIC_WLE4C8UX.build.product_line=STM32WLE4xx
5203+
GenWL.menu.pnum.GENERIC_WLE4C8UX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5204+
5205+
# Generic WLE4CBUx
5206+
GenWL.menu.pnum.GENERIC_WLE4CBUX=Generic WLE4CBUx
5207+
GenWL.menu.pnum.GENERIC_WLE4CBUX.upload.maximum_size=131072
5208+
GenWL.menu.pnum.GENERIC_WLE4CBUX.upload.maximum_data_size=49152
5209+
GenWL.menu.pnum.GENERIC_WLE4CBUX.build.board=GENERIC_WLE4CBUX
5210+
GenWL.menu.pnum.GENERIC_WLE4CBUX.build.product_line=STM32WLE4xx
5211+
GenWL.menu.pnum.GENERIC_WLE4CBUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5212+
5213+
# Generic WLE4CCUx
5214+
GenWL.menu.pnum.GENERIC_WLE4CCUX=Generic WLE4CCUx
5215+
GenWL.menu.pnum.GENERIC_WLE4CCUX.upload.maximum_size=262144
5216+
GenWL.menu.pnum.GENERIC_WLE4CCUX.upload.maximum_data_size=65536
5217+
GenWL.menu.pnum.GENERIC_WLE4CCUX.build.board=GENERIC_WLE4CCUX
5218+
GenWL.menu.pnum.GENERIC_WLE4CCUX.build.product_line=STM32WLE4xx
5219+
GenWL.menu.pnum.GENERIC_WLE4CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5220+
51725221
# Generic WLE4J8Ix
51735222
GenWL.menu.pnum.GENERIC_WLE4J8IX=Generic WLE4J8Ix
51745223
GenWL.menu.pnum.GENERIC_WLE4J8IX.upload.maximum_size=65536
@@ -5193,6 +5242,30 @@ GenWL.menu.pnum.GENERIC_WLE4JCIX.build.board=GENERIC_WLE4JCIX
51935242
GenWL.menu.pnum.GENERIC_WLE4JCIX.build.product_line=STM32WLE4xx
51945243
GenWL.menu.pnum.GENERIC_WLE4JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
51955244

5245+
# Generic WLE5C8Ux
5246+
GenWL.menu.pnum.GENERIC_WLE5C8UX=Generic WLE5C8Ux
5247+
GenWL.menu.pnum.GENERIC_WLE5C8UX.upload.maximum_size=65536
5248+
GenWL.menu.pnum.GENERIC_WLE5C8UX.upload.maximum_data_size=20480
5249+
GenWL.menu.pnum.GENERIC_WLE5C8UX.build.board=GENERIC_WLE5C8UX
5250+
GenWL.menu.pnum.GENERIC_WLE5C8UX.build.product_line=STM32WLE5xx
5251+
GenWL.menu.pnum.GENERIC_WLE5C8UX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5252+
5253+
# Generic WLE5CBUx
5254+
GenWL.menu.pnum.GENERIC_WLE5CBUX=Generic WLE5CBUx
5255+
GenWL.menu.pnum.GENERIC_WLE5CBUX.upload.maximum_size=131072
5256+
GenWL.menu.pnum.GENERIC_WLE5CBUX.upload.maximum_data_size=49152
5257+
GenWL.menu.pnum.GENERIC_WLE5CBUX.build.board=GENERIC_WLE5CBUX
5258+
GenWL.menu.pnum.GENERIC_WLE5CBUX.build.product_line=STM32WLE5xx
5259+
GenWL.menu.pnum.GENERIC_WLE5CBUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5260+
5261+
# Generic WLE5CCUx
5262+
GenWL.menu.pnum.GENERIC_WLE5CCUX=Generic WLE5CCUx
5263+
GenWL.menu.pnum.GENERIC_WLE5CCUX.upload.maximum_size=262144
5264+
GenWL.menu.pnum.GENERIC_WLE5CCUX.upload.maximum_data_size=65536
5265+
GenWL.menu.pnum.GENERIC_WLE5CCUX.build.board=GENERIC_WLE5CCUX
5266+
GenWL.menu.pnum.GENERIC_WLE5CCUX.build.product_line=STM32WLE5xx
5267+
GenWL.menu.pnum.GENERIC_WLE5CCUX.build.variant=STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U
5268+
51965269
# Generic WLE5J8Ix
51975270
GenWL.menu.pnum.GENERIC_WLE5J8IX=Generic WLE5J8Ix
51985271
GenWL.menu.pnum.GENERIC_WLE5J8IX.upload.maximum_size=65536

variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/generic_clock.c

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,36 @@
2323
*/
2424
WEAK void SystemClock_Config(void)
2525
{
26-
/* SystemClock_Config can be generated by STM32CubeMX */
27-
#warning "SystemClock_Config() is empty. Default clock at reset is used."
26+
RCC_OscInitTypeDef RCC_OscInitStruct = {};
27+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
28+
29+
/** Configure the main internal regulator output voltage
30+
*/
31+
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
32+
/** Initializes the CPU, AHB and APB busses clocks
33+
*/
34+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
35+
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
36+
RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
37+
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11;
38+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
39+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
40+
Error_Handler();
41+
}
42+
/** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
43+
*/
44+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3 | RCC_CLOCKTYPE_HCLK
45+
| RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1
46+
| RCC_CLOCKTYPE_PCLK2;
47+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
48+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
49+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
50+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
51+
RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
52+
53+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
54+
Error_Handler();
55+
}
2856
}
2957

3058
#endif /* ARDUINO_GENERIC_* */
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
/*
2+
******************************************************************************
3+
**
4+
** File : ldscript.ld
5+
**
6+
** Author : STM32CubeIDE
7+
**
8+
** Abstract : Linker script for STM32WL55xC Device
9+
** 256Kbytes FLASH
10+
** 64Kbytes RAM
11+
**
12+
** Set heap size, stack size and stack location according
13+
** to application requirements.
14+
**
15+
** Set memory bank area and size if external memory is used.
16+
**
17+
** Target : STMicroelectronics STM32
18+
**
19+
** Distribution: The file is distributed as is without any warranty
20+
** of any kind.
21+
**
22+
*****************************************************************************
23+
** @attention
24+
**
25+
** <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
26+
** All rights reserved.</center></h2>
27+
**
28+
** This software component is licensed by ST under BSD 3-Clause license,
29+
** the "License"; You may not use this file except in compliance with the
30+
** License. You may obtain a copy of the License at:
31+
** opensource.org/licenses/BSD-3-Clause
32+
**
33+
*****************************************************************************
34+
*/
35+
36+
/* Entry Point */
37+
ENTRY(Reset_Handler)
38+
39+
/* Highest address of the user mode stack */
40+
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
41+
42+
_Min_Heap_Size = 0x200 ; /* required amount of heap */
43+
_Min_Stack_Size = 0x400 ; /* required amount of stack */
44+
45+
/* Memories definition */
46+
MEMORY
47+
{
48+
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE
49+
FLASH (rx) : ORIGIN = 0x08000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET
50+
}
51+
52+
/* Sections */
53+
SECTIONS
54+
{
55+
/* The startup code into "FLASH" Rom type memory */
56+
.isr_vector :
57+
{
58+
. = ALIGN(4);
59+
KEEP(*(.isr_vector)) /* Startup code */
60+
. = ALIGN(4);
61+
} >FLASH
62+
63+
/* The program code and other data into "FLASH" Rom type memory */
64+
.text :
65+
{
66+
. = ALIGN(4);
67+
*(.text) /* .text sections (code) */
68+
*(.text*) /* .text* sections (code) */
69+
*(.glue_7) /* glue arm to thumb code */
70+
*(.glue_7t) /* glue thumb to arm code */
71+
*(.eh_frame)
72+
73+
KEEP (*(.init))
74+
KEEP (*(.fini))
75+
76+
. = ALIGN(4);
77+
_etext = .; /* define a global symbols at end of code */
78+
} >FLASH
79+
80+
/* Constant data into "FLASH" Rom type memory */
81+
.rodata :
82+
{
83+
. = ALIGN(4);
84+
*(.rodata) /* .rodata sections (constants, strings, etc.) */
85+
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
86+
. = ALIGN(4);
87+
} >FLASH
88+
89+
.ARM.extab : {
90+
. = ALIGN(4);
91+
*(.ARM.extab* .gnu.linkonce.armextab.*)
92+
. = ALIGN(4);
93+
} >FLASH
94+
95+
.ARM : {
96+
. = ALIGN(4);
97+
__exidx_start = .;
98+
*(.ARM.exidx*)
99+
__exidx_end = .;
100+
. = ALIGN(4);
101+
} >FLASH
102+
103+
.preinit_array :
104+
{
105+
. = ALIGN(4);
106+
PROVIDE_HIDDEN (__preinit_array_start = .);
107+
KEEP (*(.preinit_array*))
108+
PROVIDE_HIDDEN (__preinit_array_end = .);
109+
. = ALIGN(4);
110+
} >FLASH
111+
112+
.init_array :
113+
{
114+
. = ALIGN(4);
115+
PROVIDE_HIDDEN (__init_array_start = .);
116+
KEEP (*(SORT(.init_array.*)))
117+
KEEP (*(.init_array*))
118+
PROVIDE_HIDDEN (__init_array_end = .);
119+
. = ALIGN(4);
120+
} >FLASH
121+
122+
.fini_array :
123+
{
124+
. = ALIGN(4);
125+
PROVIDE_HIDDEN (__fini_array_start = .);
126+
KEEP (*(SORT(.fini_array.*)))
127+
KEEP (*(.fini_array*))
128+
PROVIDE_HIDDEN (__fini_array_end = .);
129+
. = ALIGN(4);
130+
} >FLASH
131+
132+
/* Used by the startup to initialize data */
133+
_sidata = LOADADDR(.data);
134+
135+
/* Initialized data sections into "RAM" Ram type memory */
136+
.data :
137+
{
138+
. = ALIGN(4);
139+
_sdata = .; /* create a global symbol at data start */
140+
*(.data) /* .data sections */
141+
*(.data*) /* .data* sections */
142+
*(.RamFunc) /* .RamFunc sections */
143+
*(.RamFunc*) /* .RamFunc* sections */
144+
145+
. = ALIGN(4);
146+
_edata = .; /* define a global symbol at data end */
147+
148+
} >RAM AT> FLASH
149+
150+
/* Uninitialized data section into "RAM" Ram type memory */
151+
. = ALIGN(4);
152+
.bss :
153+
{
154+
/* This is used by the startup in order to initialize the .bss section */
155+
_sbss = .; /* define a global symbol at bss start */
156+
__bss_start__ = _sbss;
157+
*(.bss)
158+
*(.bss*)
159+
*(COMMON)
160+
161+
. = ALIGN(4);
162+
_ebss = .; /* define a global symbol at bss end */
163+
__bss_end__ = _ebss;
164+
} >RAM
165+
166+
/* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
167+
._user_heap_stack :
168+
{
169+
. = ALIGN(8);
170+
PROVIDE ( end = . );
171+
PROVIDE ( _end = . );
172+
. = . + _Min_Heap_Size;
173+
. = . + _Min_Stack_Size;
174+
. = ALIGN(8);
175+
} >RAM
176+
177+
/* Remove information from the compiler libraries */
178+
/DISCARD/ :
179+
{
180+
libc.a ( * )
181+
libm.a ( * )
182+
libgcc.a ( * )
183+
}
184+
185+
.ARM.attributes 0 : { *(.ARM.attributes) }
186+
}

0 commit comments

Comments
 (0)