Перейти к содержанию

Генератор MSI (multispeed internal)

У семейств STM32 для малого потребления есть внутренний генератор, частоту которого можно выбирать в десятки раз: от 65 кГц до 4 МГц. Это MSI — от него STM32L0 и L1 стартуют после сброса и просыпаются из Standby.

Обновлено Редакция GAW

MSI (multispeed internal) — внутренний RC-генератор STM32, частоту которого выбирают программно в широком диапазоне. У STM32L0 и STM32L1 это семь диапазонов битами MSIRANGE[2:0] регистра RCC_ICSCR (RM0377, разд. 7.2.3; RM0038):

MSIRANGEЧастота
065,536 кГц
1131,072 кГц
2262,144 кГц
3524,288 кГц
41,048 МГц
52,097 МГц — по умолчанию
64,194 МГц

Роль в системе тактирования

  • Такт после сброса. MSI всегда становится системным тактом после сброса и после выхода из Standby, с частотой по умолчанию 2,097 МГц. После Stop можно выбрать MSI или HSI16, и частота MSI сохраняется.
  • Экономия. RM0377 называет MSI дешёвым маломощным источником без внешних деталей. Частота MSI range 1 — предел для режима Low-power run.
  • Резерв. MSI может заменить HSE при его отказе, который обнаружит система контроля тактирования.

Готовность показывает флаг MSIRDY, включение — бит MSION. Остальные генераторы — HSE, HSI, LSE и LSI, а распределяет такты блок RCC.

Точность

Каждый экземпляр калибруют на заводе на 1 % при 25 °C, значение загружается в MSICAL. С напряжением и температурой частота уходит; поле MSITRIM позволяет подстроить её в программе.

У других семейств, например STM32L4 и STM32U5, диапазоны MSI другие, и таблицу берут из руководства своего семейства. Расчёт делителей и PLL — в калькуляторе тактирования STM32.

Частые вопросы

На какой частоте STM32L0 работает после сброса?

От MSI на 2,097 МГц (в документах округляют до 2,1 МГц) без тактов ожидания. По RM0377 MSI всегда служит системным тактом после сброса и после пробуждения из Standby, а частота при этом возвращается к значению по умолчанию. После Stop частота MSI сохраняется.

Насколько точен генератор MSI?

По RM0377 каждый экземпляр калибруют на заводе с точностью 1 % при 25 °C, калибровочное значение загружается в MSICAL. При изменении напряжения и температуры частота уходит, и её можно подстроить полем MSITRIM. Для точного времени и стабильной скорости UART используют кварц LSE или HSE.

Почему частоты MSI такие некруглые?

Они кратны 32 768 Гц: 65,536 кГц — это 2 × 32 768, а каждый следующий диапазон вдвое выше предыдущего, до 4,194 304 МГц = 128 × 32 768 (наш расчёт). Скорость UART от такого такта считают с учётом ошибки делителя.

Источники

  1. STMicroelectronics. RM0377: Ultra-low-power STM32L0x1 advanced Arm-based 32-bit MCUs. Reference manual, Rev 10 — разд. 7.2.3: MSI — внутренний RC-генератор, частота выбирается битами MSIRANGE[2:0] регистра RCC_ICSCR; семь диапазонов: 65,536 кГц, 131,072 кГц, 262,144 кГц, 524,288 кГц, 1,048 МГц, 2,097 МГц (по умолчанию) и 4,194 МГц; MSI всегда служит системным тактом после сброса и пробуждения из Standby, после Stop может быть выбран вместо HSI16; после сброса и Standby частота — по умолчанию, после Stop не меняется; дешёвый маломощный источник без внешних деталей, такт пробуждения; флаг MSIRDY, включение MSION; может быть резервным тактом при отказе HSE (CSS); заводская калибровка на 1 % при 25 °C, значение в MSICAL, подстройка MSITRIM; разд. 7.2 — MSI 2,1 МГц после сброса по питанию, системного сброса, сброса домена RTC и после Standby
  2. STMicroelectronics. RM0038: STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced Arm-based 32-bit MCUs. Reference manual, Rev 18 — разд. 6.2: те же семь диапазонов 65,536 кГц … 4,194 МГц, регистр RCC_ICSCR; разд. 3.3.1 — после сброса MSI 2 МГц, 0 тактов ожидания
  3. STMicroelectronics. CMSIS device header stm32l073xx.h, cmsis-device-l0 v1.9.4 (GitHub, Apache-2.0) — поле RCC_ICSCR_MSIRANGE и его значения RCC_ICSCR_MSIRANGE_0 … RCC_ICSCR_MSIRANGE_6, RCC_ICSCR_MSITRIM, RCC_ICSCR_MSICAL

Нашли ошибку?