如何把MM32使用RAM的一块区域当做备份寄存器

如何把MM32的RAM的一块区域当做备份寄存器用

在MCU应用中,常常会使用备份域寄存器保存一些数据,在MCU热复位时,备份域数据不被清除。当使用的MM32没有带备份寄存器时,使用以下方式可以划分一块20字节RAM区域当做备份域使用。

  1. 设置keil配置里面的【Target】标签里面on-chip下的
    IRAM1:start为0x20000000,size为0x1FEC,不勾选“no init”
    IRAM2:start为0x20001FEC,size为0x14,要勾选“no init”
    在这里插入图片描述
  2. 增加simbkp.h,文件内容为
#ifndef __SIMBKP_H__
#define __SIMBKP_H__

#include "types.h" 

#define SIMBPK_BASE   0x20001FEC  //将RAM最后20字节作为备份寄存器


/// @brief Sim Bkp Register Structure Definition

typedef struct {
    union {
        u8 DR[20];       
        struct {
            u8 DR0;
            u8 DR1;
            u8 DR2;
            u8 DR3;
            u8 DR4;
            u8 DR5;
            u8 DR6;
            u8 DR7;
            u8 DR8;
            u8 DR9;
            u8 DR10;
            u8 DR11;
            u8 DR12;
            u8 DR13;
            u8 DR14;
            u8 DR15;
            u8 DR16;
            u8 DR17;
            u8 DR18;
            u8 DR19;
        };   

    };

} SIMBKP_TypeDef;

#define SIMBKP      ((SIMBKP_TypeDef*) SIMBPK_BASE)

#endif


  1. 在main里面实现测试功能,如果是不断电复位可以看到LED灯会快闪,重新上电LED灯会慢闪。
s32 main(void)
{
    u8 i,result;

    LED_Init();
    DELAY_Init();
    CONSOLE_Init(115200);

    for (i = 0; i < 20; i++)
    {
        arry[i] = i;
    }

    result = strncmp((char *)arry, (char *)SIMBKP->DR, 20);

    if (0 == result)
    {
        printf("SIMBKP data is : ");

        for (i = 0; i < 20; i++)
        {
            printf("%d ", SIMBKP->DR[i]);
        }

        printf("\r\n");

        while (1)
        {
            LED1_TOGGLE();
            LED2_TOGGLE();
            LED3_TOGGLE();
            LED4_TOGGLE();
            DELAY_Ms(100);
        }
    }
    else
    {
        for (i = 0; i < 20; i++)
        {
            SIMBKP->DR[i] = arry[i];
        }

        printf("write data into SIMBKP\r\n");

        while (1)
        {
            LED1_TOGGLE();
            LED2_TOGGLE();
            LED3_TOGGLE();
            LED4_TOGGLE();
            DELAY_Ms(500);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值