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

индивидуальный номер у STM32

Хотел найти что-то для идентификации устройства, например индивидуальный номер, зашитый в процессор. ( STM32F103)

 

Посмотрел описание регистра CPUID в NVIC ... по нему , получается, только ревизию установить можно...

 

Возник вопрос- а есть ли у SЕM32F103 индивиальный номер?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в Reference Manual - 28.2 Unique device ID register (96 bits)

The 96-bit unique device identifier provides a reference number which is unique for any

device and in any context.

Кстати, а что это у вас CPUID делает в контроллере прерываний? :blink:

 

upd: вы похоже смотрите ARMовскую документацию, а нуже STшный RM, тут например http://www.st.com/mcu/devicedocs-STM32F103RE-110.html

Изменено пользователем Flexz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

С первого раза в RM008 не нашел, и привыкши что все остальное написано в DDI0337E (Cortex M3 RM) полез туда, с радостью обнаружил CPUID, и обломался внимательно прочитамши :)

 

Пользуюсь кейлом uVision 4.10

 

Посмотрев стандартный ST-шный STM32F10x_map.h не увидел там такого регистра вообще :( !

 

Понятно, что он должен быть разбит на два 16-ти битных и 1 32 битный, но как его указать?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ммм, а в чем проблема ручками считать? адрес есть, все 96 бит без дырок расположены, особых требований к чтению не предъявляется.

Сейчас специально проверил - побайтно считывается нормально.

Кстати, 2 регистра по 16 бит и 2 по 32, интересно есть ли в этом некий тайный смысл?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читать можно, к примеру, так:

typedef    __packed struct 
{
    unsigned short    b15_0;
    unsigned short    b16_31;
    unsigned int    b32_63;
    unsigned int    b64_95;
} UNIQUE_ID;

const UNIQUE_ID    *id = (UNIQUE_ID*) 0x1FFFF7E8;

    unsigned int id_l, id_m, id_h;

    id_l = id->b15_0 | (id->b16_31 << 16);
    id_m = id->b32_63;
    id_h = id->b64_95;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, буду пробовать..

 

никогда не работал с указателями таким образом, это трудное для моего понимания место:

 

const UNIQUE_ID *id = (UNIQUE_ID*) 0x1FFFF7E8;

 

сначала мы объявили структуру, а потом всю ее объявили как константу, и назначили ей место в памяти?...

 

 

при присваивании выдает много ошибок, вероятно так это делать нельзя или в настройках компилятора дело?

похоже указатель на id ему сильно не нравится

 

t-arm.c(138): error:  #77-D: this declaration has no storage class or type specifier
t-arm.c:       id_l = id->b15_0 | (id->b16_31 << 16);
t-arm.c:       ^
t-arm.c(138): error:  #147: declaration is incompatible with "unsigned int id_l" (declared at line 136)
t-arm.c:       id_l = id->b15_0 | (id->b16_31 << 16);
t-arm.c:       ^
t-arm.c(138): error:  #28: expression must have a constant value
t-arm.c:       id_l = id->b15_0 | (id->b16_31 << 16);
t-arm.c:                               ^
t-arm.c(139): error:  #77-D: this declaration has no storage class or type specifier
t-arm.c:       id_m = id->b32_63;
t-arm.c:       ^
t-arm.c(139): error:  #147: declaration is incompatible with "unsigned int id_m" (declared at line 136)
t-arm.c:       id_m = id->b32_63;
t-arm.c:       ^
t-arm.c(139): error:  #28: expression must have a constant value
t-arm.c:       id_m = id->b32_63;
t-arm.c:                ^
t-arm.c(140): error:  #77-D: this declaration has no storage class or type specifier
t-arm.c:       id_h = id->b64_95;
t-arm.c:       ^
t-arm.c(140): error:  #147: declaration is incompatible with "unsigned int id_h" (declared at line 136)
t-arm.c:       id_h = id->b64_95;
t-arm.c:       ^
t-arm.c(140): error:  #28: expression must have a constant value
t-arm.c:       id_h = id->b64_95;
t-arm.c:                ^
t-arm.c: t-arm.c: 0 warnings, 10 errors

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно, а Вы в чём компилируете?

У меня в Кейле никаких проблем, да и откуда тут могут быть проблемы, обычная запись...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно, а Вы в чём компилируете?

У меня в Кейле никаких проблем, да и откуда тут могут быть проблемы, обычная запись...

 

кейл uVision 4.10.

 

Просто скопировал ваш код в рабочий проект, хотел на usart вывести .

 

PS: сейчас попробовал в 3-м кейле (версия 3.85) - все нормально!! (не ругается по крайней мере)

 

буду пробовать на реальном устройстве ...

 

Если не сложно, поясните , пожалуйста что делает такая запись:

 

const UNIQUE_ID *id = (UNIQUE_ID*) 0x1FFFF7E8;

, хочется научиться понимать как это работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кейл uVision 4.10.

...

Если не сложно, поясните , пожалуйста что делает такая запись:

 

const UNIQUE_ID *id = (UNIQUE_ID*) 0x1FFFF7E8;

, хочется научиться понимать как это работает.

У меня Кейл 4.00.

Хм, что же надо было напортачить в 4.10, чтобы оно ругаться стало? :)

 

const UNIQUE_ID *id = (UNIQUE_ID*) 0x1FFFF7E8; - это объявление указателя на структуру UNIQUE_ID, данные внутри которой являются константами (мы ведь не можем их изменить).

Ну и сразу инициализируем этот указатель нужным адресом, приведя его перед этим (UNIQUE_ID*) к нужному типу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...