Пытаюсь получить минимальный по времени импульс.
Но получаю при установке GPIO_Speed_50MHz ВСЕГО порядка 600KHz (RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_4). Выжимал макс. 5MHz на делитете 16).
При простом цикле:
GPIOA->BSRR = GPIO_BSRR_BR9;
GPIOA->BSRR = GPIO_BSRR_BS9;
На PA8 (MCO - типа дебага проверок тактирования в stm32) вывожу половину реальной частоты тактирования RCC_MCO_PLLCLK_Div2, получаю как и требуется - 8MHz (16/2)
В чем может быть проблема? Куда уходит ресурс? Прерывания отключал - картина не меняется.
Должно же быть на GPIO теже 8MHz?
Помогите разобраться плз.
Вот код. Вроде все минимизировал для читаемости:
Код: Выделить всё
void main (void)
{
init_gpio();
while (1)
{
GPIOA->BSRR = GPIO_BSRR_BR9;
GPIOA->BSRR = GPIO_BSRR_BS9;
}
}
void init_pll(void)
{
RCC_DeInit(); // сброс настроек тактового генератора
RCC_HSEConfig(RCC_HSE_OFF); // отключение внешнего тактового генератора
//RCC_HSEConfig(RCC_HSE_ON);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_4); // тактирование от HSI с делителем 2: 8 / 2 * 4 = 16МГц
RCC_HSICmd(ENABLE);
RCC_PLLCmd(ENABLE); // Включаем PLL
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // На системную шину подаем тактирование с множителя PLLMUL
}
void init_gpio()
{
init_pll();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Тактуем порт
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);
}



