I’ve been able to get a test blink working on a Nucleo-L412KB (that’s the 32-pin variant, not the 64-pin Nucleo’s). But it took a little tinkering.
First, the default linker script can’t be used, because it sets the stack at 64K, whereas the L412 has 40K max. I changed _estack in framework-stm32cube/platformio/ldscripts/STM32L412KB_DEFAULT.ld
to work around this.
Next, stlink does not recognise the L412, which has ID 0x464. This was fixed by building a patched version of texane/stlink on GitHub:
$ git diff
diff --git a/src/chipid.c b/src/chipid.c
index 6f93af1..ca6e815 100644
--- a/src/chipid.c
+++ b/src/chipid.c
@@ -507,6 +507,19 @@ static const struct stlink_chipid_params devices[] = {
.bootrom_base = 0x1ff00000,
.bootrom_size = 0x2000
},
+ {
+ // STM32L41X
+ .chip_id = STLINK_CHIPID_STM32_L41X,
+ .description = "L412 device",
+ .flash_type = STLINK_FLASH_TYPE_L4,
+ .flash_size_reg = 0x1fff75e0, // "Flash size data register" (sec 49.2, page 1809)
+ .flash_pagesize = 0x800, // Page erase (2 Kbyte) (sec 3.2, page 93)
+ // SRAM1 is 32k at 0x20000000
+ // SRAM2 is 8k at 0x20008000
+ .sram_size = 0x0A000,
+ .bootrom_base = 0x1fff0000,
+ .bootrom_size = 0x7000
+ },
{
// unknown
.chip_id = STLINK_CHIPID_UNKNOWN,
diff --git a/src/flash_loader.c b/src/flash_loader.c
index 7684680..f2e6367 100644
--- a/src/flash_loader.c
+++ b/src/flash_loader.c
@@ -306,6 +306,7 @@ int stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t*
loader_code = loader_code_stm32f0;
loader_size = sizeof(loader_code_stm32f0);
} else if ((sl->chip_id == STLINK_CHIPID_STM32_L4) ||
+ (sl->chip_id == STLINK_CHIPID_STM32_L41X) ||
(sl->chip_id == STLINK_CHIPID_STM32_L43X) ||
(sl->chip_id == STLINK_CHIPID_STM32_L46X) ||
(sl->chip_id == STLINK_CHIPID_STM32_L4RX) ||
The openocd scripts also don’t appear to support the L412 (yet, I hope). The workaround for now (if you don’t patch stlink) is to use mbed
as upload protocol.
UPDATE: I’ve also submitted a board file for the Nucleo-L412KB
- see Board file for STM32L412KB · Issue #171 · platformio/platform-ststm32 · GitHub
UPDATE # 2: also reported as stlink issue - see Add support for STM32L412 · Issue #754 · stlink-org/stlink · GitHub