aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32g030f6_periodic_prints/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/stm32g030f6_periodic_prints/src/main.rs')
-rw-r--r--examples/stm32g030f6_periodic_prints/src/main.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/stm32g030f6_periodic_prints/src/main.rs b/examples/stm32g030f6_periodic_prints/src/main.rs
new file mode 100644
index 0000000..00fa802
--- /dev/null
+++ b/examples/stm32g030f6_periodic_prints/src/main.rs
@@ -0,0 +1,57 @@
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_main]
+#![no_std]
+
+use defmt_rtt as _; // global logger
+
+pub use stm32g0xx_hal as hal; // memory layout
+
+use panic_probe as _;
+
+// same panicking *behavior* as `panic-probe` but doesn't print a panic message
+// this prevents the panic message being printed *twice* when `defmt::panic` is invoked
+#[defmt::panic_handler]
+fn panic() -> ! {
+ cortex_m::asm::udf()
+}
+
+use rtic_monotonics::stm32::prelude::*;
+stm32_tim3_monotonic!(Mono, 1_000_000);
+
+#[rtic::app(device = hal::stm32, peripherals = true, dispatchers = [USART1, USART2])]
+mod app {
+ use super::*;
+
+ #[local]
+ struct LocalResources {}
+
+ #[shared]
+ struct SharedResources {}
+
+ #[init]
+ fn init(ctx: init::Context) -> (SharedResources, LocalResources) {
+ // enable dma clock during sleep, otherwise defmt doesn't work
+ ctx.device.RCC.ahbenr.modify(|_, w| w.dmaen().set_bit());
+
+ defmt::println!("TIM Monotonic blinker example!");
+
+ // Start the monotonic
+ Mono::start(16_000_000);
+
+ print_messages::spawn().unwrap();
+
+ (SharedResources {}, LocalResources {})
+ }
+
+ #[task(priority = 2)]
+ async fn print_messages(_cx: print_messages::Context) {
+ let mut next_update = <Mono as Monotonic>::Instant::from_ticks(0u64);
+
+ loop {
+ defmt::println!("Time: {} ticks", Mono::now().ticks());
+ next_update += 1000u64.millis();
+ Mono::delay_until(next_update).await;
+ }
+ }
+}