Может кому-то будет полезно.
Несмотря на то, что много занимаемся разными контроллерами, вопрос идентификации контроллера в пользовательской программе был не вполне ясен.
Наконец удалось разобраться к чему привязываться.
В Arduino iDE каждая серия контроллеров ( AVR,DUE,ESP8266,ESP32,STM32F) сопровождаются файлом boards.txt&
В нем каждый контроллер описывается примерно следующим образом:
В них нас интересует пока три строки:
для UNO:
uno.name=Arduino Uno
uno.build.board=AVR_UNO
uno.build.variant=standard
для BLuePill F103C8
GenF1.menu.pnum.BLUEPILL_F103C8=BluePill F103C8
GenF1.menu.pnum.BLUEPILL_F103C8.build.board=BLUEPILL_F103C8
GenF1.menu.pnum.BLUEPILL_F103C8.build.variant=PILL_F103XX
и т.д.
Первая строчка - это то, что мы выбираем при загрузке в Arduino IDE.
Вторая строчка - это идентификатор платы.
К нему добавляется строка ARDUINO_ и получается макрос, по которому можно идентифицировать плату.
Например:
#if defined(ARDUINO_AVR_UNO)
Serial.begin(115200); Serial.println(F("Это плата Arduino UNO"));
#endif
#if defined(ARDUINO_BLUEPILL_F103C8)
Serial.begin(115200); Serial.println(F("Это плата Голубая таблетка STM32F103C8"));
#endif
------------
Составил таблицу, интересующих контроллеров, которые мы включаем в свои библиотеки:
Набросал скетч для проверки правильности идентификаторов:
//-------------------------------------------------------
// Тест идентификация типа контроллера
//-------------------------------------------------------
uint8_t pinLed=PA6; //LED_BUILTIN;
bool blink;
void setup() {
Serial.begin(115200);
//---Ожидание готовности Serial с мерцанием светодиода
while (!Serial) {delay(100);}
//-------------------------------------------------------------------------
Serial.println(String(F("\n\n\nBegin ***04.01.21 Test definition mode board***")));
//=========================================================================
// Контроллеры AVR
//=========================================================================
//-------------------------------------------------------------------------
#if defined(ARDUINO_AVR_UNO)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=AVR_UNO->name:Arduino UNO; variant=standart")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_AVR_NANO)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=AVR_NANO->name:Arduino Nano; variant=eightanaloginputs")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_AVR_PRO)
Serial.println(String(F("Board=AVR_PRO->name:Arduino Pro or Pro Mini; variant=eightanaloginputs")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_AVR_MINI)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=AVR_MINI->name:Arduino Mini; variant=eightanaloginputs")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_AVR_MEGA2560)
Serial.println(String(F("Board=AVR_MEGA2560->name:Arduino Mega2560; variant=mega")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_AVR_ADK)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=AVR_ADK->name:Arduino ADK; variant=mega")));
#endif
//=========================================================================
// Контроллеры DUE
//=========================================================================
//-------------------------------------------------------------------------
#if defined(ARDUINO_SAM_DUE)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=SAM_DUE->name:Arduino Due(Programming Port); variant=arduino_due_x")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_SAM_DUE)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=SAM_DUE->name:Arduino Due(Native USB Port); variant=arduino_due_x")));
#endif
//=========================================================================
// Контроллеры ESP8266
//=========================================================================
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP8266_GENERIC)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=ESP8266_GENERIC->name:Generic ESP8266 Module; variant=esp8286")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP8266_ESP01)
Serial.println(String(F("Board=ESP8285_ESP01->name:Generic ESP8285 Module; variant=esp8285")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP8266_NODEMCU)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=ESP8266_NODEMCU->name:NodeMCU 0.9 or 1.0 (ESP-12 Module); variant=nodemcu")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP8266_WEMOS_D1MINI)
Serial.println(String(F("Board=ESP8266_WEMOS_D1MINI->name:LOLIN(WEMOS)D1 R2 & nini; variant=d1_mini")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP8266_WEMOS_D1MINIPRO)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=ESP8266_WEMOS_D1MINIPRO->name:LOLIN(WEMOS)D1 R2 & nini; variant=d1_mini")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP8266_WEMOS_D1MINILITE)
Serial.println(String(F("Board=ESP8266_WEMOS_D1MINILITE->name:LOLIN(WEMOS)D1 R2 & nini; variant=d1_mini")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP8266_WEMOS_D1R1)
pinLed=LED_BUILTIN;
Serial.println(String(F("Board=ESP8266_WEMOS_D1R1->name:LOLIN(WEMOS)D1R1; variant=d1")));
#endif
//=========================================================================
// Контроллеры ESP32
//=========================================================================
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP32_DEV)
pinLed=2;
Serial.println(String(F("Board=ESP32_DEV->name:ESP32 Dev Module or ESP32 Wrover Module; variant=esp32")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP32_TTGO_Lora32_V1)
pinLed=2;
Serial.println(String(F("Board=ESP32_TTGO_Lora32_V1->name:TTGO Lora32-OLED V1; variant=ttgo-lor32_v1")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_ESP32_TTGO_T1)
pinLed=2;
Serial.println(String(F("Board=ESP32_TTGO_T1->name:TTGO T1; variant=ttgo-t1")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_NANO32)
pinLed=2;
Serial.println(String(F("Board=NANO32->name:Nano32; variant=nano32")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_LOLIN_D32)
Serial.println(String(F("Board=LOLIN_D32->name:LOLIN D32; variant=d32")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_LOLIN_D32_PRO)
pinLed=2;
Serial.println(String(F("Board=LOLIN_D32_PRO->name:LOLIN D32 PRO; variant=d32_pro")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_LOLIN32)
pinLed=2;
Serial.println(String(F("Board=LOLIN32->name:WEMOS LOLIN32; variant=lolin32")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_Node32s)
pinLed=2;
Serial.println(String(F("Board=Node32s->name:Node32s; variant=node32s")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_NodeMCU_32S)
Serial.println(String(F("Board=NodeMCU_32S->name:NodeMCU-32S; variant=node-32S")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_M5Stack_Core_ESP32)
pinLed=2;
Serial.println(String(F("Board=M5Stack_Core_ESP32->name:M5Stack_Core_ESP32; variant=m5stack_core_esp32")));
#endif
//-------------------------------------------------------------------------
//#if defined(ARDUINO_D_duino_32) //--Не работает
//Serial.println(String(F("Board=D-duino-32->name:D-duino-32; variant=d-duino-32")));
//#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_D1_MINI32)
pinLed=2;
Serial.println(String(F("Board=D1_MIMI32->name:WEMOS D1 MINI ESP32; variant=d1_mini32")));
#endif
//=========================================================================
// Контроллеры STM32-master STM32F1
//=========================================================================
//-------------------------------------------------------------------------
#if defined(ARDUINO_MAPLE_MINI)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F1-master: Board=MAPLE_MINI->name:Maple Mini; variant=maple_mini")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_MAPLE_REV3)
Serial.println(String(F("STM32F1-master: Board=MAPLE_REV3->name:Maple(Rev3); variant=maple")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_MAPLE_REV6)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F1-master: Board=MAPLE_REV6->name:Maple(Rev6); variant=maple_ret6")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_STM32F103C)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F1-master: Board=GENERIC_STM32F103C->name:Generic STM32F103C series; variant=generic_stm32f103C")));
#endif
//=========================================================================
// Контроллеры STM32-master STM32F4
//=========================================================================
#if defined(ARDUINO_discovery_f4)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F4-master: Board=discovery_f4->name:STM32 Discovery F407; variant=discovery_f407")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_blackpill_f401)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F4-master: Board=blackpill_f401->name:Blackpill STM32F401CCU6; variant=blackpill_f401")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_disco_F411E)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F4-master: Board=disco_F411E->name:STM32 Discovery F411E; variant=disco_f411")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_generic_f407v)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F4-master: Board=generic_f407v->name:Generic STM32F407V series; variant=generic_f407v")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_generic_f407v_mini)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F4-master: Board=generic_f407+nimi->name:Generic STM32F407V mini series; variant=generic_f407v")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_arch_max)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F4-master: Board=arch_max->name:Seeed Arch max; variant=arch_max")));
#endif
//-------------------------------------------------------------------------
#if defined(_BOARD_GENERIC_F407V_H_)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32F4-master: Board=_BOARD_GENERIC_F407V_H_->name:Generic STM32F407V series; variant=generic_f407v")));
#endif
//====================================================================================================
//=========================================================================
// Контроллеры STM32duino STM32F1
//=========================================================================
#if defined(ARDUINO_BLUEPILL_F103C6)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=BLUEPILL_F103C6->name:BluePill F103C6; variant=PILL_F103XX")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_BLUEPILL_F103C8)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=BLUEPILL_F103C8->name:BluePill F103C8; variant=PILL_F103XX")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_BLUEPILL_F103CB)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=BLUEPILL_F103CB->name:BluePill F103CB(or C8 with 129k); variant=PILL_F103XX")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_BLACKPIIL_F103C8)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=BLACKPILL_F103C8->name:BlackPill F103C8; variant=PILL_F103XX")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_BLACKPILL_F103CB)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=BLACKPILL_F103CB->name:BlackPill F103CB(or C8 with 129k); variant=PILL_F103XX")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_F103C4)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=GENERIC_F103C4->name:Generic F103C4; variant=Generic_F103Rx")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_F103C6)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=GENERIC_F103C6->name:Generic F103C6; variant=Generic_F103Rx")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_F103C8)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=GENERIC_F103C8->name:Generic F103C8; variant=Generic_F103Rx")));
#endif[attachment=2]Идентификаторы плат_2.jpg
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_F103RE)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=GENERIC_F103C4->name:Generic F103C4; variant=Generic_F103Rx")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_F103TE)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=GENERIC_F103TE->name:Generic F103TE; variant=Generic_F103Tx")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_F103VE)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=GENERIC_F103VE->name:Generic F103VE; variant=Generic_F103Vx")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_GENERIC_F103ZE)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=GENERIC_F103VE->name:Generic F103ZE; variant=Generic_F103Zx")));
#endif
//-------------------------------------------------------------------------
#if defined(ARDUINO_MAPLEMINI_F103CB)
pinLed=LED_BUILTIN;
Serial.println(String(F("STM32duino: Board=MAPLEMINI_F103CB->name:Maple Mini F103CB; variant=MAPLEMINI_F103CB")));
#endif
//========================================================================
//========================================================================
Serial.println(String(F(" End ***Test definition mode board*** pinLed=")) +String(pinLed));
pinMode(pinLed, OUTPUT);
}
//========================================================================
void loop() {
blink=!blink; digitalWrite(pinLed,blink); delay(250);
}
[/attachment]
-----
Сейчас будем дорабатывать свои библиотеки.
Возможно для STM32F1 удастся заложить возможность использования любого ядра Clark и STM32duino.
Первое компилируется и грузится быстрее, можно это делать через USB,
второе и содержит много новых контроллеров, можно работать с регистрами контроллера через библиотеку HAL,
но компилируется долго, загрузка в основном через STLink, через USB можно, но не очень удобно (пока проще не получается).