GD32F10x的侵入检测事件
#include "TamperDetectionFunction.h"
#include "LED.h"
/*
当TAMPER引脚上的信号从0到1或从1到0
取决于备份控制寄存器BKP_TPCTL的TPAL位,
会产生一个侵入检测事件;
侵入检测事件会将所有数据备份寄存器内容清除。
*/
#define BKP_DATA_REG_NUM 42
void write_backup_register(uint16_t data);
uint32_t check_backup_register(uint16_t data);
uint32_t is_backup_register_clear(void);
void TamperDetectionFunction_Init(void);
//函数功能:TAMPER引脚(PC13)输入低电平时,会产生一个侵入检测事件,它会将所有数据备份寄存器内容清除。
void TamperDetectionFunction_Init(void)
{//MCU提供侵入检测功能以保护重要的用户数据,可通过设置BKP_TPCTL寄存器中的TPEN位来使能TAMPER引脚对应的功能。
nvic_irq_enable(TAMPER_IRQn,0,0);//设置TAMPER_IRQn的中断优先级,抢占优先级为0,子优先级为0
rcu_periph_clock_enable(RCU_PMU);//使能RCU_PMU时钟
rcu_periph_clock_enable(RCU_BKPI);//使能RCU_BKPI时钟
pmu_backup_write_enable(); //使能对备份域寄存器的写访问
bkp_tamper_active_level_set(TAMPER_PIN_ACTIVE_LOW); //配置TAMPER引脚(PC13)输入低电平有效
bkp_tamper_detection_disable();//不使能"TAMPER引脚(PC13)实现备份复位功能"
bkp_interrupt_disable(); //不使能"TAMPER-RTC引脚(PC13)侵入中断"
bkp_flag_clear(); //清除"TAMPER-RTC引脚(PC13)侵入事件标志"
bkp_interrupt_enable(); //TAMPER-RTC引脚(PC13)侵入中断使能
bkp_tamper_detection_enable(); //使能"TAMPER引脚(PC13)可实现备份复位功能"
/*
bkp_data_write(BKP_DATA_41,0xA0A0);//将0xA0A0写入备份数据寄存器41
if(bkp_data_read(BKP_DATA_41)==0xA0A0) LED2_On();
else LED3_On();
*/
write_backup_register(0x1226);
if(0x00 == check_backup_register(0x1226)) LED2_On();//写入备份数据寄存器正确
else LED3_On();//写入备份数据寄存器不正确
}
void write_backup_register(uint16_t data)
{
uint32_t temp = 0;
/* write data to backup data registers */
for (temp = 0; temp < BKP_DATA_REG_NUM; temp++)
{
if(temp < 10)
{
BKP_DATA0_9(temp) = data + (temp * 0x50);
//等价bkp_data_write(temp+1,(temp * 0x50));
}
else
{
BKP_DATA10_41(temp) = data + (temp * 0x50);
//等价bkp_data_write(temp+1,(temp * 0x50));
}
}
}
/*!
\brief check if the backup DATAx registers values are correct or not
\param[in] data: the data to be written to backup data registers
\arg 0x0000-0xFFFF
\param[out] none
\retval the number of data register
*/
uint32_t check_backup_register(uint16_t data)
{
uint32_t temp = 0;
/* check the data of backup data registers */
for(temp = 0; temp < BKP_DATA_REG_NUM; temp++)
{
if(temp < 10)
{
/* get data from data register 0-9 */
if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA0_9(temp)))
{//BKP_DATA_GET(BKP_DATA0_9(temp)和bkp_data_read( (temp+1))等价
return temp+1;
}
}
else
{
/* get data from data register 10-41 */
if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA10_41(temp)))
{//BKP_DATA_GET(BKP_DATA10_41(temp)和bkp_data_read( (temp+1))等价
return temp+1;
}
}
}
return 0;
}
/*!
\brief check if the backup data registers are clear or not
\param[in] none
\param[out] none
\retval the number of data register
*/
uint32_t is_backup_register_clear(void)
{
uint32_t temp = 0;
for(temp = 0; temp < BKP_DATA_REG_NUM; temp++){
if(temp < 10){
/* check if the data of data register 0-9 is 0x0000 */
if(0x0000 != BKP_DATA_GET(BKP_DATA0_9(temp)))
{//BKP_DATA_GET(BKP_DATA0_9(temp)和bkp_data_read( (temp+1))等价
return temp+1;
}
}else{
/* check if the data of data register 10-41 is 0x0000 */
if(0x0000 != BKP_DATA_GET(BKP_DATA10_41(temp)))
{//BKP_DATA_GET(BKP_DATA10_41(temp)和bkp_data_read( (temp+1))等价
return temp+1;
}
}
}
return 0;
}
//bkp_tamper_active_level_set(TAMPER_PIN_ACTIVE_LOW)配置TAMPER引脚(PC13)输入低电平有效
//TAMPER引脚(PC13)输入低电平时,会产生一个侵入检测事件,它会将所有数据备份寄存器内容清除。
void TAMPER_IRQHandler(void)
{
if(RESET != bkp_interrupt_flag_get())
{
/*
if(bkp_data_read(BKP_DATA_41)==0x0000) LED4_On();//"备份数据寄存器41"中的数据被清除了
else LED5_On();
*/
if(0 == is_backup_register_clear())
{//"备份数据寄存器"中的数据被清除了
LED4_On();
}
else
{//"备份数据寄存器"中的数据没有被清除
LED5_On();
}
bkp_interrupt_flag_clear();//清除"TAMPER-RTC引脚(PC13)侵入中断标志",clear the interrupt bit flag of tamper interrupt
bkp_flag_clear();//清除"TAMPER-RTC引脚(PC13)侵入事件标志",clear the bit flag of tamper event
bkp_interrupt_disable();//不使能"TAMPER-RTC引脚(PC13)侵入中断",disable the tamper pin
bkp_interrupt_enable();//TAMPER-RTC引脚(PC13)侵入中断使能,enable the tamper pin
bkp_tamper_active_level_set(TAMPER_PIN_ACTIVE_LOW);//配置TAMPER引脚(PC13)输出低电平有效,tamper pin active level set
}
}
#include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t,bool
#include "LED.h"
#include "TamperDetectionFunction.h"
int main(void)
{
//NVIC_PRIGROUP_PRE4_SUB0:抢占优先级为4bit(取值为0~15),子优先级为0bit(没有响应优先级)
//NVIC_PRIGROUP_PRE3_SUB1:抢占优先级为3bit(取值为0~7),子优先级为1bit(取值为0~1)
//NVIC_PRIGROUP_PRE2_SUB2:抢占优先级为2bit(取值为0~3),子优先级为2bit(取值为0~3)
//NVIC_PRIGROUP_PRE1_SUB3:抢占优先级为1bit(取值为0~1),子优先级为3bit(取值为0~7)
//NVIC_PRIGROUP_PRE0_SUB4:抢占优先级为0bit(没有抢占优先级),子优先级为3bit(取值为0~15)
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);//设置系统中断优先级"抢占优先级为4bit,子优先级为0bit"
INTX_ENABLE();//开启所有中断
LED2_Init();//初始化LED2端口
LED3_Init();//初始化LED3端口
LED4_Init();//初始化LED4端口
LED5_Init();//初始化LED5端口
TamperDetectionFunction_Init();
while(1)
{
}
}
GD32F10x的侵入检测事件相关推荐
- stm32之备份寄存器(BKP)应用(侵入检测中断)
前言:很多的嵌入式设备使用过程中,当系统掉电时,往往需要把一些用户设置的参数保存起来,或者是将掉电前的一些状态信息保存,或者是统计系统重启次数.保存这些动态信息其实有很多种方法,第一种:在系统掉电前保 ...
- unity3d 屏幕触摸检测事件
屏幕上的触摸检测一般会检测点击,滑动,长按等 TouchPhase Enumeration Describes phase of a finger touch. Values Began A fing ...
- STM32-RTC实时时钟
1 RTC实时时钟特征与原理 1.1 RTC简介 RTC是一个独立的定时器.RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能.修改计数器的值可以重新设置系统当前的时间和日期. ...
- 嵌入式系统(五):GPIO(输入输出端口扩展器)接口
文章目录 1. GPIO结构及特点: (1)GPIO功能模式 (i)GPIO复用功能(AFIO,Alternate function) (ii)GPIO数字输入模式 (iii)模拟输入模式 (iii) ...
- stm32 BKP寄存器操作[操作寄存器+库函数]
BKP是"BACKUP"的缩写,stm32f103RCTE的内部配备了10个16位宽度的BKP寄存器.在主电源切断或系统产生复位时间时,BKP寄存器仍然可以在备用电源的支持下保持其 ...
- 【STM32】HAL库-备份寄存器(BKP)
简介 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据. 他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电. 当系统在待机模式下被唤醒,或系统复位或电源复位时, ...
- stm32 BKP 擦除后备寄存器存储的数据
这里只为了将写入后备寄存器的数据毁灭,相当于擦除操作. 具体详细功能请查看stm32F103数据手册(中文手册:第五章 第47页开始) 侵入脚PC13 //TAMPER引脚中断配置 void TAMP ...
- stm32F103R6之BKP(备份寄存器)
目录 概述 侵入检测 RTC校准 概述 Stm32F103有42个16位的备份寄存器.他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电.当系统在待机模式下被唤醒,或系统复位或电源复位时 ...
- STM32F103--BKP
备注: 这是自己基于STM32的BKP备份寄存器的学习. BKP功能: 1 系统从待机模式或系统或电源复位时BKP备份寄存器不会被复位,保护程序运行数据. 2 BKP还可以管理嵌 ...
最新文章
- 搞机器学习,Python和R哪个更合适?
- VS2005 宽字符 unicode字符集和多字节字符集
- python打包不能在其他电脑打开、找不到指定模块,pyinstaller打包移植到别的电脑报错OSError: [WinError 126] 找不到指定的模块。...
- RealWave Surfaces 泡沫
- linux git ssh 配置文件,git bash配置ssh 登录 Linux的方法
- 1203.2——条件语句 之 switch语句
- 程序员必读的10本经典书(含资源)建议收藏
- .NET程序员我是如何通过一个产品在2年内买车买房
- [离散数学]命题逻辑P_2:命题联结词
- u盘启动计算机的几种方式,U盘各种启动模式方法介绍 六种U盘启动模式
- inside-outside algorithm详解
- 信号系统服务器,四大导航系统信号介绍
- 解决Cipher Suites导致的“未能创建 SSL/TLS 安全通道”异常问题
- 莱鸟学spss数据分析之第六章---描述性分析
- 64卦加密解密(娱乐用)
- 【Linux】ssh支持的加密算法有哪些?
- uc 浏览器不能打开网页
- 将实时三维计算机技术,基于结构光实时三维重建计算机应用技术专业论文.docx...
- 萨克斯《全球视角的宏观经济学》课后答案
- 硬盘健康状态、温度、通电次数、写入量和序列号检查软件