Товарищи, мне кажется, у меня аналогичная непонятка.
SYSCLK на MCO 8мгц, из HSI, судя по коду и регистрам в debug.
А код, аналогичный gpio_toggle из примеров от stm32f303 выдаёт на ножке 2мгц, вместо 4мгц. Смотрю осциллографом.
Делители AHB,APB1,APB2 = единицы. Компилятор оптимизирует код. Пошаговое исполнение asm инструкций меняет состояние выхода с каждым шагом.
STM32F303 я уже изучил неплохо, а вот тут F100 меня сбивает с толку.
Инициализация сгенерирована coide, разве что закомментировал вызов SetSysClockTo24(), в которой мк пытается запустить HSE+PLL.
Поведение HSI+PLL адекватное, но частота на выходе gpio всёравно в 2 раза ниже ожидаемой.
дизассемблер:
26 GPIOC->BRR = GPIO_Pin_9;
0800063a: str r1, [r0, #20]
27 GPIOC->BSRR = GPIO_Pin_9;
0800063c: str r1, [r0, #16]
28 GPIOC->BRR = GPIO_Pin_9;
0800063e: str r1, [r0, #20]
29 GPIOC->BSRR = GPIO_Pin_9;
08000640: str r1, [r0, #16]
Коммент к аналогичному коду из документации к F3Discovery:
In this example, HCLK is configured at 72 MHz so PE14 and PE15 toggles at 36MHz.
To achieve the maximum IO toggling frequency, you have to configure your compiler
options for high speed optimization.
Мне кажется, автор темы столкнулся с такой-же непоняткой, но ответа я так и не вижу.
вот нашел в одной статье:
The User Manual for the STM32F0 claims that the the output pins fastest toggle speed is every two clock cycles. Assuming a maximum operation speed of 48MHz, the fastest toggle speed for the GPIO on the STM32f0 is 24 MHZ, which means the highest frequency square wave that can be produced by the GPIO is 12MHz.
видимо и нас с F100 касается.