You use %lu, this is wrong. The %luspecifier is intended for unsigned longand only unsigned long, not uint32_t. That is why the conclusion is wrong. Use instead PRIu32.
Your compiler should have caught this error for you if you compiled with warnings turned on.
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h> // defines PRIu32
printf(
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n",
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX);
In practice, it is PRIu32defined as "u"for most systems.