user4581301 suggested that I go header surfing. This is what I found:
typedef __UINT32_TYPE__ __uint32_t;
typedef __uint32_t uint32_t ;
Then Why is uint32_t typedeffed to unsigned long on arm-none-eabi GCC, and how to change it? explains that arm-none-eabi-gcc points __UINT32_TYPE__ to long unsigned int but makes them 4 bytes long.
I guess that explains why the compiler doesn't see the match to unsigned long.