diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-04-27 22:58:53 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-04-27 22:58:53 +0000 |
| commit | 1d2f0add77f7344f0060150f1ff4d56f50d5eed5 (patch) | |
| tree | bb7f6622636095b268918c25e6ee202d5a7b98cc | |
| parent | e5e2db0ddbbd4b2d0fd5f8d65c7aba37f1037ae3 (diff) | |
| parent | eaec6c81651aaf59212a8def080bbd279192f357 (diff) | |
Merge pull request #4137 from cschuhen/stm32-can-data-len
Stm32 can data len
| -rw-r--r-- | embassy-stm32/src/can/bxcan/registers.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/can/fd/peripheral.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/can/frame.rs | 23 | ||||
| -rw-r--r-- | embassy-stm32/src/opamp.rs | 6 |
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))] |
| 106 | pub struct ClassicData { | 106 | pub struct ClassicData { |
| 107 | pub(crate) bytes: [u8; Self::MAX_DATA_LEN], | 107 | pub(crate) bytes: [u8; 8], |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | impl ClassicData { | 110 | impl 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 | }); |
