From cba91eb21ef0d562807a71b24acdb504339906af Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 12 May 2026 15:17:25 +0200 Subject: [PATCH] update STM32F3 example code --- .../stm32f3-disco-rtic/Cargo.lock | 239 +++++++++++------- .../stm32f3-disco-rtic/Cargo.toml | 6 +- embedded-examples/stm32f3-disco-rtic/memory.x | 33 --- .../stm32f3-disco-rtic/src/bin/blinky.rs | 13 +- .../stm32f3-disco-rtic/src/lib.rs | 3 + .../stm32f3-disco-rtic/src/main.rs | 49 ++-- 6 files changed, 169 insertions(+), 174 deletions(-) delete mode 100644 embedded-examples/stm32f3-disco-rtic/memory.x diff --git a/embedded-examples/stm32f3-disco-rtic/Cargo.lock b/embedded-examples/stm32f3-disco-rtic/Cargo.lock index 5eb6565..ed4dd4d 100644 --- a/embedded-examples/stm32f3-disco-rtic/Cargo.lock +++ b/embedded-examples/stm32f3-disco-rtic/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "aligned" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923" +checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" dependencies = [ "as-slice", ] @@ -90,7 +90,7 @@ dependencies = [ "arbitrary-int 1.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -202,7 +202,7 @@ checksum = "e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -255,7 +255,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -266,7 +266,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -298,7 +298,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -322,25 +322,24 @@ dependencies = [ [[package]] name = "defmt-test" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24076cc7203c365e7febfcec15d6667a9ef780bd2c5fd3b2a197400df78f299b" +checksum = "1d326e211b94939affafdf96f5c1baf8745b960037dcf763f813597d32b03d51" dependencies = [ - "cortex-m-rt", - "cortex-m-semihosting", "defmt 1.0.1", "defmt-test-macros", + "semihosting", ] [[package]] name = "defmt-test-macros" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe5520fd36862f281c026abeaab153ebbc001717c29a9b8e5ba9704d8f3a879d" +checksum = "2a7563a5468e1a1bd97f44cb75b658c2feec75af2b1389e70f4c0677b8402edd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -351,7 +350,7 @@ checksum = "6178a82cf56c836a3ba61a7935cdb1c49bfaa6fa4327cd5bf554a503087de26b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -365,14 +364,15 @@ dependencies = [ [[package]] name = "embassy-embedded-hal" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8" +checksum = "b0641612053b2f34fc250bb63f6630ae75de46e02ade7f457268447081d709ce" dependencies = [ "defmt 1.0.1", "embassy-futures", - "embassy-hal-internal", + "embassy-hal-internal 0.4.0", "embassy-sync", + "embassy-time", "embedded-hal 0.2.7", "embedded-hal 1.0.0", "embedded-hal-async", @@ -381,6 +381,12 @@ dependencies = [ "nb 1.1.0", ] +[[package]] +name = "embassy-executor-timer-queue" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fc328bf943af66b80b98755db9106bf7e7471b0cf47dc8559cd9a6be504cc9c" + [[package]] name = "embassy-futures" version = "0.1.2" @@ -389,9 +395,18 @@ checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" [[package]] name = "embassy-hal-internal" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" +checksum = "7f10ce10a4dfdf6402d8e9bd63128986b96a736b1a0a6680547ed2ac55d55dba" +dependencies = [ + "num-traits", +] + +[[package]] +name = "embassy-hal-internal" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568659fc53866d3d85c60fa33723fb751aa69e71507634fc2c19e7649432fb75" dependencies = [ "cortex-m", "critical-section", @@ -410,9 +425,9 @@ dependencies = [ [[package]] name = "embassy-stm32" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d972eab325cc96afee98f80a91ca6b00249b6356dc0fdbff68b70c200df9fae" +checksum = "486c0622deb5a519fc4d2cb8e3ef324f7568fcdfff201ff8fcab46557d663ceb" dependencies = [ "aligned", "bit_field", @@ -426,10 +441,12 @@ dependencies = [ "document-features", "embassy-embedded-hal", "embassy-futures", - "embassy-hal-internal", + "embassy-hal-internal 0.5.0", "embassy-net-driver", "embassy-sync", "embassy-time", + "embassy-time-driver", + "embassy-time-queue-utils", "embassy-usb-driver", "embassy-usb-synopsys-otg", "embedded-can", @@ -437,50 +454,54 @@ dependencies = [ "embedded-hal 1.0.0", "embedded-hal-async", "embedded-hal-nb", - "embedded-io", - "embedded-io-async", + "embedded-io 0.7.1", + "embedded-io-async 0.7.0", "embedded-storage", "embedded-storage-async", "futures-util", + "heapless 0.9.1", "nb 1.1.0", "proc-macro2", "quote", "rand_core 0.6.4", "rand_core 0.9.3", + "regex", "sdio-host", "static_assertions", "stm32-fmc", "stm32-metapac", + "trait-set", "vcell", "volatile-register", ] [[package]] name = "embassy-sync" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b" +checksum = "7bbd85cf5a5ae56bdf26f618364af642d1d0a4e245cdd75cd9aabda382f65a81" dependencies = [ "cfg-if", "critical-section", "defmt 1.0.1", - "embedded-io-async", + "embedded-io-async 0.7.0", "futures-core", "futures-sink", - "heapless 0.8.0", + "heapless 0.9.1", ] [[package]] name = "embassy-time" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa65b9284d974dad7a23bb72835c4ec85c0b540d86af7fc4098c88cff51d65" +checksum = "592b0c143ec626e821d4d90da51a2bd91d559d6c442b7c74a47d368c9e23d97a" dependencies = [ "cfg-if", "critical-section", "defmt 1.0.1", "document-features", "embassy-time-driver", + "embassy-time-queue-utils", "embedded-hal 0.2.7", "embedded-hal 1.0.0", "embedded-hal-async", @@ -489,13 +510,23 @@ dependencies = [ [[package]] name = "embassy-time-driver" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0a244c7dc22c8d0289379c8d8830cae06bb93d8f990194d0de5efb3b5ae7ba6" +checksum = "6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9" dependencies = [ "document-features", ] +[[package]] +name = "embassy-time-queue-utils" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168297bf80aaf114b3c9ad589bf38b01b3009b9af7f97cd18086c5bbf96f5693" +dependencies = [ + "embassy-executor-timer-queue", + "heapless 0.9.1", +] + [[package]] name = "embassy-usb-driver" version = "0.2.0" @@ -503,14 +534,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17119855ccc2d1f7470a39756b12068454ae27a3eabb037d940b5c03d9c77b7a" dependencies = [ "defmt 1.0.1", - "embedded-io-async", + "embedded-io-async 0.6.1", ] [[package]] name = "embassy-usb-synopsys-otg" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "288751f8eaa44a5cf2613f13cee0ca8e06e6638cb96e897e6834702c79084b23" +checksum = "cbe46f4083109c7ea12a03ca61095d1e87c76fec52c7ca9ee06a42935606dacb" dependencies = [ "critical-section", "defmt 1.0.1", @@ -578,8 +609,14 @@ name = "embedded-io" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "embedded-io" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7" dependencies = [ - "defmt 0.3.100", + "defmt 1.0.1", ] [[package]] @@ -588,8 +625,17 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f" dependencies = [ - "defmt 0.3.100", - "embedded-io", + "embedded-io 0.6.1", +] + +[[package]] +name = "embedded-io-async" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564b9f813c544241430e147d8bc454815ef9ac998878d30cc3055449f7fd4c0" +dependencies = [ + "defmt 1.0.1", + "embedded-io 0.7.1", ] [[package]] @@ -625,7 +671,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -646,15 +692,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "fugit" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" -dependencies = [ - "gcd", -] - [[package]] name = "futures-core" version = "0.3.31" @@ -685,12 +722,6 @@ dependencies = [ "pin-utils", ] -[[package]] -name = "gcd" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" - [[package]] name = "generator" version = "0.8.7" @@ -892,7 +923,7 @@ checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -965,7 +996,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -998,6 +1029,18 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + [[package]] name = "regex-automata" version = "0.4.13" @@ -1055,20 +1098,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "rtic-monotonics" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99f9923ce32637ee40c0cb28fbbc2fad880d8aebea2d545918c6971ae9be3d17" -dependencies = [ - "cfg-if", - "cortex-m", - "fugit", - "portable-atomic", - "rtic-time", + "syn 2.0.108", ] [[package]] @@ -1087,20 +1117,6 @@ dependencies = [ "rtic-common", ] -[[package]] -name = "rtic-time" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61485474f5a23247ae1d4875f2bfe860be9b3030dbf87c232e50799e021429a1" -dependencies = [ - "critical-section", - "embedded-hal 1.0.0", - "embedded-hal-async", - "fugit", - "futures-util", - "rtic-common", -] - [[package]] name = "rustc_version" version = "0.2.3" @@ -1138,13 +1154,13 @@ dependencies = [ "defmt-rtt", "defmt-test", "embassy-stm32", + "embassy-time", "embedded-hal 1.0.0", "enumset", "heapless 0.9.1", "panic-probe", "postcard", "rtic", - "rtic-monotonics", "rtic-sync", "serde", "spacepackets", @@ -1170,6 +1186,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b328e2cb950eeccd55b7f55c3a963691455dcd044cfb5354f0c5e68d2c2d6ee2" +[[package]] +name = "semihosting" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8e4abf97879f4e80db69a9fba7bd64998e9bdad25f58ef045a778e191172fd4" + [[package]] name = "semver" version = "0.9.0" @@ -1218,7 +1240,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -1245,7 +1267,8 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "spacepackets" version = "0.17.0" -source = "git+https://egit.irs.uni-stuttgart.de/rust/spacepackets.git#2bc61677105765e69cc96bb1ff9960557c00fa8e" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94979a990b4333f43667cba9fe9e72b9c4e9ada82e09fbe8fb250844358590cc" dependencies = [ "arbitrary-int 2.0.0", "bitbybit", @@ -1293,24 +1316,35 @@ dependencies = [ [[package]] name = "stm32-fmc" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f0639399e2307c2446c54d91d4f1596343a1e1d5cab605b9cce11d0ab3858c" +checksum = "72692594faa67f052e5e06dd34460951c21e83bc55de4feb8d2666e2f15480a2" dependencies = [ - "embedded-hal 0.2.7", + "embedded-hal 1.0.0", ] [[package]] name = "stm32-metapac" -version = "18.0.0" +version = "21.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8ec3a292a0d9fc4798416a61b21da5ae50341b2e7b8d12e662bf305366097" +checksum = "e74b78632cea498cfb28386a29f8bfae7476d6570a78733eb5fecbee66c2f4ce" dependencies = [ "cortex-m", "cortex-m-rt", "defmt 0.3.100", ] +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.108" @@ -1339,7 +1373,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -1400,6 +1434,17 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "trait-set" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "unicode-ident" version = "1.0.22" @@ -1487,7 +1532,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -1498,7 +1543,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] [[package]] @@ -1576,5 +1621,5 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.108", ] diff --git a/embedded-examples/stm32f3-disco-rtic/Cargo.toml b/embedded-examples/stm32f3-disco-rtic/Cargo.toml index 3ebaa76..8608b19 100644 --- a/embedded-examples/stm32f3-disco-rtic/Cargo.toml +++ b/embedded-examples/stm32f3-disco-rtic/Cargo.toml @@ -14,7 +14,8 @@ defmt-rtt = { version = "1" } panic-probe = { version = "1", features = ["print-defmt"] } embedded-hal = "1" cortex-m-semihosting = "0.5.0" -embassy-stm32 = { version = "0.4", features = ["defmt", "stm32f303vc", "unstable-pac"] } +embassy-stm32 = { version = "0.6", features = ["defmt", "stm32f303vc", "memory-x", "unstable-pac", "time-driver-any"] } +embassy-time = { version = "0.5", features = ["defmt", "generic-queue-16", "defmt-timestamp-uptime-ms"]} enumset = "1" heapless = "0.9" spacepackets = { version = "0.17", default-features = false, features = ["defmt", "serde"] } @@ -27,10 +28,9 @@ serde = { version = "1", default-features = false, features = ["derive"] } rtic = { version = "2", features = ["thumbv7-backend"] } rtic-sync = { version = "1" } -rtic-monotonics = { version = "2", features = ["cortex-m-systick"] } [dev-dependencies] -defmt-test = "0.4" +defmt-test = "0.5" # cargo test [profile.test] diff --git a/embedded-examples/stm32f3-disco-rtic/memory.x b/embedded-examples/stm32f3-disco-rtic/memory.x deleted file mode 100644 index a3a5787..0000000 --- a/embedded-examples/stm32f3-disco-rtic/memory.x +++ /dev/null @@ -1,33 +0,0 @@ -/* Linker script for the STM32F303VCT6 */ -MEMORY -{ - /* NOTE 1 K = 1 KiBi = 1024 bytes */ - FLASH : ORIGIN = 0x08000000, LENGTH = 256K - RAM : ORIGIN = 0x20000000, LENGTH = 40K -} - -/* This is where the call stack will be allocated. */ -/* The stack is of the full descending type. */ -/* You may want to use this variable to locate the call stack and static - variables in different memory regions. Below is shown the default value */ -/* _stack_start = ORIGIN(RAM) + LENGTH(RAM); */ - -/* You can use this symbol to customize the location of the .text section */ -/* If omitted the .text section will be placed right after the .vector_table - section */ -/* This is required only on microcontrollers that store some configuration right - after the vector table */ -/* _stext = ORIGIN(FLASH) + 0x400; */ - -/* Example of putting non-initialized variables into custom RAM locations. */ -/* This assumes you have defined a region RAM2 above, and in the Rust - sources added the attribute `#[link_section = ".ram2bss"]` to the data - you want to place there. */ -/* Note that the section will not be zero-initialized by the runtime! */ -/* SECTIONS { - .ram2bss (NOLOAD) : ALIGN(4) { - *(.ram2bss); - . = ALIGN(4); - } > RAM2 - } INSERT AFTER .bss; -*/ diff --git a/embedded-examples/stm32f3-disco-rtic/src/bin/blinky.rs b/embedded-examples/stm32f3-disco-rtic/src/bin/blinky.rs index 372d7b3..adc6f9b 100644 --- a/embedded-examples/stm32f3-disco-rtic/src/bin/blinky.rs +++ b/embedded-examples/stm32f3-disco-rtic/src/bin/blinky.rs @@ -6,11 +6,8 @@ use rtic::app; #[app(device = embassy_stm32)] mod app { - use rtic_monotonics::fugit::ExtU32; - use rtic_monotonics::Monotonic as _; - use satrs_stm32f3_disco_rtic::{Direction, LedPinSet, Leds}; - - rtic_monotonics::systick_monotonic!(Mono, 1000); + use embassy_time::Timer; +use satrs_stm32f3_disco_rtic::{Direction, LedPinSet, Leds}; #[shared] struct Shared {} @@ -22,7 +19,7 @@ mod app { } #[init] - fn init(cx: init::Context) -> (Shared, Local) { + fn init(_cx: init::Context) -> (Shared, Local) { let p = embassy_stm32::init(Default::default()); defmt::info!("Starting sat-rs demo application for the STM32F3-Discovery using RTICv2"); @@ -39,8 +36,6 @@ mod app { }; let leds = Leds::new(led_pin_set); - // Initialize the systick interrupt & obtain the token to prove that we did - Mono::start(cx.core.SYST, 8_000_000); blinky::spawn().expect("failed to spawn blinky task"); ( Shared {}, @@ -55,7 +50,7 @@ mod app { async fn blinky(cx: blinky::Context) { loop { cx.local.leds.blink_next(cx.local.current_dir); - Mono::delay(200.millis()).await; + Timer::after_millis(200).await; } } } diff --git a/embedded-examples/stm32f3-disco-rtic/src/lib.rs b/embedded-examples/stm32f3-disco-rtic/src/lib.rs index 1f4211d..e9c6d77 100644 --- a/embedded-examples/stm32f3-disco-rtic/src/lib.rs +++ b/embedded-examples/stm32f3-disco-rtic/src/lib.rs @@ -1,6 +1,9 @@ #![no_main] #![no_std] +use defmt_rtt as _; +use panic_probe as _; + use arbitrary_int::u11; use core::time::Duration; use embassy_stm32::gpio::Output; diff --git a/embedded-examples/stm32f3-disco-rtic/src/main.rs b/embedded-examples/stm32f3-disco-rtic/src/main.rs index 01c2054..1f11224 100644 --- a/embedded-examples/stm32f3-disco-rtic/src/main.rs +++ b/embedded-examples/stm32f3-disco-rtic/src/main.rs @@ -2,21 +2,11 @@ #![no_main] use arbitrary_int::{u11, u14}; use cortex_m_semihosting::debug::{self, EXIT_FAILURE, EXIT_SUCCESS}; -use satrs_stm32f3_disco_rtic::{create_tm_packet, tm_size, CcsdsPacketId, Request, Response}; -use spacepackets::{CcsdsPacketCreationError, SpHeader}; - -use defmt_rtt as _; // global logger - -use panic_probe as _; +use satrs_stm32f3_disco_rtic::{create_tm_packet, tm_size, Request, Response}; +use spacepackets::{CcsdsPacketCreationError, CcsdsPacketIdAndPsc, SpHeader}; use rtic::app; -#[allow(unused_imports)] -use rtic_monotonics::fugit::{MillisDurationU32, TimerInstantU32}; -use rtic_monotonics::systick::prelude::*; - -use crate::app::Mono; - const UART_BAUD: u32 = 115200; const DEFAULT_BLINK_FREQ_MS: u32 = 1000; const TX_HANDLER_FREQ_MS: u32 = 20; @@ -48,7 +38,7 @@ pub enum TmSendError { #[derive(Debug, defmt::Format)] pub struct RequestWithTcId { pub request: Request, - pub tc_id: CcsdsPacketId, + pub tc_id: CcsdsPacketIdAndPsc, } #[app(device = embassy_stm32)] @@ -57,18 +47,19 @@ mod app { use super::*; use arbitrary_int::u14; + use embassy_time::Timer; use rtic::Mutex; use rtic_sync::{ channel::{Receiver, Sender}, make_channel, }; - use satrs_stm32f3_disco_rtic::{CcsdsPacketId, LedPinSet, Request, Response}; + use satrs_stm32f3_disco_rtic::{LedPinSet, Request, Response}; use spacepackets::CcsdsPacketReader; - systick_monotonic!(Mono, 1000); - embassy_stm32::bind_interrupts!(struct Irqs { USART2 => embassy_stm32::usart::InterruptHandler; + DMA1_CHANNEL6 => embassy_stm32::dma::InterruptHandler; + DMA1_CHANNEL7 => embassy_stm32::dma::InterruptHandler; }); #[shared] @@ -86,15 +77,13 @@ mod app { } #[init] - fn init(cx: init::Context) -> (Shared, Local) { + fn init(_cx: init::Context) -> (Shared, Local) { static DMA_BUF: static_cell::ConstStaticCell<[u8; TC_DMA_BUF_LEN]> = static_cell::ConstStaticCell::new([0; TC_DMA_BUF_LEN]); let p = embassy_stm32::init(Default::default()); let (req_sender, req_receiver) = make_channel!(RequestWithTcId, 16); - // Initialize the systick interrupt & obtain the token to prove that we did - Mono::start(cx.core.SYST, 8_000_000); defmt::info!("sat-rs demo application for the STM32F3-Discovery with RTICv2"); let led_pin_set = LedPinSet { @@ -112,7 +101,7 @@ mod app { let mut config = embassy_stm32::usart::Config::default(); config.baudrate = UART_BAUD; let uart = embassy_stm32::usart::Uart::new( - p.USART2, p.PA3, p.PA2, Irqs, p.DMA1_CH7, p.DMA1_CH6, config, + p.USART2, p.PA3, p.PA2, p.DMA1_CH7, p.DMA1_CH6, Irqs, config, ) .unwrap(); @@ -142,10 +131,7 @@ mod app { loop { cx.local.leds.blink_next(cx.local.current_dir); let current_blink_freq = cx.shared.blink_freq.lock(|current| *current); - Mono::delay(MillisDurationU32::from_ticks( - current_blink_freq.as_millis() as u32, - )) - .await; + Timer::after_millis(current_blink_freq.as_millis() as u64).await; } } @@ -169,7 +155,7 @@ mod app { .unwrap(); continue; } - Mono::delay(TX_HANDLER_FREQ_MS.millis()).await; + Timer::after_millis(TX_HANDLER_FREQ_MS as u64).await; } } @@ -198,9 +184,8 @@ mod app { &decoder.dest()[0..packet_size], ) { Ok(packet) => { - let packet_id = packet.packet_id(); - let psc = packet.psc(); - let tc_packet_id = CcsdsPacketId { packet_id, psc }; + let tc_packet_id = + CcsdsPacketIdAndPsc::new_from_ccsds_packet(&packet); if let Ok(request) = postcard::from_bytes::(packet.packet_data()) { @@ -260,7 +245,7 @@ mod app { fn handle_ping_request( cx: &mut req_handler::Context, - tc_packet_id: CcsdsPacketId, + tc_packet_id: CcsdsPacketIdAndPsc, ) -> Result<(), TmSendError> { defmt::info!("Received PUS ping telecommand, sending ping reply"); send_tm(tc_packet_id, Response::CommandDone, *cx.local.seq_count)?; @@ -270,7 +255,7 @@ mod app { fn handle_change_blink_frequency_request( cx: &mut req_handler::Context, - tc_packet_id: CcsdsPacketId, + tc_packet_id: CcsdsPacketIdAndPsc, duration: Duration, ) -> Result<(), TmSendError> { defmt::info!( @@ -287,14 +272,14 @@ mod app { } fn send_tm( - tc_packet_id: CcsdsPacketId, + tc_packet_id: CcsdsPacketIdAndPsc, response: Response, current_seq_count: u14, ) -> Result<(), TmSendError> { let sp_header = SpHeader::new_for_unseg_tc(PUS_APID, current_seq_count, 0); let tm_header = satrs_stm32f3_disco_rtic::TmHeader { tc_packet_id: Some(tc_packet_id), - uptime_millis: Mono::now().duration_since_epoch().to_millis(), + uptime_millis: embassy_time::Instant::now().as_millis() as u32, }; let mut tm_packet = TmPacket::new(); let tm_size = tm_size(&tm_header, &response); -- 2.43.0