Я пытаюсь сгенерировать тактовую частоту 1,4 МГц, используя STM32F103C8Tx, используя STM32CubeMX.
Прежде всего, в моем коде у меня есть контакт PB13 в качестве выхода, и в основном я переключаю его каждые две секунды. Это работает.
Теперь более важная часть. Вещи, которые я настроил в CubeMX:
Я скомпилировал сгенерированный код в IDE из OpenSTM32 и загрузил его. Светодиод мигает с заданным интервалом, но у меня нет выхода на пин B5 A7 (Timer3 канал 2). Это проверяется на осциллографе.
Код(основной):
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
//These two lines were manually added
HAL_TIM_Base_Start(&htim3);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(5000);
}
}
Остальные можно найти здесь .
Вы должны установить период для таймера в поле "Период счетчика (Регистр автоперезагрузки - значение 16 бит)" (третья строка). Это вместе с предделителем (первая строка) и частотой APB1 определяет частоту таймера.
Настройка «Импульс» для выходов ШИМ определяет рабочий цикл . Все выходы ШИМ для таймера 3 имеют одинаковую частоту (частоту таймера), но независимые настройки рабочего цикла (один на выход ШИМ).
Имейте в виду, что легко допустить ошибку один за другим. Это относится как к предделителю (например, 0 означает деление на 1), так и к периоду таймера. Например, в этом примере, где частота APB1 составляет 48 МГц, частота составляет 48 МГц / 3 / 51 = 313,725 кГц (а не, например, 48 МГц / 3 / 50 = 320 кГц). С другой стороны, для настройки ШИМ настройка представляет собой фактическое эффективное значение (не +1). Рабочий цикл составляет 45,1%, 64,7%, 13,7% и 5,9% соответственно.
(У меня есть аналогичная установка для другого процессора STM32, но я также настроен с STM32CubeMX и скомпилирован/запущен под OpenSTM32. Я проверил частоту и все четыре рабочих цикла на осциллографе (в пределах точности измерения).)
В вашем случае, предполагая, что частота APB1 на самом деле составляет 28 МГц, период счетчика 19 даст ровно 1,4000000 МГц (28 МГц/1/20) - хотя, если вы используете внутренний генератор, гарантируется не более трех значащих цифр (I обнаружил, что мой ошибся примерно на 0,37%, в пределах спецификации 1%). Если вы установите импульс ШИМ на 10, то рабочий цикл должен стать 50,0%.
Бенс Кауликс
Сезар Кирила
Питер Мортенсен
HAL_TIM_Base_Start(&htim3);
линия не нужна (я тоже не думаю, что это больно).Бенс Кауликс
Питер Мортенсен