UART Glitch On Startup Causes Hardfault in FreeRTOS

Another suspect would be DMA of any kind. Accidentally leaving a DMA enabled, or configuring a DMA to write to a buffer stored on the stack, or any other number of mistakes with DMA, can lead to this kind of memory corruption. Might be a good idea to temporarily eliminate all uses of DMA.

Can you clarify one thing? When you said this:

Did you mean two separate guards – one during function entry and one during function exit? Or did you mean you simply disabled the interrupt, called the function which then executed with the interrupt disabled, and then enabled the interrupt again after the function returned? I’m starting to think you meant the latter.