Skip to content
This repository was archived by the owner on Mar 7, 2026. It is now read-only.

Commit e3a979d

Browse files
committed
common/stm32/timing: Treat _no_delay frequency specially
* Current _clk_delay strategy is better approximated by a proportional law, but _no_delay does not fit into that nicely. * Also update delay macros with values obtained from calibration.
1 parent 1070532 commit e3a979d

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

src/platforms/common/stm32/timing_stm32.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,26 @@ __attribute__((weak)) void platform_ospeed_update(const uint32_t frequency)
195195
* per delay loop count with 2 delay loops per clock
196196
*/
197197

198+
#if defined(STM32F4)
199+
/* Values for STM32F411 at 96 MHz */
200+
#define USED_SWD_CYCLES_NODELAY 12
201+
#define USED_SWD_CYCLES 24
202+
#define CYCLES_PER_CNT 12
203+
#elif defined(STM32F1)
198204
/* Values for STM32F103 at 72 MHz */
205+
#define USED_SWD_CYCLES_NODELAY 14
206+
#define USED_SWD_CYCLES 30
207+
#define CYCLES_PER_CNT 14
208+
#elif defined(STM32F0)
209+
/* Values for STM32F072 at 48 MHz */
210+
#define USED_SWD_CYCLES_NODELAY 24
211+
#define USED_SWD_CYCLES 30
212+
#define CYCLES_PER_CNT 17
213+
#else
214+
/* Inherit defaults for other platforms (F3, F7) */
199215
#define USED_SWD_CYCLES 22
200216
#define CYCLES_PER_CNT 10
217+
#endif
201218

202219
void platform_max_frequency_set(const uint32_t frequency)
203220
{
@@ -259,7 +276,9 @@ uint32_t platform_max_frequency_get(void)
259276
#else
260277
uint32_t result = rcc_get_bus_clk_freq(RCC_AHBCLK);
261278
#endif
262-
result /= USED_SWD_CYCLES + CYCLES_PER_CNT * target_clk_divider;
279+
if (target_clk_divider == UINT32_MAX)
280+
return result / USED_SWD_CYCLES_NODELAY;
281+
result /= USED_SWD_CYCLES + CYCLES_PER_CNT * target_clk_divider * 2U;
263282
return result;
264283
#endif
265284
}

0 commit comments

Comments
 (0)