关于
STM32f7xx 的设置,我的设置如下:
sta
tic void MPU_Set_Protection(uint32_t baseaddr,
uint32_t size,
uint32_t rnum,
uint32_t ap,
u8 sen,
u8 cen,
u8 ben)
{
MPU_Region_InitTypeDef MPU_Initure;
HAL_MPU_Disable(); //配置MPU之前先关闭MPU,配置完成以后在使能MPU
MPU_Initure.Enable = MPU_REGION_ENABLE; //使能该保护区域
MPU_Initure.Number = rnum; //设置保护区域
MPU_Initure.BaseAddress = baseaddr; //设置基址
MPU_Initure.Size = size; //设置保护区域大小
MPU_Initure.SubRegionDisable = 0x00; //禁止子区域
MPU_Initure.TypeExtField = MPU_TEX_LEVEL0; //设置类型扩展域为level0
MPU_Initure.AccessPermission = (uint8_t)ap; //设置访问权限,
MPU_Initure.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; //允许指令访问(允许读取指令)
MPU_Initure.IsShareable = sen; //是否允许共用
MPU_Initure.IsCacheable = cen; //是否允许cache
MPU_Initure.IsBufferable = ben; //是否允许缓冲
HAL_MPU_ConfigRegion(&MPU_Initure); //配置MPU
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); //开启MPU
}
// 下面这样设置后,读写 qspi 没有反应,屏蔽此段代吗后 qspi 可以正常读写了,这是为何 ???
MPU_Set_Protection(0x80000000,
MPU_REGION_SIZE_2GB, // 吧这个改成 256MByte 就可以了,是不是 不能够设置 为 2GByte ??
MPU_REGION_NUMBER3,
MPU_REGION_FULL_ACCESS,
MPU_ACCESS_NOT_SHAREABLE,
MPU_ACCESS_CACHEABLE,
MPU_ACCESS_BUFFERABLE); //保护整个NAND FLASH区域,共2048M字节
本帖最后由 hpdell 于 2017-3-26 18:38 编辑
感觉这个 f7的 mpu 就是个麻烦,有时吧这个功能设置好了,但是另外一个又不能够使用了,哎,悲惨的 f7比如下面的设置
static void MPU_Set_Protection(uint32_t baseaddr,
uint32_t size,
uint32_t rnum,
uint32_t ap,
u8 sen,
u8 cen,
u8 ben)
{
MPU_Region_InitTypeDef MPU_Initure;
HAL_MPU_Disable(); //配置MPU之前先关闭MPU,配置完成以后在使能MPU
MPU_Initure.Enable = MPU_REGION_ENABLE; //使能该保护区域
MPU_Initure.Number = rnum; //设置保护区域
MPU_Initure.BaseAddress = baseaddr; //设置基址
MPU_Initure.Size = size; //设置保护区域大小
MPU_Initure.SubRegionDisable = 0x00; //禁止子区域
MPU_Initure.TypeExtField = MPU_TEX_LEVEL0; //设置类型扩展域为level0
MPU_Initure.AccessPermission = (uint8_t)ap; //设置访问权限,
MPU_Initure.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; //允许指令访问(允许读取指令)
MPU_Initure.IsShareable = sen; //是否允许共用
MPU_Initure.IsCacheable = cen; //是否允许cache
MPU_Initure.IsBufferable = ben; //是否允许缓冲
HAL_MPU_ConfigRegion(&MPU_Initure); //配置MPU
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); //开启MPU
}
MPU_Set_Protection(0xC0000000,
MPU_REGION_SIZE_128MB,
MPU_REGION_NUMBER2,
MPU_REGION_FULL_ACCESS,
MPU_ACCESS_NOT_SHAREABLE,
MPU_ACCESS_CACHEABLE, // 此处设置为 MPU_ACCESS_NOT_CACHEABLE 在申请 外部SDRAM内存进行读写时完全正确,
// 但 设置MPU_ACCESS_CACHEABLE 为这个时,申请 外部SDRAM内存进行读写时错误, // 如果不设置为 MPU_ACCESS_CACHEABLE 这个,那么外部设置单片机的 Heap 使用时,速度又跟不上
// 请教下此处该如何设置才稳妥 ?????????????????????????????
MPU_ACCESS_BUFFERABLE); //保护SDRAM区域,共128M字节
一周热门 更多>