STM32CubeIDE (вопросы и ответы)

а какая разница что из регистров вытаскивать, что сохранять, я показал принцип - дал удочку, если в даташите кто-то не видит адрес регистра, ну лови, как сохранять смотри выше:

void setup() {
  Serial.begin(115200);
  delay(3000);
  
  // Чтение Device ID
  uint16_t deviceID = *(volatile uint16_t*)0xE0042000;
  
  // Чтение Flash Size
  uint16_t flashSize = *(volatile uint16_t*)0x1FFFF7E0;
  
  // Чтение Unique ID
  uint32_t uniqueID1 = *(volatile uint32_t*)0x1FFFF7E8;
  uint32_t uniqueID2 = *(volatile uint32_t*)0x1FFFF7EC;
  uint32_t uniqueID3 = *(volatile uint32_t*)0x1FFFF7F0;
  
  Serial.println("=== STM32F103C8T6 Information ===");
  Serial.print("Device ID: 0x");
  Serial.println(deviceID, HEX);
  
  Serial.print("Flash Size: ");
  Serial.print(flashSize);
  Serial.println(" KB (отображается)");
  
  Serial.print("Actual Flash: 128 KB"); // Физический размер
  Serial.println();
  
  Serial.print("Unique ID: ");
  Serial.print(uniqueID1, HEX);
  Serial.print("-");
  Serial.print(uniqueID2, HEX);
  Serial.print("-");
  Serial.println(uniqueID3, HEX);
  
  if (deviceID == 0x410) {
    Serial.println("✓ Устройство подтверждено: STM32F103C8T6");
  }
}

void loop() {
  delay(1000);
}

Код 100500 рабочий, это жеж АРДУИНО IDE:

15:52:16.197 -> === STM32F103C8T6 Information ===
15:52:16.197 -> Device ID: 0x410
15:52:16.197 -> Flash Size: 128 KB (отображается)
15:52:16.197 -> Actual Flash: 128 KB
15:52:16.197 -> Unique ID: 1A5A5BB5-0-1EF3698
15:52:16.197 -> ✓ Устройство подтверждено: STM32F103C8T6

PS @BOOM тут как-то заикался, что чипы оригинальные, как узнал не сказал, вот простейший код в ARDUINO IDE для проверки, а если нужно точно знать то перешивайте в ранее названное мной устройство в теме про PUYA:

void determineChipType() {
  uint16_t flashSize = *(volatile uint16_t*)0x1FFFF7E0;
  uint32_t stm32Id = *(volatile uint32_t*)0xE0042000;
  
  Serial.println("Результаты определения:");
  Serial.print("Flash Size: ");
  Serial.println(flashSize);
  Serial.print("STM32 ID Register: 0x");
  Serial.println(stm32Id, HEX);
  
  if (stm32Id == 0x20030410 || (stm32Id & 0xFFF) == 0x410) {
    Serial.println("✅ Настоящий STM32F103");
  } 
  else if (stm32Id == 0x0) {
    Serial.println("🔄 Вероятно CH32F103 или GD32F103 (клон)");
    Serial.println("Характеристики совместимы с STM32F103C8T6");
    Serial.println("Программы будут работать, но ID недоступен");
  }
  else {
    Serial.println("❓ Неизвестный тип чипа");
  }
}

void setup() {
  Serial.begin(115200);
  delay(2000);
  determineChipType();
}

void loop() {
  digitalWrite(PC13, !digitalRead(PC13));
  delay(300);
}