Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2740
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Приложение

A. Прочие функции HAL и

особенности STM32

В данном приложении содержится обзор некоторых функций HAL и возможностей STM32, которые не имеет смысла рассматривать в отдельной главе.

Принудительный сброс микроконтроллера из микропрограммы

Иногда, когда «все пропало» и мы больше не контролируем происходящее, единственным спасением будет перезагрузить микроконтроллер. Функция

void HAL_NVIC_SystemReset(void);

инициирует системный сброс микроконтроллера. Она использует void NVIC_SystemReset(void), предоставляемую пакетом CMSIS.

96-битный уникальный идентификатор ЦПУ

STM32

Большинство микроконтроллеров STM32 предоставляют уникальный идентификатор ЦПУ, который запрограммирован на заводе-изготовителе. Он доступен только для чтения и не может быть изменен.

Этот идентификатор может быть действительно полезен в некоторых ситуациях. Например, его можно использовать:

как уникальный серийный номер USB-устройства;

для создания собственных лицензионных ключей;

для использования в качестве ключей безопасности с целью повышения безопасности кода во Flash-памяти при использовании и объединении этого уникального идентификатора с программными криптографическими примитивами и протоколами перед программированием внутренней Flash-памяти;

для активации процессов безопасной начальной загрузки и т. д.

Ксожалению, размещение этого идентификатора в памяти не является одинаковым для всех микроконтроллеров STM32, но его отображаемый адрес в памяти изменяется лишь в каждой серии STM32. В таблице 1 показан отображенный в памяти адрес уникального идентификатор микроконтроллера (Unique MCU ID) для микроконтроллеров, оснащае-

мых Nucleo.

A. Прочие функции HAL и особенности STM32

762

Таблица 1: Отображенный в памяти адрес уникального идентификатора микроконтроллера

 

 

Базовый адрес запрограммированного на заводе

 

 

Nucleo P/N

96-битного уникального идентификатора

 

 

 

 

 

 

NUCLEO-F446RE

0x1FFF 7A10

 

 

NUCLEO-F411RE

0x1FFF 7A10

 

 

NUCLEO-F410RB

0x1FFF 7A10

 

 

NUCLEO-F401RE

0x1FFF 7A10

 

 

NUCLEO-F334R8

НЕ ДОСТУПЕН

 

 

NUCLEO-F303RE

0x1FFF F7AC

 

 

NUCLEO-F302R8

0x1FFF F7AC

 

 

NUCLEO-F103RB

0x1FFF F7E8

 

 

NUCLEO-F091RC

0x1FFF F7AC

 

 

NUCLEO-F072RB

0x1FFF F7AC

 

 

NUCLEO-F070RB

НЕ ДОСТУПЕН

 

 

NUCLEO-F030R8

НЕ ДОСТУПЕН

 

 

NUCLEO-L476RG

0x1FFF 7590

 

 

NUCLEO-L152RE

0x1FF8 00CC

 

 

NUCLEO-L073RZ

0x1FF8 007C

 

 

NUCLEO-L053R8

0x1FF8 007C

 

Например, в микроконтроллере STM32F401xE он отображается на 0x1FFF 7A10. Для чтения уникального идентификатора мы можем воспользоваться следующим фрагментом кода:

...

uint32_t *uniqueID = (uint32_t*)0x1FFF7A10;

for(uint8_t i = 0; i < 12; i++)

i < 11 ? printf("%x:", (uint8_t)uniqueID[i]) : printf("%d\n", (uint8_t)uniqueID[i]);

...