MM32 备份域学习(兼容STM32)

本文介绍MM32系列MCU备份域的工作原理、特性及其侵入检测功能。备份域可在Vdd电源断开时保持数据,通过侵入检测防止非法访问。文章还提供了侵入检测的测试代码。

MM32 备份域学习(兼容STM32)

内容提要

  • 备份域工作原理
  • 备份域特性
  • 备份域的保护:侵入检测
  • 备份域侵入检测

备份域电源与主要内容

847278-20161221202813573-1563005086.png
847278-20161221202822276-213968113.png

备份域特性

  • 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; 
            }
    }

847278-20161221203537370-1647874111.png


实验注意事项

  • 设置了两个GPIO引脚,PA1和PC13,PA1用于控制等待配置完成,然后请自行添加PC13的信号(等到PA1高电平来)即侵入信号。
  • 实验结果应该是备份域被复位,读出数据为0x0。

总结

  1. 复位:RCC中的BDCR设置实现软件复位,另外,侵入检测也可以产生一个复位。
  2. 写操作:电源控制寄存器(PWR_CR)的DBP位控制备份域寄存器与RTC的访问

参考资料

[1]. MM32 miniboard资料

转载于:https://www.cnblogs.com/OneFri/p/6208997.html

### MM32STM32特性对比 #### 1. 硬件兼容MM32系列微控制器在硬件设计上高度兼容STM32,这意味着开发者可以使用类似的开发工具和流程进行项目迁移。例如,在例程文件夹结构方面,MM32的外设例程与正点原子提供的STM32标准库例程非常相似[^1]。此外,MM32芯片的引布局和功能定义也与STM32保持一致,便于硬件设计的移植。 #### 2. 软件生态 MM32支持STM32的标准库开发方式,因此熟悉STM32标准库的开发者能够快速上手MM32开发环境[^1]。同时,Keil 5.0等主流开发工具同样适用于MM32开发[^2]。尽管MM32的官方例程数量可能不及STM32丰富,但其覆盖了常用外设的基本功能,满足大多数应用场景的需求。 #### 3. 性能参数 从性能角度来看,MM32STM32在核心架构、时钟频率等方面具有相似之处。例如,MM32F327x系列与STM32F103系列均基于ARM Cortex-M3内核,并提供多种工作频率选项。然而,具体型号的性能差异需要参考各自的数据手册进行详细比较[^1]。 #### 4. 成本与供应链 MM32作为国产MCU品牌,在成本控制方面具有一定优势,尤其是在当前全球芯片供应紧张的情况下,其供应链稳定性可能优于某些进口品牌。这为开发者提供了更多的选择空间。 #### 5. 开发学习曲线 由于MM32的高度兼容性,对于已经熟悉STM32开发的工程师而言,转向MM32几乎不需要额外的学习成本。点亮LED等基础操作的思路和步骤完全一致,仅需调整少量配置即可完成移植[^2]。 ```python # 示例代码:GPIO配置(假设基于STM32标准库) #include "stm32f10x.h" void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStruct); } int main(void) { GPIO_Config(); while (1) { GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); Delay(1000); // 假设存在延时函数 GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); Delay(1000); } } ``` 上述代码片段展示了如何通过STM32标准库配置GPIO引,该方法同样适用于MM32开发。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值