Skip to content

Commit

Permalink
stm32/boards/NUCLEO_L152RE: Add NUCLEO-L152RE board support.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
yn386 authored and dpgeorge committed Sep 25, 2022
1 parent 427d726 commit e6d3513
Show file tree
Hide file tree
Showing 6 changed files with 210 additions and 0 deletions.
15 changes: 15 additions & 0 deletions 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"
}
31 changes: 31 additions & 0 deletions 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
```
74 changes: 74 additions & 0 deletions 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
4 changes: 4 additions & 0 deletions 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
76 changes: 76 additions & 0 deletions 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
10 changes: 10 additions & 0 deletions 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

0 comments on commit e6d3513

Please sign in to comment.