summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryn386 <wf.yn386@gmail.com>2022-09-19 17:57:27 +0900
committerDamien George <damien@micropython.org>2022-09-25 23:56:41 +1000
commite6d351318746495bf88d2c4bd7cbd81e94a2290e (patch)
treea342f33081b045455f5f940bc567e20213c25743
parent427d72667f23ef8758fbfd2352dd28ba5565644a (diff)
stm32/boards/NUCLEO_L152RE: Add NUCLEO-L152RE board support.
This change adds NUCLEO-L152RE support to the STM32 port. NUCLEO-L152RE: https://www.st.com/en/evaluation-tools/nucleo-l152re.html This board use STM32L152RE: https://www.st.com/en/microcontrollers-microprocessors/stm32l152re.html
-rw-r--r--ports/stm32/boards/NUCLEO_L152RE/board.json15
-rw-r--r--ports/stm32/boards/NUCLEO_L152RE/deploy.md31
-rw-r--r--ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.h74
-rw-r--r--ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.mk4
-rw-r--r--ports/stm32/boards/NUCLEO_L152RE/pins.csv76
-rw-r--r--ports/stm32/boards/NUCLEO_L152RE/stm32l1xx_hal_conf.h10
6 files changed, 210 insertions, 0 deletions
diff --git a/ports/stm32/boards/NUCLEO_L152RE/board.json b/ports/stm32/boards/NUCLEO_L152RE/board.json
new file mode 100644
index 000000000..7b3427693
--- /dev/null
+++ b/ports/stm32/boards/NUCLEO_L152RE/board.json
@@ -0,0 +1,15 @@
+{
+ "deploy": [
+ "./deploy.md"
+ ],
+ "docs": "",
+ "features": [],
+ "images": [
+ "nucleo_l152re.jpg"
+ ],
+ "mcu": "stm32l1",
+ "product": "Nucleo L152RE",
+ "thumbnail": "",
+ "url": "",
+ "vendor": "ST Microelectronics"
+}
diff --git a/ports/stm32/boards/NUCLEO_L152RE/deploy.md b/ports/stm32/boards/NUCLEO_L152RE/deploy.md
new file mode 100644
index 000000000..0323981d2
--- /dev/null
+++ b/ports/stm32/boards/NUCLEO_L152RE/deploy.md
@@ -0,0 +1,31 @@
+### STM32 via ST-Link
+
+Nucleo and Discovery boards typically include a built-in ST-Link programmer.
+
+A `.bin` or `.hex` file can be flashed using [st-flash](https://github.com/stlink-org/stlink).
+
+```bash
+# Optional erase to clear existing filesystem.
+st-flash erase
+
+# Flash .bin
+st-flash write firmware.bin 0x08000000
+# or, flash .hex
+st-flash --format ihex write firmware.hex
+```
+
+A `.hex` file can be flashed using [STM32 Cube Programmer](https://www.st.com/en/development-tools/stm32cubeprog.html).
+
+```bash
+STM32_Programmer.sh -c port=SWD mode=UR dLPM -d firmware.hex -v -hardRst
+```
+
+### STM32 via DFU
+
+Boards with USB support can also be programmed via the ST DFU bootloader, using e.g. [dfu-util](http://dfu-util.sourceforge.net/) or [pydfu.py](https://github.com/micropython/micropython/blob/master/tools/pydfu.py).
+
+To enter the bootloader the `BOOT0` pin can be connected to `VCC` during reset, or you can use `machine.bootloader()` from the MicroPython REPL.
+
+```bash
+dfu-util --alt 0 -D firmware.dfu
+```
diff --git a/ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.h b/ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.h
new file mode 100644
index 000000000..360995589
--- /dev/null
+++ b/ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.h
@@ -0,0 +1,74 @@
+#define MICROPY_HW_BOARD_NAME "NUCLEO-L152RE"
+#define MICROPY_HW_MCU_NAME "STM32L152xE"
+
+#define MICROPY_HW_HAS_SWITCH (1)
+#define MICROPY_HW_ENABLE_RTC (1)
+// This board has an external 32kHz crystal
+#define MICROPY_HW_RTC_USE_LSE (1)
+#define MICROPY_HW_ENABLE_SERVO (1)
+#define MICROPY_HW_ENABLE_DAC (1)
+
+// HSE is 8MHz, HSI is 16MHz CPU freq set to 32MHz
+// Default source for the clock is HSI.
+// For revisions of the board greater than C-01, HSE can be used as a
+// clock source by removing the #define MICROPY_HW_CLK_USE_HSE line
+#define MICROPY_HW_CLK_USE_HSI (1)
+
+#if MICROPY_HW_CLK_USE_HSI
+#define MICROPY_HW_CLK_PLLMUL (RCC_CFGR_PLLMUL6)
+#define MICROPY_HW_CLK_PLLDIV (RCC_CFGR_PLLDIV3)
+#else
+#define MICROPY_HW_CLK_PLLMUL (RCC_CFGR_PLLMUL12)
+#define MICROPY_HW_CLK_PLLDIV (RCC_CFGR_PLLDIV3)
+#endif
+
+// UART config
+#define MICROPY_HW_UART1_TX (pin_A9)
+#define MICROPY_HW_UART1_RX (pin_A10)
+#define MICROPY_HW_UART2_TX (pin_A2)
+#define MICROPY_HW_UART2_RX (pin_A3)
+#define MICROPY_HW_UART3_TX (pin_B10)
+#define MICROPY_HW_UART3_RX (pin_B11)
+#define MICROPY_HW_UART4_TX (pin_C10)
+#define MICROPY_HW_UART4_RX (pin_C11)
+#define MICROPY_HW_UART5_TX (pin_C12)
+#define MICROPY_HW_UART5_RX (pin_D2)
+// UART 2 connects to the STM32F103 (STLINK) on the Nucleo board
+// and this is exposed as a USB Serial port.
+#define MICROPY_HW_UART_REPL PYB_UART_2
+#define MICROPY_HW_UART_REPL_BAUD 115200
+
+// I2C buses
+#define MICROPY_HW_I2C1_SCL (pin_B8) // Arduino D15, pin 3 on CN10
+#define MICROPY_HW_I2C1_SDA (pin_B9) // D14, pin 5 on CN10
+#define MICROPY_HW_I2C2_SCL (pin_B10) // Arduino D6, pin 25 on CN10
+#define MICROPY_HW_I2C2_SDA (pin_B11) // Arduino D3, pin 31 on CN10
+
+// SPI buses
+#define MICROPY_HW_SPI1_NSS (pin_A15) // pin 17 on CN7
+#define MICROPY_HW_SPI1_SCK (pin_A5) // Arduino D13, pin 11 on CN10
+#define MICROPY_HW_SPI1_MISO (pin_A6) // Arduino D12, pin 13 on CN10
+#define MICROPY_HW_SPI1_MOSI (pin_A7) // Arduino D11, pin 15 on CN10
+
+#define MICROPY_HW_SPI2_NSS (pin_B12) // pin 16 on CN10
+#define MICROPY_HW_SPI2_SCK (pin_B13) // pin 30 on CN10
+#define MICROPY_HW_SPI2_MISO (pin_B14) // pin 28 on CN10
+#define MICROPY_HW_SPI2_MOSI (pin_B15) // pin 26 on CN10
+
+#define MICROPY_HW_SPI3_NSS (pin_A4) // Arduino A2, pin 32 on CN7
+#define MICROPY_HW_SPI3_SCK (pin_C10) // Arduino D3, pin 31 on CN10
+#define MICROPY_HW_SPI3_MISO (pin_C11) // Arduino D5, pin 27 on CN10
+#define MICROPY_HW_SPI3_MOSI (pin_C12) // Arduino D4, pin 29 on CN10
+
+// USRSW is pulled low. Pressing the button makes the input go high.
+#define MICROPY_HW_USRSW_PIN (pin_C13)
+#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
+#define MICROPY_HW_USRSW_EXTI_MODE (GPIO_MODE_IT_FALLING)
+#define MICROPY_HW_USRSW_PRESSED (0)
+
+// LEDs
+#define MICROPY_HW_LED1 (pin_A5) // Green LD2 LED on Nucleo
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
+
+#define MICROPY_HW_FLASH_LATENCY FLASH_LATENCY_1
diff --git a/ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.mk b/ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.mk
new file mode 100644
index 000000000..a62a775ac
--- /dev/null
+++ b/ports/stm32/boards/NUCLEO_L152RE/mpconfigboard.mk
@@ -0,0 +1,4 @@
+MCU_SERIES = l1
+CMSIS_MCU = STM32L152xE
+AF_FILE = boards/stm32l152_af.csv
+LD_FILES = boards/stm32l152xe.ld boards/common_basic.ld
diff --git a/ports/stm32/boards/NUCLEO_L152RE/pins.csv b/ports/stm32/boards/NUCLEO_L152RE/pins.csv
new file mode 100644
index 000000000..035d933f5
--- /dev/null
+++ b/ports/stm32/boards/NUCLEO_L152RE/pins.csv
@@ -0,0 +1,76 @@
+D0,PA3
+D1,PA2
+D2,PA10
+D3,PB3
+D4,PB5
+D5,PB4
+D6,PB10
+D7,PA8
+D8,PA9
+D9,PC7
+D10,PB6
+D11,PA7
+D12,PA6
+D13,PA5
+D14,PB9
+D15,PB8
+A0,PA0
+A1,PA1
+A2,PA4
+A3,PB0
+A4,PC1
+A5,PC0
+PA0,PA0
+PA1,PA1
+PA2,PA2
+PA3,PA3
+PA4,PA4
+PA5,PA5
+PA6,PA6
+PA7,PA7
+PA8,PA8
+PA9,PA9
+PA10,PA10
+PA11,PA11
+PA12,PA12
+PA15,PA15
+PB0,PB0
+PB1,PB1
+PB2,PB2
+PB3,PB3
+PB4,PB4
+PB5,PB5
+PB6,PB6
+PB7,PB7
+PB8,PB8
+PB9,PB9
+PB10,PB10
+PB11,PB11
+PB12,PB12
+PB13,PB13
+PB14,PB14
+PB15,PB15
+PC0,PC0
+PC1,PC1
+PC2,PC2
+PC3,PC3
+PC4,PC4
+PC5,PC5
+PC6,PC6
+PC7,PC7
+PC8,PC8
+PC9,PC9
+PC10,PC10
+PC11,PC11
+PC12,PC12
+PC13,PC13
+PC14,PC14
+PC15,PC15
+PD2,PD2
+PH0,PH0
+PH1,PH1
+LED_GREEN,PA5
+LED_ORANGE,PA5
+LED_RED,PA5
+LED_BLUE,PA4
+SW,PC13
diff --git a/ports/stm32/boards/NUCLEO_L152RE/stm32l1xx_hal_conf.h b/ports/stm32/boards/NUCLEO_L152RE/stm32l1xx_hal_conf.h
new file mode 100644
index 000000000..7ee8204cb
--- /dev/null
+++ b/ports/stm32/boards/NUCLEO_L152RE/stm32l1xx_hal_conf.h
@@ -0,0 +1,10 @@
+/* This file is part of the MicroPython project, http://micropython.org/
+ * The MIT License (MIT)
+ * Copyright (c) 2019 Damien P. George
+ */
+#ifndef MICROPY_INCLUDED_STM32L1XX_HAL_CONF_H
+#define MICROPY_INCLUDED_STM32L1XX_HAL_CONF_H
+
+#include "boards/stm32l1xx_hal_conf_base.h"
+
+#endif // MICROPY_INCLUDED_STM32L1XX_HAL_CONF_H