aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-04-27 22:58:53 +0000
committerGitHub <[email protected]>2025-04-27 22:58:53 +0000
commit1d2f0add77f7344f0060150f1ff4d56f50d5eed5 (patch)
treebb7f6622636095b268918c25e6ee202d5a7b98cc /embassy-stm32
parente5e2db0ddbbd4b2d0fd5f8d65c7aba37f1037ae3 (diff)
parenteaec6c81651aaf59212a8def080bbd279192f357 (diff)
Merge pull request #4137 from cschuhen/stm32-can-data-len
Stm32 can data len
Diffstat (limited to 'embassy-stm32')
-rw-r--r--embassy-stm32/src/can/bxcan/registers.rs4
-rw-r--r--embassy-stm32/src/can/fd/peripheral.rs4
-rw-r--r--embassy-stm32/src/can/frame.rs23
-rw-r--r--embassy-stm32/src/opamp.rs6
4 files changed, 21 insertions, 16 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 39c4112ad..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));
@@ -190,7 +190,7 @@ impl Registers {
190 DataLength::Fdcan(len) => len, 190 DataLength::Fdcan(len) => len,
191 DataLength::Classic(len) => len, 191 DataLength::Classic(len) => len,
192 }; 192 };
193 if len as usize > ClassicData::MAX_DATA_LEN { 193 if len as usize > 8 {
194 return None; 194 return None;
195 } 195 }
196 196
diff --git a/embassy-stm32/src/can/frame.rs b/embassy-stm32/src/can/frame.rs
index f621b8bd5..0fbab053b 100644
--- a/embassy-stm32/src/can/frame.rs
+++ b/embassy-stm32/src/can/frame.rs
@@ -104,15 +104,13 @@ pub trait CanHeader: Sized {
104#[derive(Debug, Copy, Clone)] 104#[derive(Debug, Copy, Clone)]
105#[cfg_attr(feature = "defmt", derive(defmt::Format))] 105#[cfg_attr(feature = "defmt", derive(defmt::Format))]
106pub struct ClassicData { 106pub struct ClassicData {
107 pub(crate) bytes: [u8; Self::MAX_DATA_LEN], 107 pub(crate) bytes: [u8; 8],
108} 108}
109 109
110impl ClassicData { 110impl ClassicData {
111 pub(crate) const MAX_DATA_LEN: usize = 8;
112 /// Creates a data payload from a raw byte slice. 111 /// Creates a data payload from a raw byte slice.
113 /// 112 ///
114 /// Returns `None` if `data` is more than 64 bytes (which is the maximum) or 113 /// Returns `FrameCreateError` if `data` is more than 8 bytes (which is the maximum).
115 /// cannot be represented with an FDCAN DLC.
116 pub fn new(data: &[u8]) -> Result<Self, FrameCreateError> { 114 pub fn new(data: &[u8]) -> Result<Self, FrameCreateError> {
117 if data.len() > 8 { 115 if data.len() > 8 {
118 return Err(FrameCreateError::InvalidDataLength); 116 return Err(FrameCreateError::InvalidDataLength);
@@ -211,12 +209,17 @@ impl Frame {
211 209
212 /// Get reference to data 210 /// Get reference to data
213 pub fn data(&self) -> &[u8] { 211 pub fn data(&self) -> &[u8] {
214 &self.data.raw() 212 &self.data.raw()[..self.can_header.len as usize]
213 }
214
215 /// Get reference to underlying 8-byte raw data buffer, some bytes on the tail might be undefined.
216 pub fn raw_data(&self) -> &[u8] {
217 self.data.raw()
215 } 218 }
216 219
217 /// Get mutable reference to data 220 /// Get mutable reference to data
218 pub fn data_mut(&mut self) -> &mut [u8] { 221 pub fn data_mut(&mut self) -> &mut [u8] {
219 self.data.raw_mut() 222 &mut self.data.raw_mut()[..self.can_header.len as usize]
220 } 223 }
221 224
222 /// Get priority of frame 225 /// Get priority of frame
@@ -260,7 +263,7 @@ impl embedded_can::Frame for Frame {
260 self.can_header.len as usize 263 self.can_header.len as usize
261 } 264 }
262 fn data(&self) -> &[u8] { 265 fn data(&self) -> &[u8] {
263 &self.data.raw() 266 &self.data()
264 } 267 }
265} 268}
266 269
@@ -405,12 +408,12 @@ impl FdFrame {
405 408
406 /// Get reference to data 409 /// Get reference to data
407 pub fn data(&self) -> &[u8] { 410 pub fn data(&self) -> &[u8] {
408 &self.data.raw() 411 &self.data.raw()[..self.can_header.len as usize]
409 } 412 }
410 413
411 /// Get mutable reference to data 414 /// Get mutable reference to data
412 pub fn data_mut(&mut self) -> &mut [u8] { 415 pub fn data_mut(&mut self) -> &mut [u8] {
413 self.data.raw_mut() 416 &mut self.data.raw_mut()[..self.can_header.len as usize]
414 } 417 }
415} 418}
416 419
@@ -448,7 +451,7 @@ impl embedded_can::Frame for FdFrame {
448 self.can_header.len as usize 451 self.can_header.len as usize
449 } 452 }
450 fn data(&self) -> &[u8] { 453 fn data(&self) -> &[u8] {
451 &self.data.raw() 454 &self.data()
452 } 455 }
453} 456}
454 457
diff --git a/embassy-stm32/src/opamp.rs b/embassy-stm32/src/opamp.rs
index a76389495..b368df6c3 100644
--- a/embassy-stm32/src/opamp.rs
+++ b/embassy-stm32/src/opamp.rs
@@ -422,11 +422,13 @@ impl<'d, T: Instance> OpAmp<'d, T> {
422 422
423 T::regs().csr().modify(|w| match pair { 423 T::regs().csr().modify(|w| match pair {
424 OpAmpDifferentialPair::P => { 424 OpAmpDifferentialPair::P => {
425 defmt::info!("p calibration. offset: {}", mid); 425 #[cfg(feature = "defmt")]
426 defmt::debug!("opamp p calibration. offset: {}", mid);
426 w.set_trimoffsetp(mid); 427 w.set_trimoffsetp(mid);
427 } 428 }
428 OpAmpDifferentialPair::N => { 429 OpAmpDifferentialPair::N => {
429 defmt::info!("n calibration. offset: {}", mid); 430 #[cfg(feature = "defmt")]
431 defmt::debug!("opamp n calibration. offset: {}", mid);
430 w.set_trimoffsetn(mid); 432 w.set_trimoffsetn(mid);
431 } 433 }
432 }); 434 });