STM32F103-Bare-Metal - Programming the STM32F103C8 micro controller at the "bare metal" register level

  •        124

This repository is a collection of my code projects as I learn the aspects of programming an STM32F103C8 Cortex M3 micro controller at the "bare metal" register level. I will be creating example code for most all aspects of the µC including SPI, USART, I2C, DMA, etc. With a working toolchain, all projects can be built from within their project directory. The master.mk file REQUIRES modification in order to set the paths to the build tools.

https://github.com/getoffmyhack/STM32F103-Bare-Metal

Tags
Implementation
License
Platform

   




Related Projects

G.E.R.T

  •    TeX

GERT is a modified version of Go that runs bare-metal on armv7a SOCs. The minimal set of OS primitives that Go relies on have been re-implemented entirely in Go and Plan 9 assembly inside the modified runtime. The goal of this project is to bring the benefits of a high-level, type-safe, and garbage-collected language to bare-metal embedded environments. GERT has been developed for the Wandboard Quad (iMX6 Quad SOC), but GERT can be ported to any armv7a SOC with adequate documentation. These commands will build QEMU from source and also download all of the dependencies required to build GERT and the Go runtime. You also need to have regular Go installed on your system in order to bootstrap the compilation of G.E.R.T and Go.

razor-server - Razor is next generation provisioning software that handles bare metal hardware and virtual server provisioning

  •    Ruby

Razor is an advanced provisioning application which can deploy both bare-metal and virtual systems. It's aimed at solving the problem of how to bring new metal into a state where your existing DevOps/configuration management workflows can take it over.Newly added machines in a Razor deployment will PXE-boot from a special Razor Microkernel image, then check in, provide Razor with inventory information, and wait for further instructions. Razor will consult user-created policy rules to choose which tasks to apply to a new node, which will begin to follow the task directions, giving feedback to Razor as it completes various steps. Tasks can include steps for handoff to a DevOps system such as Puppet or to any other system capable of controlling the node (such as a vCenter server taking possession of ESX systems).

matchbox - Network boot and provision Container Linux clusters (e.g. etcd3, Kubernetes, more)

  •    Go

matchbox is a service that matches bare-metal machines (based on labels like MAC, UUID, etc.) to profiles that PXE boot and provision Container Linux clusters. Profiles specify the kernel/initrd, kernel arguments, iPXE config, GRUB config, Container Linux Config, or other configs a machine should use. Matchbox can be installed as a binary, RPM, container image, or deployed on a Kubernetes cluster and it provides an authenticated gRPC API for clients like Terraform.

ironic - A service for managing and provisioning Bare Metal servers.

  •    Python

Ironic consists of an API and plug-ins for managing and provisioning physical machines in a security-aware and fault-tolerant manner. It can be used with nova as a hypervisor driver, or standalone service using bifrost. By default, it will use PXE and IPMI to interact with bare metal machines. Ironic also supports vendor-specific plug-ins which may implement additional functionality.Ironic is distributed under the terms of the Apache License, Version 2.0. The full terms and conditions of this license are detailed in the LICENSE file.

metallb - A network load-balancer implementation for Kubernetes using BGP and ARP

  •    CSS

MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols.Check out MetalLB's website for more information.


raspberrypi - Raspberry Pi ARM based bare metal examples

  •    Assembly

Raspberry Pi ARM based bare metal examples

darch - A tool for building and booting stateless and immutable images, bare metal.

  •    Go

Think "Dockerfiles", but for immutable, stateless, graphical (or not) environments, booted bare-metal.

k8s-on-raspbian - Kubernetes on Raspbian (Raspberry Pi)

  •    Shell

This guide is part of a larger blog post: Build your own bare-metal ARM cluster. Once you're up and running please share your clusters on Twitter with @alexellisuk.

blb - Blb is a distributed object storage system designed for use on bare metal in cluster computing environments

  •    Go

Blb is a distributed object storage system designed for use on bare metal with spinning disks in cluster computing environments. It's implemented in Go. The developer-facing API is a client library, also implemented in Go, that exposes objects with an interface similar to Go files (io.ReadWriteSeeker).

raspi3-tutorial - Bare metal Raspberry Pi 3 tutorials

  •    C

Hello there! This tutorial series are made for those who would like to compile their own bare metal application for the Raspberry Pi. The target audience is hobby OS developers, who are new to this hardware. I'll give you examples on how to do the basic things, like writing to the serial console, reading keystrokes from it, setting screen resolution and draw to the linear frame buffer. I'm also going to show you how to get the hardware's serial number, a hardware-backed random number, and how to read files from the boot partition.

metallb - A network load-balancer implementation for Kubernetes using standard routing protocols

  •    CSS

MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols. Check out MetalLB's website for more information.

circle - A C++ bare metal environment for Raspberry Pi with USB

  •    C

Raspberry Pi is a trademark of the Raspberry Pi Foundation. If you read this file in an editor you should switch line wrapping on.

falcon - Falcon is a bare-metal Python web API framework for building high-performance microservices, app backends, and higher-level frameworks

  •    Python

Falcon is a reliable, high-performance Python web framework for building large-scale app backends and microservices. It encourages the REST architectural style, and tries to do as little as possible while remaining highly effective. Falcon apps work with any WSGI server, and run like a champ under CPython 2.7, CPython 3.4+, PyPy2.7, and PyPy3.5.

x86-bare-metal-examples - Dozens of minimal operating systems to learn x86 system programming

  •    Assembly

Each .S file on the top-level is an operating system! It gets compiled to a corresponding .img file.

infrakit - A toolkit for creating and managing declarative, self-healing infrastructure.

  •    Go

InfraKit is a toolkit for infrastructure orchestration. With an emphasis on immutable infrastructure, it breaks down infrastructure automation and management processes into small, pluggable components. These components work together to actively ensure the infrastructure state matches the user's specifications. InfraKit therefore provides infrastructure support for higher-level container orchestration systems and can make your infrastructure self-managing and self-healing. In this video, InfraKit was used to build a custom linux operating system (based on linuxkit). We then deployed a cluster of virtual machine instances on a local Mac laptop using the Mac Xhyve hypervisor (HyperKit). A cluster of 3 servers booted up in seconds. Later, after the custom OS image has been updated with a new public key, InfraKit detects the change and orchestrates a rolling update of the nodes. We then deploy the same OS image to a bare-metal ARM server running on Packet.net, where the server uses custom ipxe boot directly from the localhost. It demonstrates some of the key concepts and components in InfraKit and shows how InfraKit can be used to implement an integrated workflow from custom OS image creation to cluster deployment and Day N management. The entire demo is published as a playbook, and you can create your own playbooks too.

deploykit - A toolkit for creating and managing declarative, self-healing infrastructure.

  •    Go

InfraKit is a toolkit for infrastructure orchestration. With an emphasis on immutable infrastructure, it breaks down infrastructure automation and management processes into small, pluggable components. These components work together to actively ensure the infrastructure state matches the user's specifications. InfraKit therefore provides infrastructure support for higher-level container orchestration systems and can make your infrastructure self-managing and self-healing. In this video, InfraKit was used to build a custom linux operating system (based on linuxkit). We then deployed a cluster of virtual machine instances on a local Mac laptop using the Mac Xhyve hypervisor (HyperKit). A cluster of 3 servers booted up in seconds. Later, after the custom OS image has been updated with a new public key, InfraKit detects the change and orchestrates a rolling update of the nodes. We then deploy the same OS image to a bare-metal ARM server running on Packet.net, where the server uses custom ipxe boot directly from the localhost. It demonstrates some of the key concepts and components in InfraKit and shows how InfraKit can be used to implement an integrated workflow from custom OS image creation to cluster deployment and Day N management. The entire demo is published as a playbook, and you can create your own playbooks too.

Cold Metal

  •    Perl

A Bare Metal Universal Provisioning Toolkit supporting Redhat/anaconda and Solaris(PXE and Sparc) OS Scripted Installation and Post-Install provisioning, hooks into existing OS tools and extentions. Focus is on automation for turn-key installations.

tvm - bring deep learning workloads to bare metal

  •    C++

TVM is a Tensor intermediate representation(IR) stack for deep learning systems. It is designed to close the gap between the productivity-focused deep learning frameworks, and the performance- and efficiency-focused hardware backends. TVM works with deep learning frameworks to provide end to end compilation to different backends. Checkout our announcement for more details.© Contributors, 2017. Licensed under an Apache-2.0 license.