硬汉嵌入式论坛

 找回密码
 立即注册
查看: 672|回复: 3
收起左侧

[STM32H7] h7 backupRAM写保护导致的hardfault

[复制链接]

14

主题

54

回帖

96

积分

初级会员

积分
96
发表于 2024-9-17 08:31:56 | 显示全部楼层 |阅读模式
使用stm32H750时候使用backupram,已配置MPU如下

[C] 纯文本查看 复制代码
    /* AXI SRAM MPU set to Write back, Read allocate,Write allocate */
    MPU_InitStruct.Enable = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress = 0x24000000;
    MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
    MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.Number = MPU_REGION_NUMBER0;
    MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);

		// RAM D2
		MPU_InitStruct.BaseAddress = 0x30000000;
    MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
		HAL_MPU_ConfigRegion(&MPU_InitStruct);

		// RAM D3
		MPU_InitStruct.BaseAddress = 0x38000000;
    MPU_InitStruct.Size = MPU_REGION_SIZE_64KB;
		HAL_MPU_ConfigRegion(&MPU_InitStruct);

		/* BackUP RAM set to NORMAL, NO Read allocate,NO Write allocate */
		MPU_InitStruct.BaseAddress = 0x38800000;
    MPU_InitStruct.Size = MPU_REGION_SIZE_4KB;
		MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
		MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
		HAL_MPU_ConfigRegion(&MPU_InitStruct);


然后lvgl库中若使用DMA2D加速,会调用SCB_CleanInvalidateDCache,若先前调用HAL_PWR_DisableBkUpAccess则会导致hardfault。

但是我已经配置备份域NOT_BUFFERABLE NOT_CACHEABLE了啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-9-17 09:56:13 | 显示全部楼层
没太理解楼主意思,不禁止备份RAM正常吗

HAL_PWR_DisableBkUpAccess
回复

使用道具 举报

14

主题

54

回帖

96

积分

初级会员

积分
96
 楼主| 发表于 2024-9-17 10:01:47 | 显示全部楼层
eric2013 发表于 2024-9-17 09:56
没太理解楼主意思,不禁止备份RAM正常吗

HAL_PWR_DisableBkUpAccess

不禁止正常,但是backupram本身就需要保护吧,所以每次修改配置时候都是HAL_PWR_EnableBkUpAccess(); 修改完后 HAL_PWR_DisableBkUpAccess();
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-9-18 08:08:32 | 显示全部楼层
Superusrss 发表于 2024-9-17 10:01
不禁止正常,但是backupram本身就需要保护吧,所以每次修改配置时候都是HAL_PWR_EnableBkUpAccess(); 修 ...

你不对这个0x38800000区域做MPU设置,是否正常。

还是不行的话,考虑一直开启就行了。按说这个和MPU设置没什么关系
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-28 23:07 , Processed in 0.232611 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表