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;
/*...*/
当你在循环中使用它时,循环会增加额外的开销。
我正在 运行为我的 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;
/*...*/
当你在循环中使用它时,循环会增加额外的开销。