STM32 - серийный номер (Unique device ID)





Здравствуйте.

Это маленькая заметка про чтение серийного номера у микроконтроллеров stm32.


Каждый микроконтроллер stm32 снабжён уникальным серийным номером, который зашивается на заводе в область памяти доступную только для чтения. То есть его нельзя стереть или переписать, только читать. Для чего он может понадобится, это уже решать вам.


Этот серийник представляет из себя 96-ти битное число, которое располагается в двух 16-ти битных, и двух 32-ух битных регистрах…



Читать нужно начиная с базового адреса (адреса первого регистра) сдвигаясь на размер регистра. Базовый адрес можно посмотреть в мануале на конкретный камень (у разных камней, разные адреса) в разделе «Unique device ID register (96 bits)». Для BluePill это RM0008, стр. 1075.


Чтение производится так…

#define UID_BASE 0x1FFFF7E8

uint16_t *idBase0 = (uint16_t*)(UID_BASE);
uint16_t *idBase1 = (uint16_t*)(UID_BASE + 0x02);
uint32_t *idBase2 = (uint32_t*)(UID_BASE + 0x04);
uint32_t *idBase3 = (uint32_t*)(UID_BASE + 0x08);

char buffer[64] = {0,};
sprintf(buffer, "UID %x-%x-%lx-%lx\n", *idBase0, *idBase1, *idBase2, *idBase3);
HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), 1000);


Поскольку у нас нет переменной такого размера, мы раскладываем значения из регистров, в несколько соответствующих переменных и выводим их через дефис. В результате получим такую картину…



Если вы пользуетесь HAL'ом, тогда #define можно закомментировать, он уже прописан в библиотеке, и соответствует необходимому адресу для вашего камня.



Это всё, всем спасибо


Телеграм-чат istarik

Телеграм-чат STM32


  • 0
  • 4101
Поддержать автора




Telegram-чат istarik

Задать вопрос по статье
Telegram-канал istarik

Известит Вас о новых публикациях






Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.