All Projects → fcayci → stm32f4-bare-metal

fcayci / stm32f4-bare-metal

Licence: MIT license
Bare metal STM32F4 examples for various modules

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to stm32f4-bare-metal

Ferret
Ferret is a free software lisp implementation for real time embedded control systems.
Stars: ✭ 878 (+1011.39%)
Mutual labels:  arm, bare-metal
Gnu Eprog
Embedded Programming with the GNU Toolchain
Stars: ✭ 230 (+191.14%)
Mutual labels:  arm, bare-metal
Atmel Software Package
Atmel Software Package
Stars: ✭ 81 (+2.53%)
Mutual labels:  arm, bare-metal
drone-cortexm
ARM® Cortex®-M platform crate for Drone, an Embedded Operating System.
Stars: ✭ 31 (-60.76%)
Mutual labels:  arm, bare-metal
drone-stm32-map
STM32 peripheral mappings for Drone, an Embedded Operating System.
Stars: ✭ 16 (-79.75%)
Mutual labels:  arm, bare-metal
Cortex M Quickstart
Template to develop bare metal applications for Cortex-M microcontrollers
Stars: ✭ 372 (+370.89%)
Mutual labels:  arm, bare-metal
Baremetal Arm
An ebook about bare-metal programming for ARM
Stars: ✭ 222 (+181.01%)
Mutual labels:  arm, bare-metal
Aros
Main AROS repository for active development. Contains the main Operating System components and Build System.
Stars: ✭ 146 (+84.81%)
Mutual labels:  arm, bare-metal
musicboy
A high-quality audio playback cartridge for Nintendo® Game Boy® and Game Boy Color®.
Stars: ✭ 25 (-68.35%)
Mutual labels:  cortex-m4, stm32f4
elfloader
ARMv7M ELF loader
Stars: ✭ 71 (-10.13%)
Mutual labels:  arm, bare-metal
metal.test
Deprecated, superseded by https://github.com/metal-ci/test
Stars: ✭ 41 (-48.1%)
Mutual labels:  arm, bare-metal
JBC SolderingStation
JBC_SolderingStation
Stars: ✭ 63 (-20.25%)
Mutual labels:  arm, cortex-m4
CML
Fast, safe and easy to use Cortex-M HAL Library, written in C++ 17
Stars: ✭ 17 (-78.48%)
Mutual labels:  arm, bare-metal
Cortex M Rtic
Real-Time Interrupt-driven Concurrency (RTIC) framework for ARM Cortex-M microcontrollers
Stars: ✭ 623 (+688.61%)
Mutual labels:  arm, bare-metal
mdepx
MDEPX — A BSD-style RTOS
Stars: ✭ 17 (-78.48%)
Mutual labels:  arm, bare-metal
PrntrBoardV2
32-bit 3D Printer controller board using STM32F407 and replaceable TMC2660/2209 stepper drivers.
Stars: ✭ 31 (-60.76%)
Mutual labels:  arm, stm32f4
ws-ldn-3
DIY Synth / ARM baremetal workshop (London, 5-6 December 2015)
Stars: ✭ 20 (-74.68%)
Mutual labels:  arm, stm32f4-discovery
cortexm-AES
high performance AES implementations optimized for cortex-m microcontrollers
Stars: ✭ 18 (-77.22%)
Mutual labels:  arm, cortex-m4
cpuwhat
Nim utilities for advanced CPU operations: CPU identification, ISA extension detection, bindings to assorted intrinsics
Stars: ✭ 25 (-68.35%)
Mutual labels:  arm
Reverse-Engineering
A FREE comprehensive reverse engineering tutorial covering x86, x64, 32-bit ARM & 64-bit ARM architectures.
Stars: ✭ 7,234 (+9056.96%)
Mutual labels:  arm

stm32f4-bare-metal

Bare metal STM32F4 examples to serve as starting points for projects. Educational purposes.

Some of the STM32F4xx family based processor headers are added in the include folder to get register locations. CMSIS library is added for a general support. No extra HAL libraries is used except the selected projects described below.

Common startup functions are located in the include/startup_stm32f407vgtx.s and include/system_stm32f4xx.c files to be included in all projects.

Installation

First, clone the project using git clone --recurse-submodules https://github.com/fcayci/stm32f4-bare-metal. The repository includes other repositories such as CMSIS as submodules under lib folder. You can alternatively clone the repository, then initialize and update the submodules with git submodule init and git submodule update commands.

Development

There are two options for development. First one is to use STM32CubeIDE from ST. Second one is the setup your own development environment. Both options are supported with relevant project settings or makefiles.

Option 1 - STM32CubeIDE

  • Download and install STM32CubeIDE. Select workspace on the root folder, then import existing projects to workspace. (File -> Import -> General -> Existing Projects into Workspace)
  • You do not need any additional tools. It comes with the compiler and debugger pre-installed.
  • Rest of the sections are for Option 2.

Option 2 - Custom development environment

  • Get toolchain (for compiler and binutils) from GNU Arm Embedded Toolchain
  • For windows only, install make tool. You can just get the make tool from gnuwin32. Alternatively you can install the minimalist GNU tools for windows from mingw and MSYS
  • For the programmer/debugger, you can use - stlink or OpenOCD. Though only stlink utility support is added.
  • You can use your favorite code editor to view/edit the contents. Here is an open source one: Visual Studio Code.

Compile

makefile contains necessary build scripts and compiler flags for all projects. Individual settings can be changed from local makefiles from projects such as blinky makefile

Browse into any directory and run make to compile.

cd projects/blinky
make

If everything is setup correctly, you should see the completed message.

Cleaning blinky
Building blinky.c
   text    data     bss     dec     hex filename
    852	      8	   1568	   2428	    97c	blinky.elf
Successfully finished...

If you see any errors about command not found, make sure the toolchain binaries are in your PATH. On Windows check the Environment Variables for your account. On Linux/macOS run echo $PATH to verify your installation.

Program

Run make burn to program the chip.

...
.. Flash written and verified! jolly good!

Install the ST LINK drivers if you cannot see your board when make burn is run.

Disassemble

Run make disass / make disass-all to disassamble.

Debug

In order to debug your code, connect your board to the PC, run st-util (comes with stlink utility) from one terminal, and from another terminal within the project directory run make debug. You can then use general gdb commands to browse through the code.

Projects

  • blinky - Good old blink LEDs example
  • clock - Shows how to change clock frequencies on the fly
  • math - A simple sine function to test math library operation
  • systick - Blinks LEDs using systick timer.
  • timer - Blinks LEDs one at a time using the Timer module and Timer interrupt
  • pwm - Fades an LED using pwm functionality using Timer module
  • external - External interrupt example using the on-board push-button
  • dac - On-chip digital to analog converter operation
  • dac-timer - On-chip digital to analog converter operation with timer trigger
  • uart - UART example to show how to send data over
  • uart-tx-int - UART example with tx interrupt
  • uart-dma - UART tx example with DMA transfer
  • spi - SPI example that is customized for on-board motion sensor (lis302dl version)
  • i2c - I2C example that communicates with the on-board Audio DAC
  • wwdg - Window Watchdog example
  • itm - Message sending through CoreSight ITM port 0
  • dma - Example DMA transfer using memory-to-memory mode
  • sleepy - Low Power mode operations (sleep and stop)
  • flash - Example to show how to write/erase internal flash memory
  • i2s-beep - I2S example that plays a couple notes using the internal beep generator from on-board Audio DAC through audio jack. It does not send any I2S data.
  • pendsv - Example project on a non-OS use of PendSV exception
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].