OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13954|回复: 12

STM32备份寄存器BKP问题

[复制链接]

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2012-6-29
在线时间
38 小时
发表于 2013-3-27 19:11:42 | 显示全部楼层 |阅读模式
如何把大量的数据写入备份寄存器    一个备份寄存器最多能装多少个数据 怎么装  原子哥求救啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-3-28 09:38:31 | 显示全部楼层
备份区域知识,在STM32中文参考手册中有讲解,
在我们开发指南的RTC实验中有讲解。。。。
贴出来就是:
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟  
  WR_BackupAccessCmd(ENABLE); //使能后备寄存器访问
  BKP_WriteBackupRegister(BKP_DR1, 0X5050); //向指定的后备寄存器中写入用户程序数据
 if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)  //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎



#define BKP_DR1                           ((uint16_t)0x0004)
#define BKP_DR2                           ((uint16_t)0x0008)
#define BKP_DR3                           ((uint16_t)0x000C)
#define BKP_DR4                           ((uint16_t)0x0010)
#define BKP_DR5                           ((uint16_t)0x0014)
#define BKP_DR6                           ((uint16_t)0x0018)
#define BKP_DR7                           ((uint16_t)0x001C)
#define BKP_DR8                           ((uint16_t)0x0020)
#define BKP_DR9                           ((uint16_t)0x0024)
#define BKP_DR10                          ((uint16_t)0x0028)
#define BKP_DR11                          ((uint16_t)0x0040)
#define BKP_DR12                          ((uint16_t)0x0044)
#define BKP_DR13                          ((uint16_t)0x0048)
#define BKP_DR14                          ((uint16_t)0x004C)
#define BKP_DR15                          ((uint16_t)0x0050)
#define BKP_DR16                          ((uint16_t)0x0054)
#define BKP_DR17                          ((uint16_t)0x0058)
#define BKP_DR18                          ((uint16_t)0x005C)
#define BKP_DR19                          ((uint16_t)0x0060)
#define BKP_DR20                          ((uint16_t)0x0064)
#define BKP_DR21                          ((uint16_t)0x0068)
#define BKP_DR22                          ((uint16_t)0x006C)
#define BKP_DR23                          ((uint16_t)0x0070)
#define BKP_DR24                          ((uint16_t)0x0074)
#define BKP_DR25                          ((uint16_t)0x0078)
#define BKP_DR26                          ((uint16_t)0x007C)
#define BKP_DR27                          ((uint16_t)0x0080)
#define BKP_DR28                          ((uint16_t)0x0084)
#define BKP_DR29                          ((uint16_t)0x0088)
#define BKP_DR30                          ((uint16_t)0x008C)
#define BKP_DR31                          ((uint16_t)0x0090)
#define BKP_DR32                          ((uint16_t)0x0094)
#define BKP_DR33                          ((uint16_t)0x0098)
#define BKP_DR34                          ((uint16_t)0x009C)
#define BKP_DR35                          ((uint16_t)0x00A0)
#define BKP_DR36                          ((uint16_t)0x00A4)
#define BKP_DR37                          ((uint16_t)0x00A8)
#define BKP_DR38                          ((uint16_t)0x00AC)
#define BKP_DR39                          ((uint16_t)0x00B0)
#define BKP_DR40                          ((uint16_t)0x00B4)
#define BKP_DR41                          ((uint16_t)0x00B8)
#define BKP_DR42                          ((uint16_t)0x00BC)
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 1 反对 0

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-3-27 19:12:29 | 显示全部楼层
回复【楼主位】catbal:
---------------------------------
大量寄存器写入备份寄存器????您的意思是?
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2012-6-29
在线时间
38 小时
 楼主| 发表于 2013-3-27 19:14:02 | 显示全部楼层
回复【2楼】Admin:
---------------------------------
是大量数据写入备份寄存器  打错了 不好意思
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-3-27 19:22:36 | 显示全部楼层
他只有42个16位的寄存器,条件不允许你大量去写。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2012-6-29
在线时间
38 小时
 楼主| 发表于 2013-3-27 19:33:51 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
比如说我有50个变量,我现在要把这50个变量(其实不止50个,这些变量也就是一些数值 或字符串)写到备份寄存器中数据寄存器中去 怎么处理   你刚所说的42个16位的寄存器指的是? 怎么操作
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2012-6-29
在线时间
38 小时
 楼主| 发表于 2013-3-27 20:36:29 | 显示全部楼层
如何对备份寄存器进行使能操作,是不是直接取消写保护就可以了
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-3-27 21:08:35 | 显示全部楼层
回复【5楼】catbal:
---------------------------------
手册中有讲解。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2012-6-29
在线时间
38 小时
 楼主| 发表于 2013-3-28 09:30:28 | 显示全部楼层
回复【7楼】Admin:
---------------------------------
比如说我有50个变量,我现在要把这50个变量(其实不止50个,这些变量也就是一些数值 或字符串)写到备份寄存器中数据寄存器中去 怎么处理   你刚所说的42个16位的寄存器指的是? 怎么操作
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-3-28 09:42:03 | 显示全部楼层
已经指出来知识是什么,在哪里,去看看有益无害。。。。



 
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
899
金钱
899
注册时间
2012-6-29
在线时间
38 小时
 楼主| 发表于 2013-3-28 12:56:40 | 显示全部楼层
回复【10楼】Admin:
---------------------------------
stm32中的flash的功能是否与AVR的差不多,是不是可以用来存储数据,是不是可以使用flash来模拟eeprom操做
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-3-28 13:40:37 | 显示全部楼层
        //返回地址
        inline u32 ADDR(u16 x)
        {
            return (BKP_BASE + ((x<10)?(x<<2)(x+5)<<2) ) );
        } 
        //读取备份寄存器内容
inline u16 Read(u16 addr)         {             return *(vu16 *) (ADDR(addr)) ;
        }
        //写入备份寄存器内容
inline void Write(u16 addr, u16 dat) //addr= 1~42 共42words
{
PWR->CR |= (1<<8);
*(vu16 *) (ADDR(addr)) = dat;
PWR->CR &= ~(1<<8);
}

回复 支持 反对

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-9-16
在线时间
33 小时
发表于 2022-6-14 12:22:31 | 显示全部楼层
本帖最后由 kaney4115 于 2022-6-14 12:42 编辑

12楼的方法可以的,直接读写,并且使用inline关键词,节省执行时间,但是返回地址应该是 return (BKP_BASE + ((x<=10)?(x<<2)(x+5)<<2))); 小于等于10,否则第10个地址 写入不成功。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 00:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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