uint32_t *p = (void *)0xC0FFEE;
*p = 1;
printf("%u\n", *p);

↓↓↓↓↓

printf("%u\n", 1);

みたいなことが起きるから
volatile uint32_t *p ってvolatile修飾子をつけた定義にする