STM32 Rust Page
Introduction
This is meant to be a general page for rust when using STM32
Install Rust For Embedded
First we install rust. This adds something to ~/.bashrc so rebooting is the quickest way
sudo apt install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
For stm32 we need the toolchain
rustup target add thumbv7em-none-eabihf
cargo install cargo-binutils
cargo install cargo-generate
Install the gcc tools
sudo apt install gdb-multiarch openocd qemu-system-arm
Now we need to install the arm software. For me I went to the arm download page and took the latest version.[here]
I unzipped it and put it in the /opt directory, currently arm-gnu-toolchain-14.2, and add it to my path in .bashrc
Blinky In Rust
The new classic since hello world
#[entry]
fn main() -> ! {
if let Some(dp) = pac::Peripherals::take() {
// Set up the system clock.
let mut rcc = dp.RCC.constrain();
// Get the GPIOB peripheral
let mut gpiob = dp.GPIOB.split(&mut rcc.ahb);
// (Re-)configure PE13 as output
let mut led = gpiob.pb13.into_push_pull_output(&mut gpiob.moder, &mut gpiob.otyper);
led.set_low().unwrap();
loop {
led.toggle().unwrap();
// Wait for 1_000_000 cycles
cortex_m::asm::delay(1_000_000);
if led.is_set_low().unwrap() {
led.set_high().unwrap();
} else {
led.set_low().unwrap();
}
// Wait for 1_000_000 cycles
cortex_m::asm::delay(1_000_000);
}
}
loop {
cortex_m::asm::nop();
}
}