STM32 Rust Page: Difference between revisions
Jump to navigation
Jump to search
Line 18: | Line 18: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Now we need to install the arm software. For me I went to the arm download page and took the latest version.[[https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads here]]<br> | Now we need to install the arm software. For me I went to the arm download page and took the latest version.[[https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads here]]<br> | ||
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 | |||
<syntaxhighlight lang="rs"> | |||
#[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(); | |||
} | |||
} | |||
</syntaxhighlight> |
Revision as of 22:32, 5 February 2025
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();
}
}