STM32 在 SystemCoreClock 110Mhz 输出的 gpio 上生成 22Mhz 时钟

STM32 generate 22Mhz clock on gpio out from SystemCoreClock 110Mhz

我想用我的 STM32L552 为 PCA9959 LED 驱动器生成时钟。 LED 驱动器需要一个 20 MHz (+/- 15%) 的外部时钟。我正在尝试在 STM32L552 的 PA8 端口上生成一个 22 MHz 的时钟。我设法在端口 PA8 上生成了一个 PWM,但我无法达到 ~22Mhz 的频率。我达到了最大 8Mhz。

PWM参数如下:

我不确定我是否正确填写了 pwm 参数。通常根据他的设置,我想我应该有一个占空比为 20% 的 22 MHz PWM。

PWM (MHz) = SystemCoreClock (MHz) / 预分频器 => 22MhZ = 110MHz / 5

我的时钟配置:

感谢您的帮助。

像这样输出高速时钟的最简单方法是使用 MCO 外设,而不是定时器。幸运的是,MCO 引脚是 PA8。也许设计您的电路板的人知道这一点并打算让您使用 MCO。阅读 the reference manual 以了解方法。

如果您确实想使用定时器来实现 22MHz,那么正如您正确识别的那样,您无法在 PWM 上获得 50% duty-cycle。我建议从 40% 或 60% 开始,output-compare 值为 2-out-of-5 或 3-out-of-5,而不是上面的 1。

PCA9959 数据表中没有详细说明所需的 mark-space 时钟比率是多少,但我猜 50% 以外的任何比率都可能是个问题。您最好将时钟除以偶数。要么只是将 110MHz 除以 6 并输出 18.33MHz,要么将您的核心放慢一点并除以 4(减少 PLL 的 N 参数)。

无论您使用 MCO 还是 PWM,都不要忘记将 GPIO 引脚模式设置为可用的最快转换速率。也许您正在测量的 8MHz 是通过错误的 GPIO 模式混淆了更快的时钟的结果。您可以使用带宽至少为 100MHz 的示波器对此进行测试。