Als erstes möchte ich einmal loswerden, dass sich die Syntax der Sprache
C nicht ändert, wenn man eine Library von ST einbindet oder austauscht.
Die Syntax ist also nicht "neu". Was sich ändert ist das API.
Ich wollte auch letztens mal das STM32 Cube ausprobieren, und habe einen
Blick in den CAN-Header geworfen, und gesehen:
1 | typedef struct
|
2 | {
|
3 | /* ... anderes Zeug ... */
|
4 |
|
5 |
|
6 | uint32_t TTCM; /*!< Enable or disable the time triggered communication mode.
|
7 | This parameter can be set to ENABLE or DISABLE. */
|
8 |
|
9 | uint32_t ABOM; /*!< Enable or disable the automatic bus-off management.
|
10 | This parameter can be set to ENABLE or DISABLE */
|
11 |
|
12 | uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode.
|
13 | This parameter can be set to ENABLE or DISABLE */
|
14 |
|
15 | uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode.
|
16 | This parameter can be set to ENABLE or DISABLE */
|
17 |
|
18 | uint32_t RFLM; /*!< Enable or disable the receive FIFO Locked mode.
|
19 | This parameter can be set to ENABLE or DISABLE */
|
20 |
|
21 | uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority.
|
22 | This parameter can be set to ENABLE or DISABLE */
|
23 | }CAN_InitTypeDef;
|
Die Herren verwenden tatsächlich uint32_t als boolean-Typ, sprich, sie
nutzen 1 Bit des uint32_t und verschwenden die 31 übrigen - wenigstens
uint8_t hätten sie nehmen können, um nur 7 von 8 bits zu verschwenden
statt 31 von 32.
Außerdem haben sie den ganzen Ablauf umgebaut, die Library verwurstet
jetzt selbst die Interrupts und man hat selbst keine Kontrolle mehr
darüber. Als ich das gesehen habe, wollte ich die weiteren
Abscheulichkeiten gar nicht erst erforschen, und habe lieber wieder die
alte StdPeripheral Library verwendet...
zB das Konfigurieren der CAN-Filter ist aber auch da so bescheuert, dass
es per direktem Register-Zugriff einfacher und übersichtlicher geht...