а какая разница что из регистров вытаскивать, что сохранять, я показал принцип - дал удочку, если в даташите кто-то не видит адрес регистра, ну лови, как сохранять смотри выше:
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);
}