aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32
diff options
context:
space:
mode:
authorAdam Greig <[email protected]>2025-04-18 17:19:21 +0100
committerAdam Greig <[email protected]>2025-04-18 17:19:21 +0100
commit17d3adac4b9f1fe4458faba8fa467d13cf1ceac1 (patch)
tree57698440be2789898a32e4bbb44c90bec74fb005 /embassy-stm32
parentdc3b83f9c83ac9316c0e623af1726fe975557ad3 (diff)
STM32: Fix CAN transmit on bxcan targets
Diffstat (limited to 'embassy-stm32')
-rw-r--r--embassy-stm32/src/can/bxcan/registers.rs4
-rw-r--r--embassy-stm32/src/can/fd/peripheral.rs2
-rw-r--r--embassy-stm32/src/can/frame.rs5
3 files changed, 8 insertions, 3 deletions
diff --git a/embassy-stm32/src/can/bxcan/registers.rs b/embassy-stm32/src/can/bxcan/registers.rs
index c5467dfe8..c295b0f50 100644
--- a/embassy-stm32/src/can/bxcan/registers.rs
+++ b/embassy-stm32/src/can/bxcan/registers.rs
@@ -299,9 +299,9 @@ impl Registers {
299 mb.tdtr().write(|w| w.set_dlc(frame.header().len() as u8)); 299 mb.tdtr().write(|w| w.set_dlc(frame.header().len() as u8));
300 300
301 mb.tdlr() 301 mb.tdlr()
302 .write(|w| w.0 = u32::from_ne_bytes(unwrap!(frame.data()[0..4].try_into()))); 302 .write(|w| w.0 = u32::from_ne_bytes(unwrap!(frame.raw_data()[0..4].try_into())));
303 mb.tdhr() 303 mb.tdhr()
304 .write(|w| w.0 = u32::from_ne_bytes(unwrap!(frame.data()[4..8].try_into()))); 304 .write(|w| w.0 = u32::from_ne_bytes(unwrap!(frame.raw_data()[4..8].try_into())));
305 let id: IdReg = frame.id().into(); 305 let id: IdReg = frame.id().into();
306 mb.tir().write(|w| { 306 mb.tir().write(|w| {
307 w.0 = id.0; 307 w.0 = id.0;
diff --git a/embassy-stm32/src/can/fd/peripheral.rs b/embassy-stm32/src/can/fd/peripheral.rs
index 014f31c87..4873ee444 100644
--- a/embassy-stm32/src/can/fd/peripheral.rs
+++ b/embassy-stm32/src/can/fd/peripheral.rs
@@ -75,7 +75,7 @@ impl Registers {
75 let mailbox = self.tx_buffer_element(bufidx); 75 let mailbox = self.tx_buffer_element(bufidx);
76 mailbox.reset(); 76 mailbox.reset();
77 put_tx_header(mailbox, header); 77 put_tx_header(mailbox, header);
78 put_tx_data(mailbox, &buffer[..header.len() as usize]); 78 put_tx_data(mailbox, buffer);
79 79
80 // Set <idx as Mailbox> as ready to transmit 80 // Set <idx as Mailbox> as ready to transmit
81 self.regs.txbar().modify(|w| w.set_ar(bufidx, true)); 81 self.regs.txbar().modify(|w| w.set_ar(bufidx, true));
diff --git a/embassy-stm32/src/can/frame.rs b/embassy-stm32/src/can/frame.rs
index a1d773f2c..a4d5a9752 100644
--- a/embassy-stm32/src/can/frame.rs
+++ b/embassy-stm32/src/can/frame.rs
@@ -212,6 +212,11 @@ impl Frame {
212 &self.data.raw()[..self.can_header.len as usize] 212 &self.data.raw()[..self.can_header.len as usize]
213 } 213 }
214 214
215 /// Get reference to underlying 8-byte raw data buffer
216 pub(crate) fn raw_data(&self) -> &[u8] {
217 self.data.raw()
218 }
219
215 /// Get mutable reference to data 220 /// Get mutable reference to data
216 pub fn data_mut(&mut self) -> &mut [u8] { 221 pub fn data_mut(&mut self) -> &mut [u8] {
217 &mut self.data.raw_mut()[..self.can_header.len as usize] 222 &mut self.data.raw_mut()[..self.can_header.len as usize]