STM32 Nucleo-F410RB¶
Support for the STM32 Nucleo-F410RB.
Overview¶
Not yet available upstream, see PR 6025
The Nucleo-F410 is a board from ST’s Nucleo family supporting a ARM Cortex-M4 STM32F410RB microcontroller with 32Kb of SRAM and 128Kb of ROM Flash.
Hardware¶
MCU¶
MCU | STM32F410RB |
---|---|
Family | ARM Cortex-M4 |
Vendor | ST Microelectronics |
RAM | 32Kb |
Flash | 128Kb |
Frequency | up to 100MHz |
FPU | yes |
Timers | 9 (2x watchdog, 1 SysTick, 4x 16-bit, 1x 32-bit [TIM2] and 1 low power timer) |
ADCs | 1x 12-bit |
UARTs | 3 |
SPIs | 3 |
I2Cs | 3 |
RTC | 1 |
Vcc | 2.0V - 3.6V |
Datasheet | Datasheet |
Reference Manual | Reference Manual |
Programming Manual | Programming Manual |
Board Manual | Board Manual |
MCU¶
MCU | STM32F410RB |
---|---|
Family | ARM Cortex-M4 |
Vendor | ST Microelectronics |
RAM | 32Kb |
Flash | 128Kb |
Frequency | up to 100MHz |
FPU | yes |
Timers | 9 (2x watchdog, 1 SysTick, 4x 16-bit, 1x 32-bit [TIM2] and 1 low power timer) |
ADCs | 1x 12-bit |
UARTs | 3 |
SPIs | 3 |
I2Cs | 3 |
RTC | 1 |
Vcc | 2.0V - 3.6V |
Datasheet | Datasheet |
Reference Manual | Reference Manual |
Programming Manual | Programming Manual |
Board Manual | Board Manual |
Implementation Status¶
Device | ID | Supported | Comments |
---|---|---|---|
MCU | STM32F410RB | partly | Energy saving modes not fully utilized |
Low-level driver | GPIO | yes | |
PWM | yes (no pin configured) | ||
UART | 2 UARTs | USART2 via STLink/USB or D0(RX)/D1(TX) and USART1 on PA10(RX)/PA9(TX) | |
I2C | 1 I2C | ||
SPI | 1 SPI | ||
USB | no | ||
Timer | 2 32 bit timers |
Flashing the device¶
The ST Nucleo-F410RB board includes an on-board ST-LINK V2 programmer. The easiest way to program the board is to use OpenOCD. You need OpenOCD in version 0.10 minimum. Once you have installed OpenOCD (look here for installation instructions), you can flash the board simply by typing
1 | make BOARD=nucleo-f410 flash
|
1 | make BOARD=nucleo-f410 debug
|
Supported Toolchains¶
For using the ST Nucleo-F410 board we strongly recommend the usage of the GNU Tools for ARM Embedded Processors toolchain.
-
CLOCK_CORECLOCK
¶ 1
(96000000U)
-
CLOCK_HSE
¶ 1
(8000000U)
-
CLOCK_LSE
¶ 1
(1)
-
CLOCK_AHB_DIV
¶ 1
RCC_CFGR_HPRE_DIV1
-
CLOCK_AHB
¶ 1
(CLOCK_CORECLOCK / 1)
-
CLOCK_APB1_DIV
¶ 1
RCC_CFGR_PPRE1_DIV2 /* max 50MHz */
-
CLOCK_APB1
¶ 1
(CLOCK_CORECLOCK / 2)
-
CLOCK_APB2_DIV
¶ 1
RCC_CFGR_PPRE2_DIV1 /* max 100MHz */
-
CLOCK_APB2
¶ 1
(CLOCK_CORECLOCK / 1)
-
CLOCK_PLL_M
¶ 1
(4)
-
CLOCK_PLL_N
¶ 1
(192)
-
CLOCK_PLL_P
¶ 1
(4)
-
CLOCK_PLL_Q
¶ 1
(8)
-
const timer_conf_t
timer_config
()¶ 1 2 3 4 5 6 7 8 9
= { { .dev = TIM5, .max = 0xffffffff, .rcc_mask = RCC_APB1ENR_TIM5EN, .bus = APB1, .irqn = TIM5_IRQn } }
-
TIMER_0_ISR
¶ 1
isr_tim5
-
TIMER_NUMOF
¶ 1
(sizeof(timer_config) / sizeof(timer_config[0]))
-
const uart_conf_t
uart_config
()¶
-
UART_0_ISR
¶ 1
(isr_usart2)
-
UART_0_DMA_ISR
¶ 1
(isr_dma1_stream6)
-
UART_1_ISR
¶ 1
(isr_usart1)
-
UART_1_DMA_ISR
¶ 1
(isr_dma2_stream7)
-
UART_2_ISR
¶ 1
(isr_usart6)
-
UART_2_DMA_ISR
¶ 1
(isr_dma2_stream7)
-
UART_NUMOF
¶ 1
(sizeof(uart_config) / sizeof(uart_config[0]))
-
const uint8_t
spi_divtable
()¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
= { { 7, 6, 5, 2, 1 }, { 7, 7, 6, 3, 2 } }
-
const spi_conf_t
spi_config
()¶ 1 2 3 4 5 6 7 8 9 10 11 12
= { { .dev = SPI1, .mosi_pin = GPIO_PIN(PORT_A, 7), .miso_pin = GPIO_PIN(PORT_A, 6), .sclk_pin = GPIO_PIN(PORT_A, 5), .cs_pin = GPIO_PIN(PORT_A, 4), .af = GPIO_AF5, .rccmask = RCC_APB2ENR_SPI1EN, .apbbus = APB2 } }
-
SPI_NUMOF
¶ 1
(sizeof(spi_config) / sizeof(spi_config[0]))
-
const i2c_conf_t
i2c_config
()¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14
= { { .dev = I2C1, .speed = I2C_SPEED_NORMAL, .scl_pin = GPIO_PIN(PORT_B, 8), .sda_pin = GPIO_PIN(PORT_B, 9), .scl_af = GPIO_AF4, .sda_af = GPIO_AF4, .bus = APB1, .rcc_mask = RCC_APB1ENR_I2C1EN, .clk = CLOCK_APB1, .irqn = I2C1_EV_IRQn } }
-
I2C_0_ISR
¶ 1
isr_i2c1_ev
-
I2C_NUMOF
¶ 1
(sizeof(i2c_config) / sizeof(i2c_config[0]))
-
ADC_NUMOF
¶ 1
(6U)
-
ADC_CONFIG
¶ 1 2 3 4 5 6 7 8
{ \ {GPIO_PIN(PORT_A, 0), 0, 0}, \ {GPIO_PIN(PORT_A, 1), 0, 1}, \ {GPIO_PIN(PORT_A, 4), 0, 4}, \ {GPIO_PIN(PORT_B, 0), 0, 8}, \ {GPIO_PIN(PORT_C, 1), 0, 11}, \ {GPIO_PIN(PORT_C, 0), 0, 10}, \ }