ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Ρ‚Π°ΠΊΡ‚ΠΎΠ²Ρ‹Ρ… сигналов (clock configuration) β€” основа ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ любого ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° STM32. ΠžΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ настройки зависит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΈ энСргопотрСблСниС, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ сбоям. Новички часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: ΠΏΠΎΡ‡Π΅ΠΌΡƒ STM32F4 Π½Π΅ запускаСтся Π½Π° максимальной частотС? ΠŸΠΎΡ‡Π΅ΠΌΡƒ HAL_RCC_ClockConfig() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ? Или ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ APB1 ΠΈ APB2 для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с TIM ΠΈ USART?

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всю Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ тактирования β€” ΠΎΡ‚ внСшнСго ΠΊΠ²Π°Ρ€Ρ†Π° Π΄ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΡˆΠΈΠ½Ρ‹, рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² PLL ΠΈ HSI), ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° для STM32CubeMX, HAL ΠΈ LL. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ скрытым ограничСниям Π² Π΄Π°Ρ‚Π°ΡˆΠΈΡ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΌΠ΅Π»ΠΊΠΈΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π° STM32H7 нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HSE Π²Ρ‹ΡˆΠ΅ 50 ΠœΠ“Ρ† Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки CSS.

1. АрхитСктура тактирования STM32: Π±Π»ΠΎΠΊ-схСма ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ элСмСнты

ВсС ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ STM32 построСны Π½Π° основС модуля RCC (Reset and Clock Control), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт источниками Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сигнала, дСлитСлями ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Π°ΠΌΠΈ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • πŸ”Ή Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ: HSI (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ 16/64 ΠœΠ“Ρ†), HSE (внСшний ΠΊΠ²Π°Ρ€Ρ†/Ρ€Π΅Π·ΠΎΠ½Π°Ρ‚ΠΎΡ€), LSI (40 ΠΊΠ“Ρ† для RTC), LSE (32.768 ΠΊΠ“Ρ† для RTC).
  • πŸ”Ή PLL: Ρ„Π°Π·ΠΎΠ²Ρ‹ΠΉ автоподстройщик частоты, позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ высокиС частоты (Π΄ΠΎ 480 ΠœΠ“Ρ† Π½Π° STM32H7) ΠΈΠ· низкочастотного источника.
  • πŸ”Ή Π”Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ: AHB, APB1/2, RTC β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ частоту для ядра, ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ².
  • πŸ”Ή ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Ρ‹: Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ источник для SYSCLK, HCLK, PCLK1/2.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊ-схСмы для STM32F4:


HSI (16 MHz) β†’ /M β†’ PLL β†’ Γ—N β†’ SYSCLK (Π΄ΠΎ 180 MHz)

↓

HSE (8 MHz) β†’ /P β†’ PLL β†’ Γ—Q β†’ 48 MHz (USB, RNG)

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: Π½Π΅ всС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ частот Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹. НапримСр, Π½Π° STM32F1 максимальная частота SYSCLK β€” 72 ΠœΠ“Ρ†, Π° Π½Π° STM32F7 β€” 216 ΠœΠ“Ρ†. ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ Π²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π·Ρƒ.

πŸ“Š Какой источник тактирования Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
  • HSI (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€)
  • HSE (внСшний ΠΊΠ²Π°Ρ€Ρ†)
  • PLL (с автоподстройкой)
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

2. Пошаговая настройка Clock Configuration Π² STM32CubeMX

STM32CubeMX Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° для тактирования, Π½ΠΎ слСпоС Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ инструмСнту Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ ошибками. Рассмотрим процСсс Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ STM32F407G-DISC1:

  1. Π’Ρ‹Π±ΠΎΡ€ источника: Π²ΠΊΠ»Π°Π΄ΠΊΠ° Clock Configuration β†’ установитС HSE Π½Π° 8 ΠœΠ“Ρ† (стандарт для ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚).
  2. Настройка PLL:
    • πŸ”§ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: HSE (внСшний ΠΊΠ²Π°Ρ€Ρ† ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π΅Π΅ HSI).
    • πŸ”§ PLLM (Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ частоты): 8 (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ 1 ΠœΠ“Ρ†).
    • πŸ”§ PLLN (ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ): 336 (для Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ частоты 336 ΠœΠ“Ρ†).
    • πŸ”§ PLLP (Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ для SYSCLK): 2 β†’ 168 ΠœΠ“Ρ†.
    • πŸ”§ PLLQ (для USB/RNG): 7 β†’ 48 ΠœΠ“Ρ†.
  • Π”Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ ΡˆΠΈΠ½Ρ‹: AHB = 1 (168 ΠœΠ“Ρ†), APB1 = 4 (42 ΠœΠ“Ρ†), APB2 = 2 (84 ΠœΠ“Ρ†).
  • ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² main.c появится функция SystemClock_Config(). Π’Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° соотвСтствиС ограничСниям:

    
    

    void SystemClock_Config(void) {

    RCC_OscInitTypeDef RCC_OscInitStruct = {0};

    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    // Настройка PLL с HSE

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

    RCC_OscInitStruct.HSEState = RCC_HSE_ON;

    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

    RCC_OscInitStruct.PLL.PLLM = 8;

    RCC_OscInitStruct.PLL.PLLN = 336;

    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;

    RCC_OscInitStruct.PLL.PLLQ = 7;

    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {

    Error_Handler();

    }

    // ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ

    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

    |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {

    Error_Handler();

    }

    }

    β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π°

    Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

    3. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

    Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ настройкС тактирования. Π’ΠΎΡ‚ самыС распространённыС:

    ΠžΡˆΠΈΠ±ΠΊΠ°ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Π Π΅ΡˆΠ΅Π½ΠΈΠ΅
    ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ стартуСтНСвСрная частота HSE Π² STM32CubeMX (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠΊΠ°Π·Π°Π½ΠΎ 25 ΠœΠ“Ρ†, Π° Π½Π° ΠΏΠ»Π°Ρ‚Π΅ 8 ΠœΠ“Ρ†)ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ схСму ΠΏΠ»Π°Ρ‚Ρ‹ ΠΈ настройтС HSE Value Π² Project Manager β†’ Advanced Settings
    HAL_RCC_ClockConfig Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ HAL_ERRORΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² PLL ΠΈΠ»ΠΈ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈΠ£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ PLLP ΠΈ PLLQ Π΄Π°ΡŽΡ‚ допустимыС частоты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, USB Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΠΎΠ²Π½ΠΎ 48 ΠœΠ“Ρ†)
    НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ USB ΠΈΠ»ΠΈ EthernetЧастота PLLQ Π½Π΅ Ρ€Π°Π²Π½Π° 48 ΠœΠ“Ρ†ΠΠ°ΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ PLLQ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ VCO / PLLQ = 48 ΠœΠ“Ρ†
    Π‘Π±ΠΎΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с SDIO ΠΈΠ»ΠΈ DMAБлишком высокая частота APB1/2 (макс. 42 ΠœΠ“Ρ† для APB1 Π½Π° STM32F4)Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, APB1CLKDivider = RCC_HCLK_DIV4)
    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: На STM32H7 ΠΏΡ€ΠΈ использовании HSE > 26 ΠœΠ“Ρ† ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Clock Security System (CSS) Π² RCC_CR. Π˜Π½Π°Ρ‡Π΅ ΠΏΡ€ΠΈ сбоС ΠΊΠ²Π°Ρ€Ρ†Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ зависнСт Π±Π΅Π· возмоТности восстановлСния.

    Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° распространённая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” нСсоотвСтствиС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ FLASH. Если SYSCLK ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 30 ΠœΠ“Ρ†, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ FLASH_LATENCY (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FLASH_LATENCY_5 для 168 ΠœΠ“Ρ†). Π˜Π½Π°Ρ‡Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ошибки чтСния ΠΊΠΎΠ΄Π° ΠΈΠ· памяти.

    4. Ручная настройка тактирования Π±Π΅Π· STM32CubeMX (HAL ΠΈ LL)

    Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ контроля Π½Π°Π΄ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° STM32G4 с использованиСм HAL ΠΈ LL.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° HAL:

    
    

    RCC_OscInitTypeDef RCC_OscInitStruct = {0};

    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    // Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ HSE ΠΈ настраиваСм PLL

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

    RCC_OscInitStruct.HSEState = RCC_HSE_ON;

    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

    RCC_OscInitStruct.PLL.PLLM = 1; // Π”Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ HSE (8 ΠœΠ“Ρ† β†’ 8 ΠœΠ“Ρ†)

    RCC_OscInitStruct.PLL.PLLN = 20; // Π£ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ (8 Γ— 20 = 160 ΠœΠ“Ρ†)

    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // SYSCLK = 80 ΠœΠ“Ρ†

    RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; // 48 ΠœΠ“Ρ† для USB

    RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; // Для ADC/DAC

    HAL_RCC_OscConfig(&RCC_OscInitStruct);

    // Настройка Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ

    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

    |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // Max 80 ΠœΠ“Ρ† для APB1

    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° LL (Low Layer):

    
    

    LL_RCC_HSE_Enable();

    while(!LL_RCC_HSE_IsReady());

    // Настройка PLL

    LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_1, 20, LL_RCC_PLLP_DIV_2);

    LL_RCC_PLL_ConfigDomain_48M(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_1, 20, LL_RCC_PLLQ_DIV_2);

    LL_RCC_PLL_Enable();

    while(!LL_RCC_PLL_IsReady());

    // ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° PLL ΠΈ настройка Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ

    LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);

    LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);

    LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2);

    LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);

    LL_FLASH_SetLatency(LL_FLASH_LATENCY_4);

    LL Π΄Π°Ρ‘Ρ‚ большС контроля ΠΈ мСньший ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ всСх рСгистров. НапримСр, Π½Π° STM32L4 ΠΏΡ€ΠΈ использовании MSI (ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠΊΠΎΡ€ΠΎΡΡ‚Π½ΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ RCC_CR для Π²Ρ‹Π±ΠΎΡ€Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° частот.

    πŸ’‘

    Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° максимальная ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ внСшний ΠΊΠ²Π°Ρ€Ρ† (HSE) с Clock Security System (CSS). Π­Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ~1 мА ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ, Π½ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ ΠΎΡ‚ зависаний ΠΏΡ€ΠΈ сбоях Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

    5. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ энСргопотрСблСния: Ρ€Π΅ΠΆΠΈΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

    Настройка тактирования Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° энСргопотрСблСниС. НапримСр, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с HSI (16 ΠœΠ“Ρ†) Π½Π° MSI (4 ΠœΠ“Ρ†) Π½Π° STM32L4 сниТаСт Ρ‚ΠΎΠΊ покоя с 5 мА Π΄ΠΎ 1.5 мА. Рассмотрим ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ стратСгии:

    • πŸ”‹ ДинамичСскоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ источников: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ HSI для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° PLL с HSE для основной Ρ€Π°Π±ΠΎΡ‚Ρ‹.
    • πŸ”‹ ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Ρ‚Π°ΠΊΡ‚ΠΎΠ²Ρ‹Ρ… сигналов: Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ MCO (Master Clock Output) ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹Π΅ Ρ‚Π°ΠΊΡ‚ΠΎΠ²Ρ‹Π΅ сигналы Ρ‡Π΅Ρ€Π΅Π· RCC_AHB1ENR, RCC_APB1ENR.
    • πŸ”‹ ИспользованиС Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ энСргопотрСблСния: Π² Sleep ΠΈΠ»ΠΈ Stop Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, оставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ LSI для RTC.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² Stop Ρ€Π΅ΠΆΠΈΠΌ с сохранСниСм тактирования RTC:

    
    

    HAL_PWREx_EnableUltraLowPower();

    HAL_PWREx_EnableLowPowerRunMode();

    __HAL_RCC_PWR_CLK_ENABLE();

    // ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° LSI для RTC

    __HAL_RCC_LSI_ENABLE();

    while(!__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY));

    __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSI);

    // Π’Ρ…ΠΎΠ΄ Π² Stop Ρ€Π΅ΠΆΠΈΠΌ

    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: На STM32H7 ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Stop Ρ€Π΅ΠΆΠΈΠΌΠ° PLL ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ. НСобходимо ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ прСрывания Wakeup.

    6. ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ: синхронизация Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ядСр ΠΈ PLLSAI

    ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ STM32H7 ΠΈ STM32MP1 ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько ядСр (Cortex-M7 + Cortex-M4) ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ PLLSAI для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ нСзависимых Ρ‚Π°ΠΊΡ‚ΠΎΠ²Ρ‹Ρ… сигналов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для LTDC ΠΈΠ»ΠΈ SAI). Рассмотрим ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

    • πŸŽ›οΈ PLLSAI: позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ частоты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 100 ΠœΠ“Ρ† для LTDC) Π±Π΅Π· измСнСния основного PLL.
    • πŸŽ›οΈ Бинхронизация ядСр: Π½Π° STM32H7 Cortex-M7 ΠΈ Cortex-M4 ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… частотах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 480 ΠœΠ“Ρ† ΠΈ 240 ΠœΠ“Ρ†).
    • πŸŽ›οΈ Clock Gating: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ тактирования Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· RCC_AHBxENR.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки PLLSAI для LTDC Π½Π° STM32H743:

    
    

    RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

    // Настройка PLLSAI для LTDC (пиксСльная частота 50 ΠœΠ“Ρ†)

    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LTDC;

    PeriphClkInit.PLLSAI.PLLSAIState = RCC_PLLSAI_ON;

    PeriphClkInit.PLLSAI.PLLSAISource = RCC_PLLSOURCE_HSE;

    PeriphClkInit.PLLSAI.PLLSAIM = 4; // HSE = 25 ΠœΠ“Ρ† β†’ 25/4 = 6.25 ΠœΠ“Ρ†

    PeriphClkInit.PLLSAI.PLLSAIN = 160; // 6.25 Γ— 160 = 1000 ΠœΠ“Ρ† (VCO)

    PeriphClkInit.PLLSAI.PLLSAIQ = 2; // 1000/2 = 500 ΠœΠ“Ρ† (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ)

    PeriphClkInit.PLLSAI.PLLSAIR = 20; // 1000/20 = 50 ΠœΠ“Ρ† для LTDC

    PeriphClkInit.PLLSAIDivQ = 1;

    PeriphClkInit.PLLSAIDivR = RCC_PLLSAIDIVR_2;

    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

    Для синхронизации ядСр Π½Π° STM32H7 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ RCC_D1CFGR ΠΈ RCC_D2CFGR:

    
    

    // Настройка D1 Π΄ΠΎΠΌΠ΅Π½Π° (Cortex-M7 Π½Π° 480 ΠœΠ“Ρ†)

    MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, RCC_D1CFGR_D1CPRE_DIV1);

    MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_D1CFGR_HPRE_DIV1);

    // Настройка D2 Π΄ΠΎΠΌΠ΅Π½Π° (Cortex-M4 Π½Π° 240 ΠœΠ“Ρ†)

    MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, RCC_D2CFGR_D2PPRE1_DIV2);

    MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, RCC_D2CFGR_D2PPRE2_DIV2);

    πŸ’‘

    На STM32H7 ΠΏΡ€ΠΈ использовании Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… PLL ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ провСряйтС ограничСния ΠΏΠΎ суммарному Ρ‚ΠΎΠΊΡƒ потрСблСния (макс. 300 мА для VDD).

    7. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ диагностика ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ

    Если ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²Π΅Π΄Ρ‘Ρ‚ сСбя Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ (зависания, сбросы, ошибки ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ),ι¦–ε…ˆ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ диагностики:

    1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° частот: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ HAL_RCC_GetSysClockFreq(), HAL_RCC_GetHCLKFreq() ΠΈ Ρ‚.Π΄., Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ фактичСскиС частоты с ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌΠΈ.
    2. Анализ рСгистров RCC: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ RCC_CR (Ρ„Π»Π°Π³ΠΈ готовности Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²), RCC_CFGR (источник SYSCLK), RCC_PLLCFGR (конфигурация PLL).
    3. ИспользованиС MCO: Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΡ‚ΠΎΠ²Ρ‹ΠΉ сигнал Π½Π° Π½ΠΎΠΆΠΊΡƒ MCO (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PA8) ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΡŒΡ‚Π΅ осциллографом.
    4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„Π»Π°Π³ΠΎΠ² ошибок: RCC_CIR (прСрывания ΠΏΠΎ сбоям тактирования), RCC_CSR (ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ сброса).

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для диагностики:

    
    

    uint32_t sysclk = HAL_RCC_GetSysClockFreq();

    uint32_t hclk = HAL_RCC_GetHCLKFreq();

    uint32_t pclk1 = HAL_RCC_GetPCLK1Freq();

    uint32_t pclk2 = HAL_RCC_GetPCLK2Freq();

    printf("SYSCLK: %lu Hz\n", sysclk);

    printf("HCLK: %lu Hz\n", hclk);

    printf("PCLK1: %lu Hz\n", pclk1);

    printf("PCLK2: %lu Hz\n", pclk2);

    // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„Π»Π°Π³ΠΎΠ² сброса

    if (__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST)) {

    printf("Low-Power reset detected\n");

    __HAL_RCC_CLEAR_RESET_FLAGS();

    }

    Если частота SYSCLK Π½Π΅ соотвСтствуСт ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

    • πŸ” ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ настроСк PLLM/N/P/Q (ошибка Π² ΠΎΠ΄Π½ΠΎΠΌ Π±ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΡƒΡŽΡΡ частоту).
    • πŸ” БостояниС Ρ„Π»Π°Π³Π° PLLRDY Π² RCC_CR (Ссли Π½Π΅ установлСн, PLL Π½Π΅ запустился).
    • πŸ” НаличиС внСшнСго ΠΊΠ²Π°Ρ€Ρ†Π° (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ осциллографом сигнал Π½Π° Π½ΠΎΠΆΠΊΠ°Ρ… OSC_IN/OUT).
    Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ссли PLL Π½Π΅ запускаСтся?

    1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ частота VCO (PLLN Γ— HSE / PLLM) находится Π² допустимом Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 100–432 ΠœΠ“Ρ† для STM32F4).

    2. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ PLLM Π½Π΅ обнуляСт частоту (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PLLM=8 для HSE=8 ΠœΠ“Ρ† даст 1 ΠœΠ“Ρ† Π½Π° Π²Ρ…ΠΎΠ΄Π΅ PLL).

    3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅: PLL Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ напряТСния (особСнно Π½Π° STM32H7 с ядром Π½Π° 480 ΠœΠ“Ρ†).

    4. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ HSE, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ†Π΅ΠΏΡŒ ΠΊΠ²Π°Ρ€Ρ†Π°: кондСнсаторы Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 10–22 ΠΏΠ€) ΠΈ отсутствиС ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ замыкания.

    FAQ: ЧастыС вопросы ΠΏΠΎ Clock Configuration Π² STM32

    МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HSI вмСсто HSE для PLL?

    Π”Π°, Π½ΠΎ это Π½Π΅ рСкомСндуСтся для Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. HSI ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠ·ΠΊΡƒΡŽ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ (Β±1–2%) ΠΈ зависит ΠΎΡ‚ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹/напряТСния. Для USB, Ethernet ΠΈΠ»ΠΈ высокоскоростных интСрфСйсов обязатСлСн HSE (ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β±0.005% с внСшним ΠΊΠ²Π°Ρ€Ρ†Π΅ΠΌ).

    ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ стартуСт?

    Частая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° β€” нСвСрная конфигурация тактирования Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅. НапримСр, Ссли Π² STM32CubeMX ΡƒΠΊΠ°Π·Π°Π½ HSE=25 ΠœΠ“Ρ†, Π° Π½Π° ΠΏΠ»Π°Ρ‚Π΅ стоит ΠΊΠ²Π°Ρ€Ρ† Π½Π° 8 ΠœΠ“Ρ†, PLL Π½Π΅ запустится. ВсСгда провСряйтС соотвСтствиС настроСк Π² ΠΊΠΎΠ΄Π΅ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ части.

    Как ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π΄ΠΆΠΈΡ‚Ρ‚Π΅Ρ€ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сигнала для ADC?

    Для Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ADC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ dedicated PLL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PLLSAI Π½Π° STM32H7) с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ коэффициСнтом дСлСния. Π’Π°ΠΊΠΆΠ΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ частота ADC_CLK Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ для вашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 36 ΠœΠ“Ρ† для STM32F3).

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Clock Security System (CSS) ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ?

    CSS слСдит Π·Π° Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ HSE ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ сбоС автоматичСски ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° HSI. Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ CSS всСгда, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ HSE Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… прилоТСниях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅). Настройка: RCC->CR |= RCC_CR_CSSON.

    Как ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Dual-Core STM32 (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, STM32H7)?

    На STM32H7 ядра Cortex-M7 ΠΈ Cortex-M4 ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… частотах. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ RCC_D1CFGR для M7 ΠΈ RCC_D2CFGR для M4. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ синхронизируйтС доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DMA) Ρ‡Π΅Ρ€Π΅Π· HSEM (Hardware Semaphore).