MM32 备份域学习(兼容STM32)
MM32 备份域学习(兼容STM32)
内容提要
- 备份域工作原理
- 备份域特性
- 备份域的保护:侵入检测
- 备份域侵入检测
备份域电源与主要内容
备份域特性
- 20字节数据后备寄存器(中容量和小容量产品),或 84 字节数据后备寄存器(大容量产品),当Vdd电源被切断,仍由Vbak维持电源。
- 用来管理防侵入检测并具有中功能的状态/控制寄存器。
- 用来存储RTC校验值的校验寄存器。
- 在PC13管脚(当该管脚不用于侵入检测时)上输出 RTC 校准时钟, RTC 闹钟脉冲或者秒脉冲
侵入检测理解
备份域可以存储用户的重要数据,为防止恶意读写,开启侵入检测可以在方式恶意读写备份域时产生复位信号,迫使备份域的数据被清除,保护用户的重要信息。
备份域侵入检测测试
void TamperEventTest()
{
    //设置时钟PWR和BKP
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
    PWR_BackupAccessCmd(ENABLE);  //使能访问备份域和RTC
    //侵入引脚时钟设置
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    //初始化备份域
    RCC_BackupResetCmd(ENABLE);
    RCC_BackupResetCmd(DISABLE);
    //设置备份域时钟
    RCC_LSEConfig(RCC_LSE_ON);    //Configures the External Low Speed oscillator (LSE).
    RCC_RTCCLKCmd(ENABLE);        //Enables or disables the RTC clock.
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //Configures the RTC clock (RTCCLK).
    while(!(RCC->BDCR & 0x1<<1)); //External low-speed clock ready flag.
    BKP_ClearFlag();  //Set CTE bit to clear Tamper Pin Event flag
    //配置信号控制(PA1)侵入检测的信号(PC13)
    GPIO_InitTypeDef    GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    //write backup registers
    BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
    BKP_WriteBackupRegister(BKP_DR2, 0x8888);
    BKP_WriteBackupRegister(BKP_DR3, 0x6666);
    BKP_WriteBackupRegister(BKP_DR4, 0x9999);
    BKP_WriteBackupRegister(BKP_DR5, 0x9999);
    BKP_WriteBackupRegister(BKP_DR6, 0x9999);
    BKP_WriteBackupRegister(BKP_DR7, 0x9999);
    BKP_WriteBackupRegister(BKP_DR8, 0x9999);
    BKP_WriteBackupRegister(BKP_DR9, 0x9999);
    BKP_WriteBackupRegister(BKP_DR10, 0x9999);
    BKP->CR=0x01;
    GPIOA->ODR=1;//set PA[0]=1 >> set PC[13]
    while(1)
    {
        if((BKP->CSR &0x100)==0x100)//tef tamper event flag
            {
                //A write to the BKP->DRx register is performed while tef is set the value will not be stored
                BKP->DR1=0x6666;
                BKP->DR2=0x6666;
                delay(100);
                BKP->CSR=0x1;//clear tamper event flag;侵入检测,将使备份域复位
                break;
            }
    }
实验注意事项
- 设置了两个GPIO引脚,PA1和PC13,PA1用于控制等待配置完成,然后请自行添加PC13的信号(等到PA1高电平来)即侵入信号。
- 实验结果应该是备份域被复位,读出数据为0x0。
总结
- 复位:RCC中的BDCR设置实现软件复位,另外,侵入检测也可以产生一个复位。
- 写操作:电源控制寄存器(PWR_CR)的DBP位控制备份域寄存器与RTC的访问
参考资料
[1]. MM32 miniboard资料
MM32 备份域学习(兼容STM32)的更多相关文章
- MM32看门狗学习(兼容STM32)
		MM32看门狗学习(兼容STM32) IWDG独立看门狗 思维导图 IWDG框图与理解 1.独立看门狗分为两个部分,配置寄存器在1.8V供电区,计数器的核心部分在VDD供电区(即使停机/待机模式计数器 ... 
- MM32 RTC学习(兼容STM32)
		RTC学习 RTC简述 实时时钟是一个独立的定时器. RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能. 修改计数器的值可以重新设置系统当前的时间和日期. RTC模块和时钟配 ... 
- MM32初识(兼容STM32)
		MM32初识(兼容STM32) 资源与开发环境 keil 5.0 MM32 miniboard 提要 stm32入门(MM32兼容) 点亮LED思路简介 GPIO配置 stm32寄存器理解与操作步骤 ... 
- MM32Flash读写操作(兼容STM32)
		MM32Flash读写操作(兼容STM32) Flash基础描述 思维导图 编程实现读写操作 主函数结构 #include "delay.h" #include "sys ... 
- js跨域传值,兼容ie8以上
		js跨域传值,兼容ie8以上 事先说明,此方法并不支持ie8,如果想要支持ie8的话,需要用这种思路(来自微软): if (window.addEventListener) { window.addE ... 
- LwIP学习笔记——STM32 ENC28J60移植与入门
		0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ... 
- Windows Server 2016-图形化备份域控制器
		上边几章节我们补充了有关Windows Server 2016系统层面的相关内容,本章切回Active Directory正题,继续围绕AD域相关内容进行不断梳理补充.Windows Server B ... 
- 跨域学习笔记2--WebApi 跨域问题解决方案:CORS
		自己并不懂,在此先记录下来,留待以后学习... 正文 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨 ... 
- Windows Server 2016-Wbadmin命令行备份域控制器
		在上一章我们讲到Windows Server 2016-图形化备份域控制器的方法,本章我们聊聊如何通过命令行Wbadmin对域控制器进行备份.在Windows Server Active Direct ... 
随机推荐
- Java笔试知识总结(第一回)
- linux变量心得
			前一段时间学习了一下linux的变量,现在总结有3点需要特别注意: linux变量和C/C++变量的区别 linux变量的引用 linux变量特有的命令替换 先说第一点,linux变量更像是宏定义,只 ... 
- html页面button样式
			在过去的Web开发中,通常使用Photoshop来设计按钮的样式.不过随着CSS3技术的发展,你完全可以通过几行代码来定制一个漂亮的按钮,并且还可以呈现渐变.框阴影.文字阴影等效果.此类按钮最大的优势 ... 
- exit() die return 的区别
			rutrun 会返回一个值,或不返回值 只是当前函数内return后面的语句将不会执行,后面的其它语句继续执行exit()可以返回值,也可以不返回值直接终止程序 函数输出一条消息,并退出当前脚本. 会 ... 
- PHP转换IP地址到真实地址的方法详解
			本篇文章是对PHP转换IP地址到真实地址的方法进行了详细的分析介绍,需要的朋友参考下 想要把IPv4地址转为真实的地址,肯定要参考IP数据库,商业的IP数据库存储在关系型数据库中,查询和使用都非常 ... 
- angularJS快速入门
			1.引入脚本文件 <link rel="stylesheet" href="http://lib.sinaapp.com/js/bootstrap/v3.0.0/c ... 
- 在动态引用DLL-A中,当参数是个实体,而实体的属性在另一个DLL-B中。。我们需要得到A这个实体并将其赋值,并将赋值的实体传人DLL-A的方法中。
			string strPath = HttpContext.Current.Server.MapPath("/开放式DLL"); DirectoryInfo df = new Dir ... 
- C# 代码中 计算某个函数 或WebService 请求花费时间
			/// 计算请求所花费的时间 System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start( ... 
- POJ2084 Game of Connections(数学,dp)
			题目链接. 分析: 简单的 Catalan 数 将x~y编号,设解为 d(x, y), d(x, y) = {d(x+1,i-1)*d(i+1,y)}, 其中 x+1<= i <= y, ... 
- POJ 2774 最长公共子串
			一定好好学SAM...模板在此: #include<iostream> #include<cstdio> #include<cmath> #include<a ... 
 
			
		

