[MM32软件] MM32 备份域学习(兼容STM32)

[复制链接]
 楼主| 杨寅辉 发表于 2019-11-30 21:14 | 显示全部楼层 |阅读模式
内容提要
  • 备份域工作原理
  • 备份域特性
  • 备份域的保护:侵入检测
  • 备份域侵入检测

 楼主| 杨寅辉 发表于 2019-11-30 21:17 | 显示全部楼层
备份域电源与主要内容
847278-20161221202813573-1563005086.png
847278-20161221202822276-213968113.png
 楼主| 杨寅辉 发表于 2019-11-30 21:18 | 显示全部楼层
备份域特性
20字节数据后备寄存器(中容量和小容量产品),或 84 字节数据后备寄存器(大容量产品),当Vdd电源被切断,仍由Vbak维持电源。
用来管理防侵入检测并具有中功能的状态/控制寄存器。
用来存储RTC校验值的校验寄存器。
在PC13管脚(当该管脚不用于侵入检测时)上输出 RTC 校准时钟, RTC 闹钟脉冲或者秒脉冲
 楼主| 杨寅辉 发表于 2019-11-30 21:18 | 显示全部楼层
侵入检测理解
备份域可以存储用户的重要数据,为防止恶意读写,开启侵入检测可以在方式恶意读写备份域时产生复位信号,迫使备份域的数据被清除,保护用户的重要信息。
 楼主| 杨寅辉 发表于 2019-11-30 21:18 | 显示全部楼层
备份域侵入检测测试
  1. void TamperEventTest()
  2. {
  3.     //设置时钟PWR和BKP
  4.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
  5.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
  6.     PWR_BackupAccessCmd(ENABLE);  //使能访问备份域和RTC

  7.     //侵入引脚时钟设置
  8.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

  9.     //初始化备份域
  10.     RCC_BackupResetCmd(ENABLE);
  11.     RCC_BackupResetCmd(DISABLE);

  12.     //设置备份域时钟
  13.     RCC_LSEConfig(RCC_LSE_ON);    //Configures the External Low Speed oscillator (LSE).
  14.     RCC_RTCCLKCmd(ENABLE);        //Enables or disables the RTC clock.
  15.     RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //Configures the RTC clock (RTCCLK).

  16.     while(!(RCC->BDCR & 0x1<<1)); //External low-speed clock ready flag.

  17.     BKP_ClearFlag();  //Set CTE bit to clear Tamper Pin Event flag

  18.     //配置信号控制(PA1)侵入检测的信号(PC13)
  19.     GPIO_InitTypeDef    GPIO_InitStructure;     
  20.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  21.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  22.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  23.     //write backup registers
  24.     BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
  25.     BKP_WriteBackupRegister(BKP_DR2, 0x8888);
  26.     BKP_WriteBackupRegister(BKP_DR3, 0x6666);
  27.     BKP_WriteBackupRegister(BKP_DR4, 0x9999);
  28.     BKP_WriteBackupRegister(BKP_DR5, 0x9999);
  29.     BKP_WriteBackupRegister(BKP_DR6, 0x9999);
  30.     BKP_WriteBackupRegister(BKP_DR7, 0x9999);
  31.     BKP_WriteBackupRegister(BKP_DR8, 0x9999);
  32.     BKP_WriteBackupRegister(BKP_DR9, 0x9999);
  33.     BKP_WriteBackupRegister(BKP_DR10, 0x9999);

  34.     BKP->CR=0x01;  
  35.     GPIOA->ODR=1;//set PA[0]=1 >> set PC[13]
  36.     while(1)
  37.     {
  38.         if((BKP->CSR &0x100)==0x100)//tef tamper event flag
  39.             {
  40.                 //A write to the BKP->DRx register is performed while tef is set the value will not be stored
  41.                 BKP->DR1=0x6666;
  42.                 BKP->DR2=0x6666;
  43.                 delay(100);
  44.                 BKP->CSR=0x1;//clear tamper event flag;侵入检测,将使备份域复位
  45.                 break;
  46.             }
  47.     }
 楼主| 杨寅辉 发表于 2019-11-30 21:19 | 显示全部楼层
 楼主| 杨寅辉 发表于 2019-11-30 21:19 | 显示全部楼层
实验注意事项
设置了两个GPIO引脚,PA1和PC13,PA1用于控制等待配置完成,然后请自行添加PC13的信号(等到PA1高电平来)即侵入信号。
实验结果应该是备份域被复位,读出数据为0x0。
 楼主| 杨寅辉 发表于 2019-11-30 21:19 | 显示全部楼层
总结
复位:RCC中的BDCR设置实现软件复位,另外,侵入检测也可以产生一个复位。
写操作:电源控制寄存器(PWR_CR)的DBP位控制备份域寄存器与RTC的访问
renzheshengui 发表于 2019-12-4 15:18 | 显示全部楼层
非常感谢楼主分享
paotangsan 发表于 2019-12-4 15:22 | 显示全部楼层
非常感谢楼主分享
labasi 发表于 2019-12-4 15:27 | 显示全部楼层
非常感谢楼主分享
nawu 发表于 2019-12-16 12:40 | 显示全部楼层
非常感谢楼主分享
qcliu 发表于 2019-12-16 13:09 | 显示全部楼层
非常不错的帖子
tfqi 发表于 2019-12-16 13:14 | 显示全部楼层
非常感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

295

帖子

2

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