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'ом, тогда
Это всё, всем спасибо
Телеграм-чат istarik
Телеграм-чат STM32
- 0
- stD
27307
Поддержать автора
Комментарии (0)