Forum: System Workbench for STM32

Memory Protection Unit not working

uiUART_CountThe processor is an STM32F373VCT

The below code does not cause the desired memfault when uiUART_Count is written to.


volatile unsigned int attribute ((aligned int)) uiUART_Count = 0;

// Located among the first lines in main():
SCB->SHCSR |= SCB_SHCSR_USGFAULTENA_Pos | SCB_SHCSR_BUSFAULTENA_Pos | SCB_SHCSR_MEMFAULTENA_Pos;
MPU_Region_InitTypeDef MPU_Init =
{
.Enable = SET,
.Number = 0,
.BaseAddress = (uint32_t)&uiUART_Count,
.Size = 4, // This is 32 Bytes, the minimum possible.
.SubRegionDisable = 0,
.TypeExtField = 0,
.AccessPermission = 0b110,
.DisableExec = 0,
.IsShareable = 1,
.IsCacheable = 1,
.IsBufferable = 0
};
// Align BaseAddress on 32 byte boundaries.
MPU_Init.BaseAddress &= (~(uint32_t)0) < < ( MPU_Init.Size + 1 );
HAL_MPU_ConfigRegion( &MPU_Init);


The below line of code did not cause a call to MemManage_Handler() as expected:

uiUART_Count++;

The address if uiUART_Count is 0x200007cc
The value of MPU_Init.BaseAddress is 0x200007c0

Something is overwriting the value of uiUART_Count and others. I am attempting to use the MPU find out where in the code it is being overwritten. I need to know why this is not working.