[Решено] Как прочитать идентификационный номер?. Рег [UID]

Францискогимено
Ср 29 ноября 2017 г. 15:56
Привет, кто знает, как прочитать фиксированный серийный номер чипа?

приветствие

Mrburnette
Ср 29 ноября 2017 г. 16:54
ХОРОШО .... Хорошие участники сначала используют Google. Так: Сайт UID: STM32DUINO.компонент Вышеуказанное приводит к: ViewTopic.PHP?t = 245

Луча

Францискогимено
Ср 29 ноября 2017 г., 17:01
Спасибо и извините,

Я искал, поместив имя записи, и ничего не появилось с прямыми отношениями.

Спасибо

Дэнниф
Ср 29 ноября 2017 г. 18:33
Очень просто.

1. Прочитайте таблицу данных - это всегда будет ваш первый шаг.

2. Узнайте, где находится UID, так как их местоположение является семейным специфичным.

3. Исправьте тип данных по вашему выбору на этот адрес.

4. Сделанный.

Hutthenut
Ср 28 марта 2018 г., 22:42
Всем привет,

Я проделал некоторые работы для досок Nucleo - не стесняйтесь обновлять пример ниже, основываясь на вводе Роджера из:
ViewTopic.PHP?t = 245

С наилучшими пожеланиями,
Откровенный
// STM32L476 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/02/35/09/0c/4f/f7/40/03/DM00083560.pdf/files/DM00083560.pdf/jcr:content/translations/en.DM00083560.pdf // STM32L432 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/group0/b0/ac/3e/8f/6d/21/47/af/DM00151940/files/DM00151940.pdf/jcr:content/translations/en.DM00151940.pdf // STM32F446 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/4d/ed/bc/89/b5/70/40/dc/DM00135183.pdf/files/DM00135183.pdf/jcr:content/translations/en.DM00135183.pdf // STM32F303 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/4a/19/6e/18/9d/92/43/32/DM00043574.pdf/files/DM00043574.pdf/jcr:content/translations/en.DM00043574.pdf uint16_t flashsize; uint32_t UnitID_Part_1; uint32_t UnitID_Part_2; uint32_t UnitID_Part_3; void setup() { Serial.begin(115200); #if defined(ARDUINO_NUCLEO_F303K8) // UID for F3 devices in general as I google the info flashSize = *(uint16_t *)(0x1FFFF7CC); UnitID_Part_1 = *(uint32_t*)(0x1FFFF7AC); UnitID_Part_2 = *(uint32_t*)(0x1FFFF7AC+0x04); UnitID_Part_3 = *(uint32_t*)(0x1FFFF7AC+0x08); #elif defined(ARDUINO_NUCLEO_F446RE) // UID for F4 devices in general as I google the info flashSize = *(uint16_t *)(0x1FFF7A22); UnitID_Part_1 = *(uint32_t*)(0x1FFF7A10); UnitID_Part_2 = *(uint32_t*)(0x1FFF7A10+0x04); UnitID_Part_3 = *(uint32_t*)(0x1FFF7A10+0x08); #elif defined(ARDUINO_NUCLEO_L432KC) || defined(ARDUINO_NUCLEO_L476RG) // UID for L4 devices in general as I google the info flashsize = *(uint16_t *)(0x1FFF75E0); UnitID_Part_1 = *(uint32_t*)(0x1FFF7590); UnitID_Part_2 = *(uint32_t*)(0x1FFF7590+0x04); UnitID_Part_3 = *(uint32_t*)(0x1FFF7590+0x08); #else #error "No board recognized" #endif; } void loop() { Serial.print("Flash size is "); Serial.print(flashsize ); Serial.println(" kB"); Serial.print("UID [HEX] : "); Serial.print(UnitID_Part_1, HEX); Serial.print(" "); Serial.print(UnitID_Part_2, HEX); Serial.print(" "); Serial.println(UnitID_Part_3, HEX); delay(1000); }

fpistm
Чт 29 марта 2018 г. 18:21
Просто советы о ядра STM, вы можете использовать определения CMSIS, чтобы быть более общими и избегать использования коммутатора для каждой платы:

Ex для STM32F103:
https: // github.com/stm32duino/arduino_c ... 3xb.H#1674 #define FLASHSIZE_BASE 0x1FFFF7E0U /*!< FLASH Size register base address */ #define UID_BASE 0x1FFFF7E8U /*!< Unique device ID register base address */

Hutthenut
Пт 30 марта 2018 г., 17:44
Когда я читаю ссылку, адреса не являются общими и только для STM32F1XX...

/Откровенный

fpistm
Пт 30 марта 2018 г., 18:31
[Hutthenut - Пт 30 марта 2018 г., 17:44] - Когда я читаю ссылку, адреса не являются общими и только для STM32F1XX...

/Откровенный
Эти определения являются общими, а не его ценностью и для всех семей STM32YYYXX.

Hutthenut
Пт 30 марта 2018 г., 22:47
Точно..

Но исходя из моего отсутствия знаний.. Чтобы избежать использования переключения для каждой платы.
Как получить доступ к этим #Defines с помощью компиляции, если я не знаю, где смотреть в реестре, как в следующем примере в моем поиске общего куска кода..?
#if defined(ARDUINO_NUCLEO_F103CB) || defined(ARDUINO_NUCLEO_F103C8) // Add more F1-board if necessary // UID for F1 devices in general as I google the info #define FLASHSIZE_BASE 0x1FFFF7E0U // FLASH Size register base address #define UID_BASE 0x1FFFF7E8U // Unique device ID register base address #endif;

fpistm
Сб 31 марта 2018 г., 6:39
С ядром STM нет конкретного включения, чтобы сделать, используйте только определение в эскизе. Заголовки CMSIS уже включены.

Hutthenut
Сб 31 марта 2018 г., 17:09
Всем привет,

На данный момент есть окончательный код.. Я надеюсь, что это пригодится для некоторых - и не стесняйтесь улучшить его! :-)
// STM32L476 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/02/35/09/0c/4f/f7/40/03/DM00083560.pdf/files/DM00083560.pdf/jcr:content/translations/en.DM00083560.pdf // STM32L432 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/group0/b0/ac/3e/8f/6d/21/47/af/DM00151940/files/DM00151940.pdf/jcr:content/translations/en.DM00151940.pdf // STM32F446 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/4d/ed/bc/89/b5/70/40/dc/DM00135183.pdf/files/DM00135183.pdf/jcr:content/translations/en.DM00135183.pdf // STM32F303 // http://www.st.com/content/ccc/resource/technical/document/reference_manual/4a/19/6e/18/9d/92/43/32/DM00043574.pdf/files/DM00043574.pdf/jcr:content/translations/en.DM00043574.pdf // STM32F1 // https://github.com/stm32duino/Arduino_Core_STM32/blob/af3d2e7fcd1ae9b5eaa56b22aca6e148e40fda69/system/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h#L674 uint16_t flashsize; uint32_t UnitID_Part_1; uint32_t UnitID_Part_2; uint32_t UnitID_Part_3; String UnitName; // System clock speed extern uint32_t SystemCoreClock; void setup() { Serial.begin(115200); Serial.println(""); Serial.println("Serial communication is running OK"); Serial.println(""); Serial.println("Compiled : " __DATE__ ", " __TIME__); Serial.println("Version : " __VERSION__); Serial.println(""); //Reading type of board #if defined(ARDUINO_NUCLEO_F103C8) UnitName = "NUCLEO_F103C8"; #elif defined(ARDUINO_NUCLEO_F103CB) UnitName = "NUCLEO_F103CB"; #elif defined(ARDUINO_NUCLEO_F103CB) UnitName = "NUCLEO_F103RB"; #elif defined(ARDUINO_NUCLEO_F303K8) UnitName = "NUCLEO_F303K8"; #elif defined(ARDUINO_NUCLEO_L432KC) UnitName = "NUCLEO_L432KC"; #elif defined(ARDUINO_NUCLEO_L476RG) UnitName = "NUCLEO_L476RG"; #elif defined(ARDUINO_NUCLEO_F446RE) UnitName = "NUCLEO_F446RE"; #else #error "No board recognized" UnitName = "No board recognized"; #endif // Reading Flashsize and Unit ID #if defined(ARDUINO_NUCLEO_F103CB) || defined(ARDUINO_NUCLEO_F103CB) // UID for F1 devices in general as I google the info #define FLASHSIZE_BASE 0x1FFFF7E0U // FLASH Size register base address #define UID_BASE 0x1FFFF7E8U // Unique device ID register base address #elif defined(ARDUINO_NUCLEO_F303K8) // Add more F3-board if necessary // UID for F3 devices in general as I google the info #define FLASHSIZE_BASE 0x1FFFF7CC // FLASH Size register base address #define UID_BASE 0x1FFFF7AC // Unique device ID register base address #elif defined(ARDUINO_NUCLEO_F446RE) // Add more F4-board if necessary // UID for F4 devices in general as I google the info #define FLASHSIZE_BASE 0x1FFF7A22 // FLASH Size register base address #define UID_BASE 0x1FFF7A10 // Unique device ID register base address #elif defined(ARDUINO_NUCLEO_L432KC) || defined(ARDUINO_NUCLEO_L476RG) // Add more L4-board if necessary // UID for L4 devices in general as I google the info #define FLASHSIZE_BASE 0x1FFF75E0 // FLASH Size register base address #define UID_BASE 0x1FFF7590 // Unique device ID register base address #endif; flashsize = *(uint16_t *)(FLASHSIZE_BASE); UnitID_Part_1 = *(uint32_t*)(UID_BASE); UnitID_Part_2 = *(uint32_t*)(UID_BASE+0x04); UnitID_Part_3 = *(uint32_t*)(UID_BASE+0x08); // Board type, UnitID and flashsize Serial.println("Board : "+UnitName); Serial.println("CPU speed : "+String(SystemCoreClock/1000000)+" MHz"); Serial.println("Flash size : "+String(flashsize)+" kB"); Serial.println("UID [HEX] : "+String(UnitID_Part_1, HEX)+" "+String(UnitID_Part_2, HEX)+" "+String(UnitID_Part_3, HEX)); Serial.println(""); delay(2000); Serial.println("Press A for Board type"); Serial.println("Press B for CPU speed"); Serial.println("Press C for flash size"); Serial.println("Press D for UID"); Serial.println(""); } void loop() { if(Serial.available()) { char inChar = (char)Serial.read(); switch (inChar){ case 'A': Serial.println("Press A for Board type"); break; case 'B': Serial.println("CPU speed : "+String(SystemCoreClock/1000000)+" MHz"); break; case 'C': Serial.println("Flash size : "+String(flashsize)+" kB"); break; case 'D': Serial.println("UID [HEX] : "+String(UnitID_Part_1, HEX)+" "+String(UnitID_Part_2, HEX)+" "+String(UnitID_Part_3, HEX)); break; }//End_Switch }//End_If }//End loop

fpistm
Сб 31 марта 2018 г. 18:31
Обратите внимание, что на ядре с использованием CMSIS, например, STM Core, вы переопределенные CMSIS определяете: uid_base и flashsize_base.

Чтобы быть более общим с именем платы, я добавил определение рецепта.CPP.о.шаблон в платформе.TXT после -DARDUINO_{build.board}

Hutthenut
Сб 31 марта 2018 г., 21:35
Теперь я вижу, что вы пытались рассказать мне за последние пару дней. :-)

Я думал, что должен был сделать #Defines сам в верхней части сценария с помощью ECAXT одинаковые имена: uid_base и flashsize_base.. И пытаюсь это, у меня есть ошибки. И именно поэтому я сохранил «на доске». Но все же, спасибо за терпение со мной.

Однако доска не признана - есть ли у вас идеи, как это..?
Uid_alst_perfect.png
Почти идеально
UID_ALST_PERFECT.PNG (84.66 киб) просмотрено 1164 раза

fpistm
Сб 31 марта 2018 г. 22:16
Фактически, в настоящее время не определено на платформе.текст. Я добавил его вручную на платформе.txt, чтобы иметь его напрямую. Я думаю, что добавлю это на платформу.текст. Это может быть полезно.
https: // github.com/stm32duino/arduino_c ... м.TXT#L101

Hutthenut
Сб 31 марта 2018 г., 22:52
Строка 101 была обновлена ​​- спасибо fpistm, она работает! :-)

/Откровенный

Hutthenut
Солнце 01, 2018, 15:56
Кстати.
Есть ли способ прочитать использование Flash и SRAM из Sketch..?
Sketch использует 59564 байт (5%) пространства для хранения программ. Максимум составляет 1048576 байтов.
Глобальные переменные используют 2748 байт (2%) динамической памяти, оставляя 95556 байтов для локальных переменных. Максимум - 98304 байта.
C: - PAHT удален автором
1 Файл (ы) скопирован
Загрузите полное на Dis_l4iot (e :)
заранее спасибо
Откровенный

fpistm
Пн, 02 апреля 2018 г., 6:51
Вы должны открыть другую тему. Этот решен, и это новый вопрос

Hutthenut
Солнце 08 апреля 2018 г., 17:33
Новая тема сгенерирована:
ViewTopic.PHP?F = 29&t = 3470

Я искал сайт уже пару дней, но, похоже, мне не повезло.. Можете ли вы вспомнить ссылку на этот вопрос..?

Hutthenut
Ср 24 октября 2018 г. 12:12
Всем привет,

«Ссылка» в этой теме aka -dboardname = "{build.доска} "на платформе.Файл TXT был изменена в -Дордовую_name = "{build.доска}".
Итак, чтобы код работал, просто измените имя: имя BoardNAME на Board_Name

Бренд.
Htn

fpistm
Ср 24 октября 2018 г. 5:56 утра
Да, это board_name, но это не меняется:
https: // github.com/stm32duino/arduino_c ... 9575fbe31d

STM32L476RG