Nucleo 上的 STM32L476,不能 运行 在 80 Mhz

STM32L476 on Nucleo, can't run at 80 Mhz

我正在 运行为我的 Nucleo-L476RG 开发板的一个全新的空白项目编写以下代码:

GPIOA->BSRR = GPIO_PIN_4;
GPIOA->BRR = GPIO_PIN_4;

时钟配置是默认的,如下:

我希望在我的示波器上看到一个 80 Mhz 的时钟,但我只看到 10 Mhz。 当我启用 "Master Clock Output" 时,我可以看到 80 Mhz 但我的代码似乎没有以该速度 运行。

知道是什么原因造成的吗?

I am expecting to see on my oscilloscope a 80 Mhz clock but I only see 10 Mhz.

为什么您期望这两个 C 语句将在一个 CPU 时钟内执行?你觉得可能吗? 当然不是

翻译成

  str r2, [r3]
  str r2, [r3, #4]

str指令占用2个时钟。其中两个是 4 个时钟。如果你从 FLASH 运行 你需要添加等待状态。所以这将需要大约 8 个时钟 - 你会看到 10MHz。您可以尝试从 SRAM 运行 它们会更快。

当然只有你有一个接一个的指令才有效

GPIOA->BSRR = GPIO_PIN_4;
GPIOA->BRR = GPIO_PIN_4;
GPIOA->BSRR = GPIO_PIN_4;
GPIOA->BRR = GPIO_PIN_4;
GPIOA->BSRR = GPIO_PIN_4;
GPIOA->BRR = GPIO_PIN_4;
GPIOA->BSRR = GPIO_PIN_4;
GPIOA->BRR = GPIO_PIN_4;
GPIOA->BSRR = GPIO_PIN_4;
GPIOA->BRR = GPIO_PIN_4;
/*...*/

当你在循环中使用它时,循环会增加额外的开销。