Bei einem AVR (Arduino) ist das 16 Bit, bei einem STM32 32 Bit.
Für jemanden der wenig/keine Ahnung von µC hat sehen diese Effekte verwirrend und buggy aus, jedoch ist das so im C Compiler hinterlegt. (so auch bei 32 / 64 Bit Programmen im PC!)
Die einzige Abhilfe ist die Datei
#include <stdint.h>
mit ein zu binden. Diese Datei definiert Integer Datentypen so, dass die auch genau das Format haben wie man will.
int8_t
int16_t
int32_t
int64_t
uint8_t
uint16_t
uint32_t
uint64_t
Und das ganze funktioniert garantiert, auch wenn man den Quellcode man von einem AVR >> STM32 µC portieren sollte, falls man doch mal feststellen sollte dass der AVR eine olle Krücke, die schon steinalt ist.

Das Verhalten vom C Compiler ist schon so, seit dem es den ersten C Compiler gab.
Konstante:
1000 >> irgend ein int typ, der Compiler muss selbst was erfinden
1000L >> eine Konstante vom Typ "long"
1000UL >> eine Konstante vom Typ "unsigned long"
Um heraus zu finden wie viele bytes ein Datentyp belegt kann man das abfragen:
SizeOfDatentyp = sizeof(int); // beim AVR > 2 Byte, beim STM32 > 4 Byte
SizeOfDatentyp = sizeof(long); // beim AVR > 4 Byte, beim STM32 > 4 Byte
SizeOfDatentyp = sizeof(long long);