Skip to content

Commit 52e4c7c

Browse files
authored
Merge pull request #4149 from embassy-rs/stm32-otg-fix-trdt
stm32/otg: calculate TRDT using AHB freq instead of kernel freq.
2 parents bd8021f + 0591d60 commit 52e4c7c

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

embassy-stm32/build.rs

+5
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,8 @@ fn main() {
647647
PeripheralRccKernelClock::Clock(clock) => clock_gen.gen_clock(p.name, clock),
648648
};
649649

650+
let bus_clock_frequency = clock_gen.gen_clock(p.name, &rcc.bus_clock);
651+
650652
// A refcount leak can result if the same field is shared by peripherals with different stop modes
651653
// This condition should be checked in stm32-data
652654
let stop_mode = match rcc.stop_mode {
@@ -660,6 +662,9 @@ fn main() {
660662
fn frequency() -> crate::time::Hertz {
661663
#clock_frequency
662664
}
665+
fn bus_frequency() -> crate::time::Hertz {
666+
#bus_clock_frequency
667+
}
663668

664669
const RCC_INFO: crate::rcc::RccInfo = unsafe {
665670
crate::rcc::RccInfo::new(

embassy-stm32/src/rcc/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ pub(crate) unsafe fn get_freqs() -> &'static Clocks {
9797

9898
pub(crate) trait SealedRccPeripheral {
9999
fn frequency() -> Hertz;
100+
#[allow(dead_code)]
101+
fn bus_frequency() -> Hertz;
100102
const RCC_INFO: RccInfo;
101103
}
102104

embassy-stm32/src/usb/otg.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ foreach_interrupt!(
549549
);
550550

551551
fn calculate_trdt<T: Instance>(speed: Dspd) -> u8 {
552-
let ahb_freq = T::frequency().0;
552+
let ahb_freq = T::bus_frequency().0;
553553
match speed {
554554
Dspd::HIGH_SPEED => {
555555
// From RM0431 (F72xx), RM0090 (F429), RM0390 (F446)

0 commit comments

Comments
 (0)