Для электронщиков и радиолюбителей

Руководство по настройке системы тактирования микроконтроллеров AT32F435/437

Руководство по настройке системы тактирования микроконтроллеров AT32F435/437

Микроконтроллеры AT32F435 и AT32F437 от Artery Technology представляют собой мощные устройства для широкого спектра встраиваемых приложений. Одним из ключевых аспектов работы с этими микроконтроллерами является правильная настройка тактовых сигналов, что обеспечивает стабильную и эффективную работу системы. В этой статье мы рассмотрим основы работы с тактовой системой AT32F435/437, используя официальное руководство AN0084.

Введение в тактовую систему AT32F435/437

Тактовая система (Clock and Reset Management, CRM) — это фундаментальный компонент любого микроконтроллера, определяющий его производительность и энергопотребление. В AT32F435/437 тактовая система предлагает гибкие возможности настройки:

  1. Три основных источника системного тактового сигнала (SCLK):
    • HEXT (высокоскоростной внешний генератор 4-25 МГц)
    • HICK (внутренний RC-генератор 48 МГц или 8 МГц)
    • PLL (программируемый умножитель частоты)
  2. Возможность генерации тактовых сигналов для различных шин (AHB, APB1, APB2) с индивидуальными делителями частоты
  3. Поддержка специальных функций, таких как детектор сбоя тактового сигнала

Методы конфигурации тактовой системы

Руководство AN0084 описывает два основных подхода к настройке тактовой системы:

1. Ручная настройка с использованием библиотечных функций

Для ручной настройки используются функции из библиотеки BSP (Board Support Package) от Artery. Основные шаги конфигурации:

  1. Сброс CRM (crm_reset())
  2. Установка делителя для Flash-памяти
  3. Настройка источника тактового сигнала (HEXT/HICK)
  4. Конфигурация PLL
  5. Установка делителей для шин
  6. Переключение системного тактового сигнала
  7. Обновление частоты ядра

Пример конфигурации для получения 288 МГц:

void system_clock_config(void)
{
    crm_reset();
    flash_clock_divider_set(FLASH_CLOCK_DIV_3);
    
    // Настройка HEXT
    crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE);
    while(crm_hext_stable_wait() == ERROR) {}
    
    // Конфигурация PLL: 8MHz * 144 / (1 * 4) = 288MHz
    crm_pll_config(CRM_PLL_SOURCE_HEXT, 144, 1, CRM_PLL_FR_4);
    crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);
    while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET) {}
    
    // Настройка делителей шин
    crm_ahb_div_set(CRM_AHB_DIV_1);
    crm_apb2_div_set(CRM_APB2_DIV_2);
    crm_apb1_div_set(CRM_APB1_DIV_2);
    
    // Переключение на PLL
    crm_auto_step_mode_enable(TRUE);
    crm_sysclk_switch(CRM_SCLK_PLL);
    while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL) {}
    crm_auto_step_mode_enable(FALSE);
    
    system_core_clock_update();
}

2. Использование графического инструмента Clock Configuration Tool

Artery предоставляет удобный графический инструмент для настройки тактовой системы. Основные возможности:

  1. Визуальное представление тактовой системы
  2. Автоматический расчет параметров PLL
  3. Генерация готового кода для интеграции в проект

Работа с инструментом включает:

  • Создание нового проекта
  • Выбор микроконтроллера
  • Настройка параметров тактовой системы
  • Генерация кода

Практические примеры

Пример 1: Переключение системного тактового сигнала

Демонстрирует динамическое переключение между разными частотами (64 МГц и 96 МГц) во время работы:

void switch_system_clock(void)
{
    static uint8_t clock_source = 0;
    
    if(clock_source == 0)
    {
        sclk_96m_hext_config();
        clock_source = 1;
    }
    else
    {
        sclk_64m_hick_config();
        clock_source = 0;
    }
}

Пример 2: Детектор сбоя тактового сигнала

Показывает, как обрабатывать сбои внешнего генератора:

void NMI_Handler(void)
{
    if(crm_flag_get(CRM_CLOCK_FAILURE_INT_FLAG) != RESET)
    {
        crm_clock_failure_detection_enable(FALSE);
        sclk_288m_hick_config(); // Аварийный переход на внутренний генератор
        crm_flag_clear(CRM_CLOCK_FAILURE_INT_FLAG);
    }
}

Пример 3: Автоматический расчет параметров PLL

Демонстрирует автоматический подбор параметров PLL для заданной частоты:

error_status calculate_status;
uint16_t pll_ns, pll_ms, pll_fr;

calculate_status = crm_pll_parameter_calculate(
    CRM_PLL_SOURCE_HEXT, 
    200000000, 
    &pll_ns, 
    &pll_ms, 
    &pll_fr
);

Рекомендации и советы

  1. При использовании внешнего генератора (HEXT) с частотой, отличной от 8 МГц, необходимо:
    • Указать фактическую частоту в инструменте конфигурации
    • Обновить значение HEXT_VALUE в файле at32f4xx_conf.h
  2. Для частот PLL выше 108 МГц обязательно включать режим плавного переключения (crm_auto_step_mode_enable)
  3. При настройке USB необходимо обеспечить точные 48 МГц, для чего можно использовать:
    • HICK 48 МГц
    • PLL с соответствующим делителем
  4. Для отладки рекомендуется использовать вывод CLKOUT для мониторинга тактового сигнала

Итоги

Микроконтроллеры AT32F435/437 предлагают гибкую и мощную тактовую систему, которая при правильной настройке позволяет достичь оптимального баланса между производительностью и энергопотреблением. Использование официальных инструментов и библиотек от Artery значительно упрощает процесс конфигурации и позволяет избежать распространенных ошибок.

Для более глубокого изучения рекомендуется:

  1. Изучить полное руководство по микроконтроллеру (Reference Manual)
  2. Поэкспериментировать с примерами из BSP
  3. Использовать Clock Configuration Tool для визуального представления тактовой системы
  4. Проверять стабильность работы на разных частотах с помощью осциллографа

Правильная настройка тактовой системы — это первый шаг к созданию стабильного и эффективного устройства на базе AT32F435/437.