Skip to content

Commit

Permalink
boards/nucleo-c031c6 initial add
Browse files Browse the repository at this point in the history
  • Loading branch information
Jason Parker committed Jan 29, 2024
1 parent b5d72d8 commit 765c7ec
Show file tree
Hide file tree
Showing 233 changed files with 354 additions and 991 deletions.
2 changes: 1 addition & 1 deletion boards/common/nucleo/include/board_nucleo.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ extern "C" {
#define XTIMER_WIDTH (16)
#endif

#if defined(CPU_FAM_STM32G0)
#if defined(CPU_FAM_STM32G0) || defined(CPU_FAM_STM32C0)
#define XTIMER_WIDTH (16)
#endif

Expand Down
3 changes: 3 additions & 0 deletions boards/common/stm32/dist/stm32c0.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
source [find target/stm32c0x.cfg]
reset_config srst_only
$_TARGETNAME configure -rtos auto
6 changes: 3 additions & 3 deletions boards/common/stm32/include/cfg_i2c1_pb8_pb9.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ static const i2c_conf_t i2c_config[] = {
#if CPU_FAM_STM32F0
.scl_af = GPIO_AF1,
.sda_af = GPIO_AF1,
#elif CPU_FAM_STM32G0
#elif CPU_FAM_STM32G0 || CPU_FAM_STM32C0
.scl_af = GPIO_AF6,
.sda_af = GPIO_AF6,
#else
Expand All @@ -58,7 +58,7 @@ static const i2c_conf_t i2c_config[] = {
.rcc_mask = RCC_APB1ENR1_I2C1EN,
.rcc_sw_mask = RCC_CCIPR1_I2C1SEL_1, /* HSI (16 MHz) */
.irqn = I2C1_ER_IRQn,
#elif CPU_FAM_STM32G0
#elif CPU_FAM_STM32G0 || CPU_FAM_STM32C0
.rcc_mask = RCC_APBENR1_I2C1EN,
.rcc_sw_mask = RCC_CCIPR_I2C1SEL_1, /* HSI (16 MHz) */
.irqn = I2C1_IRQn,
Expand All @@ -80,7 +80,7 @@ static const i2c_conf_t i2c_config[] = {
#define I2C_0_ISR isr_i2c1_ev
#elif CPU_FAM_STM32L4 || CPU_FAM_STM32F7 || CPU_FAM_STM32WB || CPU_FAM_STM32L5
#define I2C_0_ISR isr_i2c1_er
#elif CPU_FAM_STM32F0 || CPU_FAM_STM32L0 || CPU_FAM_STM32G0
#elif CPU_FAM_STM32F0 || CPU_FAM_STM32L0 || CPU_FAM_STM32G0 || CPU_FAM_STM32C0
#define I2C_0_ISR isr_i2c1
#endif

Expand Down
28 changes: 28 additions & 0 deletions boards/nucleo-c031c6/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright (C) 2024 BISSELL Homecare, Inc.
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
#

config BOARD
default "nucleo-c031c6" if BOARD_NUCLEO_C031C6

config BOARD_NUCLEO_C031C6
bool
default y
select BOARD_COMMON_NUCLEO64
select CPU_MODEL_STM32C031C6

# Put defined MCU peripherals here (in alphabetical order)
select HAS_PERIPH_ADC
select HAS_PERIPH_I2C
select HAS_PERIPH_RTT
select HAS_PERIPH_SPI
select HAS_PERIPH_TIMER
select HAS_PERIPH_UART

# Put other features for this board (in alphabetical order)
select HAS_RIOTBOOT

source "$(RIOTBOARD)/common/nucleo64/Kconfig"
4 changes: 4 additions & 0 deletions boards/nucleo-c031c6/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
MODULE = board
DIRS = $(RIOTBOARD)/common/nucleo

include $(RIOTBASE)/Makefile.base
1 change: 1 addition & 0 deletions boards/nucleo-c031c6/Makefile.dep
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include $(RIOTBOARD)/common/nucleo64/Makefile.dep
15 changes: 15 additions & 0 deletions boards/nucleo-c031c6/Makefile.features
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
CPU = stm32
CPU_MODEL = stm32c031c6

# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += periph_adc
FEATURES_PROVIDED += periph_i2c
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart

# Put other features for this board (in alphabetical order)
FEATURES_PROVIDED += riotboot

# load the common Makefile.features for Nucleo boards
include $(RIOTBOARD)/common/nucleo64/Makefile.features
2 changes: 2 additions & 0 deletions boards/nucleo-c031c6/Makefile.include
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# load the common Makefile.include for Nucleo boards
include $(RIOTBOARD)/common/nucleo64/Makefile.include
26 changes: 26 additions & 0 deletions boards/nucleo-c031c6/doc.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
@defgroup boards_nucleo-c031c6 STM32 Nucleo-C031C6
@ingroup boards_common_nucleo64
@brief Support for the STM32 Nucleo-C031C6

## Overview

The Nucleo-C031C6 is a board from ST's Nucleo family supporting a ARM
Cortex-M0+ STM32C031C6 microcontroller with 12KiB of RAM and 32KiB of Flash.

## Flashing the Board Using ST-LINK Removable Media

On-board ST-LINK programmer provides via composite USB device removable media.
Copying the HEX file causes reprogramming of the board. This task
could be performed manually; however, the cpy2remed (copy to removable
media) PROGRAMMER script does this automatically. To program board in
this manner, use the command:

```
make BOARD=nucleo-c031c6 PROGRAMMER=cpy2remed flash
```

@note This PROGRAMMER was tested using ST-LINK firmware 2.37.26. Firmware updates
could be found on [this STM webpage](https://www.st.com/en/development-tools/stsw-link007.html).

*/
157 changes: 157 additions & 0 deletions boards/nucleo-c031c6/include/periph_conf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
/*
* Copyright (C) 2024 BISSELL Homecare, Inc.
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/

/**
* @ingroup boards_nucleo-c031c6
* @{
*
* @file
* @brief Peripheral MCU configuration for the nucleo-c031c6 board
*
* @author Jason Parker <[email protected]>
*/

#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H

/* Add specific clock configuration (HSE, LSE) for this board here */
#ifndef CONFIG_BOARD_HAS_LSE
#define CONFIG_BOARD_HAS_LSE 1
#endif

#include "clk_conf.h"
#include "cfg_i2c1_pb8_pb9.h"
#include "cfg_rtt_default.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
* @name Timer configuration
* @{
*/
static const timer_conf_t timer_config[] = {
{
.dev = TIM3,
.max = 0x0000ffff,
.rcc_mask = RCC_APBENR1_TIM3EN,
.bus = APB1,
.irqn = TIM3_IRQn
}
};

#define TIMER_0_ISR isr_tim3

#define TIMER_NUMOF ARRAY_SIZE(timer_config)
/** @} */

/**
* @name UART configuration
* @{
*/
static const uart_conf_t uart_config[] = {
{
.dev = USART2,
.rcc_mask = RCC_APBENR1_USART2EN,
.rx_pin = GPIO_PIN(PORT_A, 3),
.tx_pin = GPIO_PIN(PORT_A, 2),
.rx_af = GPIO_AF1,
.tx_af = GPIO_AF1,
.bus = APB1,
.irqn = USART2_IRQn,
},
{ /* Arduino pinout on D0/D1 */
.dev = USART1,
.rcc_mask = RCC_APBENR2_USART1EN,
.rx_pin = GPIO_PIN(PORT_B, 7),
.tx_pin = GPIO_PIN(PORT_B, 6),
.rx_af = GPIO_AF0,
.tx_af = GPIO_AF0,
.bus = APB12, //?
.irqn = USART1_IRQn,
},
};

#define UART_0_ISR (isr_usart2)
#define UART_1_ISR (isr_usart1)

#define UART_NUMOF ARRAY_SIZE(uart_config)
/** @} */

/**
* @name ADC configuration
*
* Note that we do not configure all ADC channels,
* and not in the STM32G071 order. Instead, we
* just define 6 ADC channels, for the Nucleo
* Arduino header pins A0-A5 and the internal VBAT channel.
*
* To find appropriate device and channel find in the
* board manual, table showing pin assignments and
* information about ADC - a text similar to ARD_A[N]_IN[X],
* where:
* [N] - describes analog pin number,
* [X] - describes used channel - indexed from 1,
* for example ARD_A5_IN16 is channel 16
*
* For Nucleo-G071RB this information is in board manual,
* Table 12, page 30.
*
* VBAT is connected to an internal input and voltage divider
* is used, so that only 1/3 of the actual VBAT is measured. This
* allows for a supply voltage higher than the reference voltage.
*
* For Nucleo-G071RB more information is provided in MCU datasheet,
* in section 3.14.3 - Vbat battery voltage monitoring, page 26.
* @{
*/
static const adc_conf_t adc_config[] = {
{ .pin = GPIO_PIN(PORT_A, 0), .dev = 0, .chan = 0 }, /* ARD_A0_IN0 */
{ .pin = GPIO_PIN(PORT_A, 1), .dev = 0, .chan = 1 }, /* ARD_A1_IN1 */
{ .pin = GPIO_PIN(PORT_A, 4), .dev = 0, .chan = 4 }, /* ARD_A2_IN4 */
{ .pin = GPIO_PIN(PORT_B, 1), .dev = 0, .chan = 9 }, /* ARD_A3_IN9 */
{ .pin = GPIO_PIN(PORT_B, 11), .dev = 0, .chan = 15 }, /* ARD_A4_IN15 */
{ .pin = GPIO_PIN(PORT_B, 12), .dev = 0, .chan = 16 }, /* ARD_A5_IN16 */
{ .pin = GPIO_UNDEF, .dev = 0, .chan = 14}, /* VBAT */
};

#define VBAT_ADC ADC_LINE(6) /**< VBAT ADC line */
#define ADC_NUMOF ARRAY_SIZE(adc_config)
/** @} */

/**
* @name SPI configuration
* @{
*/
static const spi_conf_t spi_config[] = {
{
.dev = SPI1,
.mosi_pin = GPIO_PIN(PORT_A, 7), /* Arduino D11 */
.miso_pin = GPIO_PIN(PORT_A, 6), /* Arduino D12 */
.sclk_pin = GPIO_PIN(PORT_A, 5), /* Arduino D13 */
.cs_pin = GPIO_UNDEF,
.mosi_af = GPIO_AF0,
.miso_af = GPIO_AF0,
.sclk_af = GPIO_AF0,
.cs_af = GPIO_AF0,
.rccmask = RCC_APBENR2_SPI1EN,
.apbbus = APB12,
},
};

#define SPI_NUMOF ARRAY_SIZE(spi_config)
/** @} */

#ifdef __cplusplus
}
#endif

#endif /* PERIPH_CONF_H */
/** @} */
1 change: 1 addition & 0 deletions examples/asymcute_mqttsn/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ BOARD_INSUFFICIENT_MEMORY := \
nrf51dk \
nrf51dongle \
nrf6310 \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/benchmark_udp/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ BOARD_INSUFFICIENT_MEMORY := \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/cord_ep/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ BOARD_INSUFFICIENT_MEMORY := \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/cord_epsim/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ BOARD_INSUFFICIENT_MEMORY := \
i-nucleo-lrwan1 \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/cord_lc/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ BOARD_INSUFFICIENT_MEMORY := \
im880b \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/dtls-echo/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ BOARD_INSUFFICIENT_MEMORY := \
msb-430h \
nrf51dongle \
nrf6310 \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/dtls-sock/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ BOARD_INSUFFICIENT_MEMORY := \
msb-430h \
nrf51dongle \
nrf6310 \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/dtls-wolfssl/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ BOARD_INSUFFICIENT_MEMORY := \
microbit \
nrf51dongle \
nrf6310 \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/emcute_mqttsn/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ BOARD_INSUFFICIENT_MEMORY := \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/gcoap/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ BOARD_INSUFFICIENT_MEMORY := \
i-nucleo-lrwan1 \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/gcoap_block_server/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ BOARD_INSUFFICIENT_MEMORY := \
m1284p \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/gcoap_dtls/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ BOARD_INSUFFICIENT_MEMORY := \
msb-430h \
nrf51dongle \
nrf6310 \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/gcoap_fileserver/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ BOARD_INSUFFICIENT_MEMORY := \
i-nucleo-lrwan1 \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/gnrc_border_router/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ BOARD_INSUFFICIENT_MEMORY := \
nrf51dk \
nrf51dongle \
nrf6310 \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
1 change: 1 addition & 0 deletions examples/gnrc_networking/Makefile.ci
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ BOARD_INSUFFICIENT_MEMORY := \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-c031c6 \
nucleo-f030r8 \
nucleo-f031k6 \
nucleo-f042k6 \
Expand Down
Loading

0 comments on commit 765c7ec

Please sign in to comment.