Byte-Reihenfolge (Endianness) / Bit-Fields | Byte-Reihenfolge (Endianness) / Bit-Fields
Sowohl die ARM-Cortex-M3- (STM32F103) als auch die ARM-Cortex-M4-Prozessoren (STM32F4) verwenden die Little-Endian-Byte-Reihenfolge.
Code-Beispiele:
union UINT32STRUCT {
struct {
uint32_t b0 : 8; // LSB
uint32_t b1 : 8;
uint32_t b2 : 8;
uint32_t b3 : 8; // MSB
};
uint32_t var;
} q;
...
q.var = 0x12345678;
Serial.printf("q: %x %x %x %x\n", q.b0, q.b1, q.b2, q.b3);
Ergibt:
q: 78 56 34 12
union UINT32STRUCT {
struct {
uint32_t b0 : 12; // LSB
uint32_t b1 : 4;
uint32_t b2 : 4;
uint32_t b3 : 12; // MSB
};
uint32_t var;
} q;
...
q.var = 0x12345678;
Serial.printf("q: %x %x %x %x\n", q.b0, q.b1, q.b2, q.b3);
Ergibt:
q: 678 5 4 123
Die niederwertigen Bit-Felder werden an den niedrigen Adressen abgelegt. Der Compiler sorgt dafür, dass byte-übergreifende Strukturen an den passenden Stellen abgelegt werden.
Eine Register-Struktur wie diese
lässt sich in dieser Struktur darstellen:union {
struct {
uint32_t mem_pd: 1;
uint32_t reserved1: 1;
uint32_t reserved2: 1;
uint32_t rx_size: 4;
uint32_t tx_size: 4;
uint32_t reserved11: 4;
uint32_t rx_flow_thrhd_h3: 3;
uint32_t rx_tout_thrhd_h3: 3;
uint32_t xon_threshold_h2: 2;
uint32_t xoff_threshold_h2: 2;
uint32_t rx_mem_full_thrhd: 3;
uint32_t tx_mem_empty_thrhd: 3;
uint32_t reserved31: 1;
};
uint32_t val;
} mem_conf;
Die niederwertigen Felder sind zuerst zu nennen.
Siehe auch ESP8266-Byte-Reihenfolge.
Serielle USB-Schnittstelle (Serial) | Serielle USB-Schnittstelle (Serial)
C++14 | C++14
Die Arduino-Board-Library von STMicroelectronics (Stand Version 2.2.0) installiert einen C++-Compiler (GCC), der die C++-Version C++14 unterstützt. Eine interessantes Feature dieser Version ist die optionale Einbindung einer Datei. D.h. das Einbinden führt nicht zu einem Fehler, wenn die Datei nicht vorhanden ist. Dadurch ergibt sich z.B. die Möglichkeit in Arduino-Bibliotheken projektspezifische lokale Konfigurationsdateien einzubinden.
#if __has_include( "Config.h" ) // Der STM-Compliler unterstützt C++14
#include "Config.h"
#endif
Beispielsweise kann man in der Datei Makros definieren, die dann im Code mit #ifdef oder #ifndef abfragen kann.
STM32-Boards Details | STM32-Boards Details
Informationen zu verschiedenen STM32-Boards und vielen weiteren Informationen findet man bei STM32-base.
Blue Pill STM32F103C8T6 | |
WeAct Black Pill V3.0 STM32F411CEU6 (Die Angabe "STM32F401CEU6" im Text ist falsch. Meine Boards besitzen einen STM32F411CEU6, wie auch auf den Fotos zu erkennen ist). Der CPU-Takt beträgt 96 MHZ. |
: