Skip to content
/ mcu-cpp Public

One C++ project for different microcontrollers

License

Notifications You must be signed in to change notification settings

yh-sb/mcu-cpp

Repository files navigation

mcu-cpp

Build

One C++ project for different microcontrollers types. Focusing on hardware abstraction, modularity, and ease of use. Cross-platform 🪟 🐧 🍎.

See examples.

Project structure

  • Drivers — hardware abstraction modules for various sensors and devices.
  • Peripherals - hardware abstraction interfaces to MCU hardware.
  • CMSIS / esp-idf / pico-sdk / ... — MCU-specific layers that should not be used directly in the User application.

How it looks in code

int main(int argc, char *argv[])
{
    periph::systick::init();
    
    // Green LED
    periph::gpio_stm32f4 green_led(periph::gpio_stm32f4::port::d, 12, periph::gpio::mode::digital_output, 1);
    
    // Init code to work with SD Card over SPI interface
    periph::gpio_stm32f4 mosi(periph::gpio_stm32f4::port::a, 7, periph::gpio::mode::alternate_function);
    periph::gpio_stm32f4 miso(periph::gpio_stm32f4::port::a, 6, periph::gpio::mode::alternate_function);
    periph::gpio_stm32f4 clk(periph::gpio_stm32f4::port::a, 5, periph::gpio::mode::alternate_function);
    periph::gpio_stm32f4 cs(periph::gpio_stm32f4::port::a, 4, periph::gpio::mode::digital_output, 1);
    periph::gpio_stm32f4 card_detect(periph::gpio_stm32f4::port::a, 3, periph::gpio::mode::digital_input, 1);
    periph::dma_stm32f4 spi1_read_dma(2, 0, 3, periph::dma_stm32f4::direction::periph_to_memory, 8);
    periph::dma_stm32f4 spi1_write_dma(2, 3, 3, periph::dma_stm32f4::direction::memory_to_periph, 8);
    periph::spi_stm32f4 spi1(1, 1000000, periph::spi::cpol::low, periph::spi::cpha::leading,
        periph::spi::bit_order::msb, spi1_write_dma, spi1_read_dma, mosi, miso, clk);
    
    drv::sd_spi sd_card(spi1, cs, &card_detect);

How to build

git clone --recursive https://github.com/yh-sb/mcu-cpp.git
cd mcu-cpp

# Default target is STM32F4
make

# To set up the project for a different MCU, choose one of the following options:
make <esp32s3|rp2040|stm32f0|stm32f1|stm32f4>
# This copies CMakeLists.txt and a basic example from ./examples to the root CMakeLists.txt and main.cpp

Other make commands:

  • make flash - Upload firmware to the target
  • make erase - Erase all memory on the target
  • make reset - Reset the target
  • Debug is available in VSCode or using make debug target to start GDB server

Requirements

Requirements for ESP32 project

  • GNU Xtensa esp-elf toolchain
  • Python
  • Install python dependencies:
    python -m pip install --upgrade pip
    python third_party/esp-idf/tools/idf_tools.py install-python-env
    python -m pip install -r third_party/esp-idf/tools/requirements/requirements.core.txt

MCU hardware peripherals support

Hardware STM32F0 STM32F1 STM32F4 RP2040 ESP32S3
ADC
DAC
EXTI
GPIO
I2C
PWM
RTC
SPI
Timer
UART
WDT

New peripherals may be added in future updates

Contributions, suggestions, and new ideas are always welcome!

About

One C++ project for different microcontrollers

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages