mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-11-27 14:04:56 +01:00
Add example of using Embassy HAL(stm32) with RTIC. (#891)
The RTIC book mentions Embassy+RTIC but gives no examples. fmt. Add feature flag Seems CI does not deal with 2 levels of depth. Forgot to stage. Thumb m arch. Co-authored-by: Corey Schuhen <cschuhen@gmail.com>
This commit is contained in:
parent
2798500957
commit
b1467c62b4
4 changed files with 111 additions and 0 deletions
9
examples/embassy-stm32g4/.cargo/config.toml
Normal file
9
examples/embassy-stm32g4/.cargo/config.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
|
||||||
|
# replace STM32G071C8Rx with your chip as listed in `probe-rs chip list`
|
||||||
|
runner = "probe-rs run --chip STM32G431CBUx --connect-under-reset"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
target = "thumbv7m-none-eabi"
|
||||||
|
|
||||||
|
[env]
|
||||||
|
DEFMT_LOG = "trace"
|
36
examples/embassy-stm32g4/Cargo.toml
Normal file
36
examples/embassy-stm32g4/Cargo.toml
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
[package]
|
||||||
|
edition = "2021"
|
||||||
|
name = "embassy-stm32g4-examples"
|
||||||
|
version = "0.1.0"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
|
[workspace]
|
||||||
|
|
||||||
|
[dependencies.rtic]
|
||||||
|
path="../../rtic"
|
||||||
|
version = "=2.0"
|
||||||
|
features = ["thumbv7-backend"]
|
||||||
|
|
||||||
|
[dependencies.rtic-monotonics]
|
||||||
|
path="../../rtic-monotonics"
|
||||||
|
version = "=1.5"
|
||||||
|
features = ["cortex-m-systick"]
|
||||||
|
|
||||||
|
[dependencies.rtic-sync]
|
||||||
|
path="../../rtic-sync"
|
||||||
|
version = "=1.3"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# Change stm32g431cb to your chip name, if necessary. Also change .cargo/config.toml
|
||||||
|
embassy-stm32 = { version = "0.1.0", features = [ "defmt", "time-driver-any", "stm32g431cb", "memory-x", "unstable-pac", "exti"] }
|
||||||
|
|
||||||
|
defmt = "0.3"
|
||||||
|
defmt-rtt = "0.4"
|
||||||
|
|
||||||
|
cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] }
|
||||||
|
cortex-m-rt = "0.7.0"
|
||||||
|
embedded-hal = "0.2.6"
|
||||||
|
panic-probe = { version = "0.3", features = ["print-defmt"] }
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
debug = 2
|
5
examples/embassy-stm32g4/build.rs
Normal file
5
examples/embassy-stm32g4/build.rs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
fn main() {
|
||||||
|
println!("cargo:rustc-link-arg-bins=--nmagic");
|
||||||
|
println!("cargo:rustc-link-arg-bins=-Tlink.x");
|
||||||
|
println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
|
||||||
|
}
|
61
examples/embassy-stm32g4/src/bin/blinky.rs
Normal file
61
examples/embassy-stm32g4/src/bin/blinky.rs
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#![deny(unsafe_code)]
|
||||||
|
#![deny(warnings)]
|
||||||
|
#![no_main]
|
||||||
|
#![no_std]
|
||||||
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
|
use defmt::*;
|
||||||
|
use embassy_stm32::gpio::{Level, Output, Speed};
|
||||||
|
use rtic::app;
|
||||||
|
use rtic_monotonics::systick::*;
|
||||||
|
use {defmt_rtt as _, panic_probe as _};
|
||||||
|
|
||||||
|
pub mod pac {
|
||||||
|
pub use embassy_stm32::pac::Interrupt as interrupt;
|
||||||
|
pub use embassy_stm32::pac::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[app(device = pac, peripherals = false, dispatchers = [SPI1])]
|
||||||
|
mod app {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[shared]
|
||||||
|
struct Shared {}
|
||||||
|
|
||||||
|
#[local]
|
||||||
|
struct Local {}
|
||||||
|
|
||||||
|
#[init]
|
||||||
|
fn init(cx: init::Context) -> (Shared, Local) {
|
||||||
|
// Initialize the systick interrupt & obtain the token to prove that we did
|
||||||
|
let systick_mono_token = rtic_monotonics::create_systick_token!();
|
||||||
|
Systick::start(cx.core.SYST, 25_000_000, systick_mono_token);
|
||||||
|
|
||||||
|
let p = embassy_stm32::init(Default::default());
|
||||||
|
info!("Hello World!");
|
||||||
|
|
||||||
|
let mut led = Output::new(p.PC6, Level::High, Speed::Low);
|
||||||
|
info!("high");
|
||||||
|
led.set_high();
|
||||||
|
|
||||||
|
// Schedule the blinking task
|
||||||
|
blink::spawn(led).ok();
|
||||||
|
|
||||||
|
(Shared {}, Local {})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[task()]
|
||||||
|
async fn blink(_cx: blink::Context, mut led: Output<'static, embassy_stm32::peripherals::PC6>) {
|
||||||
|
let mut state = true;
|
||||||
|
loop {
|
||||||
|
info!("blink");
|
||||||
|
if state {
|
||||||
|
led.set_high();
|
||||||
|
} else {
|
||||||
|
led.set_low();
|
||||||
|
}
|
||||||
|
state = !state;
|
||||||
|
Systick::delay(1000.millis()).await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue