например, в фоне можно критическую секцию организовать. ну а в ней
данные читать/модифицировать #define __enter_critical() {uint32_t SR_SAVE = __get_PRIMASK();__disable_irq()
#define __exit_critical() __set_PRIMASK(SR_SAVE);}
чуть моднее, чем просто запрет прерываний и последующее разрешение. __get_PRIMASK и __set_PRIMASK живут где-то в CMSIS - наверно в core_cm0.h или т.п.