打印
[研电赛技术支持]

GD32F470开发经验分享:BKPSRAM的使用

[复制链接]
625|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caizhiwei|  楼主 | 2023-6-3 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 caizhiwei 于 2023-6-3 10:05 编辑

        BKPSRAM(备份SRAM)应用于备份域,即使当VDD供电电源掉电时,该SRAM仍可保持其内容。 附加SRAM(ADDSRAM)只在一些特殊的GD32F4xx器件中可用。 由于采用AHB互联矩阵,上述SRAM块可以同时被不同的AHB主机访问,例如,即使CPU正在访问SRAM0,USBHS也可以访问SRAM1。
        BKPSRAM 具有64kb的空间,如果您设备中使用 RTC后备电池,那么这个区域的sram可以用起来了。
不多说,直接上源码(项目级别的幼稚园码)
1.初始化:
void BSP_BkpSRAM_Init(void)
{
        rcu_periph_clock_enable(RCU_BKPSRAM);
        pmu_backup_ldo_config(PMU_BLDOON_ON); //使能备份域LDO
        pmu_backup_write_enable();
        //启用备份SRAM的低功耗稳压器,以保持它在VBAT模式的内容
        pmu_lowdriver_mode_enable();  
        //等备份SRAM的低功耗稳压器已准备就绪
        while(pmu_flag_get(PMU_FLAG_BLDORF)==RESET){};
}
然后,就是读写接口了:
/******************************************************************************
* 功能                        :        写入数据到备份SRAM中
* 参数                        :        AddrOffset:地址偏移,0-4KB范围;pData:要写入的数据;
                                        DataLen:要写入的数据元素的个数
* 返回                        :        TRUE or FALSE
* 说明                        :         注意:地址偏移+写入的数据长度不能超过4KB
********************************************************************************/
bool BSP_BKPSRAM_Write_U32_Buff(uint32_t AddrOffset, uint32_t *pData, uint32_t Data_num)
{         
        if(pData == NULL) return false;  //无效的地址
        if(Data_num == 0) return false;         //无效的数量
        if(AddrOffset >= BACKUP_SRAM_SIZE) return false; //起始地址有误
        if((AddrOffset + Data_num*4) >= BACKUP_SRAM_SIZE) return false; //空间不够
        memcpy((uint32_t *)(BKPSRAM_BASE + AddrOffset), pData, Data_num*4);
        return true;        
}


//BKPSRAM数据读取
// 元素的个数
bool BSP_BKPSRAM_Read_U32_Buff(uint32_t addr_offset,  uint32_t *buff, uint32_t num)
{
    if(addr_offset >= BACKUP_SRAM_SIZE) return false; //起始地址有误
        memcpy( buff, (uint32_t *)(BKPSRAM_BASE + addr_offset), num*4);
        return true;
}
最后来一个测试:

    BSP_BKPSRAM_Write_U32_Buff(0, (uint32_t *)Crc32Table, 10);
    BSP_BKPSRAM_Read_U32_Buff(0, buffer, 10);
    put_dump ( buffer, 10, 4);
如有疑问,希望大家评论留言哦~



使用特权

评论回复
沙发
sagade| | 2023-6-3 15:22 | 只看该作者
老哥,“BKPSRAM 具有64kb的空间”, 这个是笔误吧,不是4KB大小吗?
BKPSRAM有什么应用场景吗,关键数据是不敢存在这里的

使用特权

评论回复
板凳
caizhiwei|  楼主 | 2023-6-3 16:52 | 只看该作者
sagade 发表于 2023-6-3 15:22
老哥,“BKPSRAM 具有64kb的空间”, 这个是笔误吧,不是4KB大小吗?
BKPSRAM有什么应用场景吗,关键数据是 ...

手快,笔误,确实是4KB。
在项目中,可以实现掉电存储,但是又比写Flash 快很多哦

使用特权

评论回复
评论
米兰优卡 2023-9-8 09:00 回复TA
老哥,请问这个BKPSRAM后备RAM,掉电真的能保存数据吗? 我想单片机工作时保存一些采集的数据,下次开机能读到以前采集的数据, 我不用后备电池,关机,单片机彻底不工作。 可以吗?? 
地板
caigang13| | 2023-6-3 17:04 | 只看该作者
这个主要是低功耗应用比较多吧

使用特权

评论回复
5
Bowclad| | 2023-9-27 20:53 | 只看该作者
测试一下

使用特权

评论回复
6
Undshing| | 2023-9-27 21:27 | 只看该作者
这个性能挺不错的啊,低功耗可以吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

846

帖子

11

粉丝