aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-03-12 19:05:22 +0000
committerGitHub <[email protected]>2024-03-12 19:05:22 +0000
commit9101b9eb012332888512982b943f6141adb15f06 (patch)
tree0b4f3d7ad17d0864d0c024af52558bc08d1affe8 /examples
parent7c82583d56e7118a408fd317a1a3466eab678034 (diff)
parent84d21e959d98326ff4c92c7c2278fe356ff4e5c0 (diff)
Merge pull request #2650 from cschuhen/feature/bxcan_pac
Use stm32-metapac for BXCAN.
Diffstat (limited to 'examples')
-rw-r--r--examples/stm32f1/src/bin/can.rs15
-rw-r--r--examples/stm32f4/src/bin/can.rs7
-rw-r--r--examples/stm32f7/src/bin/can.rs21
3 files changed, 26 insertions, 17 deletions
diff --git a/examples/stm32f1/src/bin/can.rs b/examples/stm32f1/src/bin/can.rs
index c1c4f8359..00d61096f 100644
--- a/examples/stm32f1/src/bin/can.rs
+++ b/examples/stm32f1/src/bin/can.rs
@@ -3,9 +3,10 @@
3 3
4use defmt::*; 4use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_stm32::can::bxcan::filter::Mask32; 6use embassy_stm32::can::{
7use embassy_stm32::can::bxcan::{Fifo, Frame, Id, StandardId}; 7 filter, Can, Fifo, Frame, Id, Rx0InterruptHandler, Rx1InterruptHandler, SceInterruptHandler, StandardId,
8use embassy_stm32::can::{Can, Rx0InterruptHandler, Rx1InterruptHandler, SceInterruptHandler, TxInterruptHandler}; 8 TxInterruptHandler,
9};
9use embassy_stm32::peripherals::CAN; 10use embassy_stm32::peripherals::CAN;
10use embassy_stm32::{bind_interrupts, Config}; 11use embassy_stm32::{bind_interrupts, Config};
11use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
@@ -31,7 +32,7 @@ async fn main(_spawner: Spawner) {
31 32
32 can.as_mut() 33 can.as_mut()
33 .modify_filters() 34 .modify_filters()
34 .enable_bank(0, Fifo::Fifo0, Mask32::accept_all()); 35 .enable_bank(0, Fifo::Fifo0, filter::Mask32::accept_all());
35 36
36 can.as_mut() 37 can.as_mut()
37 .modify_config() 38 .modify_config()
@@ -45,16 +46,16 @@ async fn main(_spawner: Spawner) {
45 46
46 let mut i: u8 = 0; 47 let mut i: u8 = 0;
47 loop { 48 loop {
48 let tx_frame = Frame::new_data(unwrap!(StandardId::new(i as _)), [i]); 49 let tx_frame = Frame::new_data(unwrap!(StandardId::new(i as _)), [i, 0, 1, 2, 3, 4, 5, 6]);
49 can.write(&tx_frame).await; 50 can.write(&tx_frame).await;
50 51
51 match can.read().await { 52 match can.read().await {
52 Ok(env) => match env.frame.id() { 53 Ok(env) => match env.frame.id() {
53 Id::Extended(id) => { 54 Id::Extended(id) => {
54 defmt::println!("Extended Frame id={:x}", id.as_raw()); 55 defmt::println!("Extended Frame id={:x} {:02x}", id.as_raw(), env.frame.data().unwrap());
55 } 56 }
56 Id::Standard(id) => { 57 Id::Standard(id) => {
57 defmt::println!("Standard Frame id={:x}", id.as_raw()); 58 defmt::println!("Standard Frame id={:x} {:02x}", id.as_raw(), env.frame.data().unwrap());
58 } 59 }
59 }, 60 },
60 Err(err) => { 61 Err(err) => {
diff --git a/examples/stm32f4/src/bin/can.rs b/examples/stm32f4/src/bin/can.rs
index d074b4265..b20af8cf1 100644
--- a/examples/stm32f4/src/bin/can.rs
+++ b/examples/stm32f4/src/bin/can.rs
@@ -4,9 +4,10 @@
4use defmt::*; 4use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_stm32::bind_interrupts; 6use embassy_stm32::bind_interrupts;
7use embassy_stm32::can::bxcan::filter::Mask32; 7use embassy_stm32::can::filter::Mask32;
8use embassy_stm32::can::bxcan::{Fifo, Frame, StandardId}; 8use embassy_stm32::can::{
9use embassy_stm32::can::{Can, Rx0InterruptHandler, Rx1InterruptHandler, SceInterruptHandler, TxInterruptHandler}; 9 Can, Fifo, Frame, Rx0InterruptHandler, Rx1InterruptHandler, SceInterruptHandler, StandardId, TxInterruptHandler,
10};
10use embassy_stm32::gpio::{Input, Pull}; 11use embassy_stm32::gpio::{Input, Pull};
11use embassy_stm32::peripherals::CAN1; 12use embassy_stm32::peripherals::CAN1;
12use embassy_time::Instant; 13use embassy_time::Instant;
diff --git a/examples/stm32f7/src/bin/can.rs b/examples/stm32f7/src/bin/can.rs
index bcfdb67a8..c3e14bbf4 100644
--- a/examples/stm32f7/src/bin/can.rs
+++ b/examples/stm32f7/src/bin/can.rs
@@ -1,16 +1,18 @@
1#![no_std] 1#![no_std]
2#![no_main] 2#![no_main]
3 3
4use core::num::{NonZeroU16, NonZeroU8};
5
4use defmt::*; 6use defmt::*;
5use embassy_executor::Spawner; 7use embassy_executor::Spawner;
6use embassy_stm32::bind_interrupts; 8use embassy_stm32::can::filter::Mask32;
7use embassy_stm32::can::bxcan::filter::Mask32;
8use embassy_stm32::can::bxcan::{Fifo, Frame, StandardId};
9use embassy_stm32::can::{ 9use embassy_stm32::can::{
10 Can, CanTx, Rx0InterruptHandler, Rx1InterruptHandler, SceInterruptHandler, TxInterruptHandler, 10 Can, CanTx, Fifo, Frame, Rx0InterruptHandler, Rx1InterruptHandler, SceInterruptHandler, StandardId,
11 TxInterruptHandler,
11}; 12};
12use embassy_stm32::gpio::{Input, Pull}; 13use embassy_stm32::gpio::{Input, Pull};
13use embassy_stm32::peripherals::CAN3; 14use embassy_stm32::peripherals::CAN3;
15use embassy_stm32::{bind_interrupts, can};
14use static_cell::StaticCell; 16use static_cell::StaticCell;
15use {defmt_rtt as _, panic_probe as _}; 17use {defmt_rtt as _, panic_probe as _};
16 18
@@ -22,7 +24,7 @@ bind_interrupts!(struct Irqs {
22}); 24});
23 25
24#[embassy_executor::task] 26#[embassy_executor::task]
25pub async fn send_can_message(tx: &'static mut CanTx<'static, 'static, CAN3>) { 27pub async fn send_can_message(tx: &'static mut CanTx<'static, CAN3>) {
26 loop { 28 loop {
27 let frame = Frame::new_data(unwrap!(StandardId::new(0 as _)), [0]); 29 let frame = Frame::new_data(unwrap!(StandardId::new(0 as _)), [0]);
28 tx.write(&frame).await; 30 tx.write(&frame).await;
@@ -51,13 +53,18 @@ async fn main(spawner: Spawner) {
51 53
52 can.as_mut() 54 can.as_mut()
53 .modify_config() 55 .modify_config()
54 .set_bit_timing(0x001c0001) // http://www.bittiming.can-wiki.info/ 56 .set_bit_timing(can::util::NominalBitTiming {
57 prescaler: NonZeroU16::new(2).unwrap(),
58 seg1: NonZeroU8::new(13).unwrap(),
59 seg2: NonZeroU8::new(2).unwrap(),
60 sync_jump_width: NonZeroU8::new(1).unwrap(),
61 }) // http://www.bittiming.can-wiki.info/
55 .set_loopback(true) 62 .set_loopback(true)
56 .enable(); 63 .enable();
57 64
58 let (tx, mut rx) = can.split(); 65 let (tx, mut rx) = can.split();
59 66
60 static CAN_TX: StaticCell<CanTx<'static, 'static, CAN3>> = StaticCell::new(); 67 static CAN_TX: StaticCell<CanTx<'static, CAN3>> = StaticCell::new();
61 let tx = CAN_TX.init(tx); 68 let tx = CAN_TX.init(tx);
62 spawner.spawn(send_can_message(tx)).unwrap(); 69 spawner.spawn(send_can_message(tx)).unwrap();
63 70