aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32f411_adc_and_mpsc_channel/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'examples/stm32f411_adc_and_mpsc_channel/README.md')
-rw-r--r--examples/stm32f411_adc_and_mpsc_channel/README.md46
1 files changed, 46 insertions, 0 deletions
diff --git a/examples/stm32f411_adc_and_mpsc_channel/README.md b/examples/stm32f411_adc_and_mpsc_channel/README.md
new file mode 100644
index 0000000..d7dc6f3
--- /dev/null
+++ b/examples/stm32f411_adc_and_mpsc_channel/README.md
@@ -0,0 +1,46 @@
+# STM32F411CEU6 ADC example
+This example is a continuation of the **stm32f411_adc**.
+In this variant, there are 3 tasks (1 HW & 2 SW) involved and communication between them by means of an MPSC channel.
+
+In the `#[init]` before spawning any task, an MPSC channel is created and split in its two parts.
+Immediately after separating the `Receiver` and `Sender` the software task `printer_actor` is spawned and receives the `Receiver` end of the channel and starts listening.
+
+Then two clones of the `Sender` type are created. The first one is stored as Local resource for the HW task and the second, is passed as an argument when the `pinger` software task is spawned.
+
+## Hardware task bound to EXTI0: `gpio_interrupt_handler`
+This task,
+ - Decreases the value of __delayval__ by 200
+ - Takes a new sample from the ADC input connected on pin `PA1`
+ - Sends a message of type `Message::PotentiometerValue` to the printer task
+ - Clears the interrupt_pending_bit
+
+## Software task: `printer_actor`
+This task makes use of the unused interrupt __SPI1__ as a dispatcher. Since it is an async fn, it ia constantly awaiting for incoming messages from other actors.
+Depending on the type of message received, it prints something different.
+
+## Software task: `pinger`
+This is just a simple task that sends ping every 25000 millis and uses __SPI2__ as a dispatcher.
+
+## How-to
+
+### Build
+Run `cargo build --release` to compile the code. If you run it for the first time, it will take some time to download and compile dependencies.
+
+### Run
+Install `probe-rs` and configure it using the [debugging extension for VScode](https://probe.rs/docs/tools/debugger/).
+
+The output should look like this:
+
+```
+INFO Printer actor received a PING from software task
+INFO Current delay value 1900
+INFO Printer actor received a new PotentiometerValue: 607 from hardware task.
+
+INFO Current delay value 1800
+INFO Printer actor received a new PotentiometerValue: 1011 from hardware task.
+
+INFO Current delay value 1700
+INFO Printer actor received a new PotentiometerValue: 819 from hardware task.
+
+INFO Printer actor received a PING from software task
+```