齐河做网站/seo简介
GD32F103VE的TAMPER引脚(PC13),当PC13输入低电平时,会产生一个侵入检测事件。它会将所有“数据备份寄存器”内容清除。
这个功能有什么用?
一是防止被人开壳,抄袭。二是自毁功能。
直奔主题,多一句就是浪费时间。测试程序如下:
#include "TamperDetectionFunction.h"
#include "stdio.h" //使能printf(),sprintf()
//#include "LED.h"/*
当TAMPER引脚上的信号从0到1或从1到0
取决于备份控制寄存器BKP_TPCTL的TPAL位,
会产生一个侵入检测事件;
侵入检测事件会将所有数据备份寄存器内容清除。
*/#define BKP_DATA_REG_NUM 42 //备份寄存器有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)输入低电平时,会产生一个侵入检测事件,它会将所有数据备份寄存器内容清除。
//为防止侵入事件丢失,PC13引脚检测到边沿检测信号与TPEN位的逻辑与作为侵入检测信号
void TamperDetectionFunction_Init(void)
{//MCU提供侵入检测功能以保护重要的用户数据,可通过设置BKP_TPCTL寄存器中的TPEN位来使能TAMPER引脚对应的功能。nvic_irq_enable(TAMPER_IRQn,0,0);//设置TAMPER_IRQn的中断优先级,抢占优先级为0,子优先级为0rcu_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引脚(PC13)侵入中断"bkp_tamper_detection_enable(); //使能"TAMPER引脚(PC13)可实现备份复位功能"/*bkp_data_write(BKP_DATA_41,0xA0A0);//将0xA0A0写入备份数据寄存器41if(bkp_data_read(BKP_DATA_41)==0xA0A0) LED2_On();else LED3_On();
*/write_backup_register(0x1226);//将0x1226写入地址为BKP_DATA_0的备份寄存器if(0x00 == check_backup_register(0x1226))//写入备份数据寄存器正确{
// MCU_Led_On();//写入备份数据寄存器正确printf("\r\nwrite_backup_register OK!!!");}else//写入备份数据寄存器不正确{
// MCU_Led_Off();//写入备份数据寄存器不正确printf("\r\nwrite_backup_register Error!!!");}
}//函数功能:将data,data+0x50,data+0x50*2,......data+0x50*41,写入备份寄存器
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++){bkp_data_write( (bkp_data_register_enum)(temp+1),(data + (temp * 0x50)) );//BKP_DATA_0的初始值为1,所以这里要用(temp+1)
// if(temp < 10)
// {
// BKP_DATA0_9(temp) = data + (temp * 0x50);
// }
// else
// {
// BKP_DATA10_41(temp) = data + (temp * 0x50);
// }}
}//函数功能:从备份寄存器读取数据,并比较;若发现错误,则返回
uint32_t check_backup_register(uint16_t data)
{uint32_t temp = 0;for(temp = 0; temp < BKP_DATA_REG_NUM; temp++){if(bkp_data_read( (bkp_data_register_enum)(temp+1) ) != (data + (temp * 0x50)) ){//BKP_DATA_0的初始值为1,所以这里要用(temp+1)return temp+1;//发现错误}// if(temp < 10)
// {
// //get data from data register 0-9
// if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA0_9(temp)))
// {
// return temp+1;
// }
// }
// else
// {
// //get data from data register 10-41
// if(data + (temp * 0x50) != BKP_DATA_GET(BKP_DATA10_41(temp)))
// {
// return temp+1;
// }
// }}return 0;
}//函数功能:检查"备份寄存器"的数据是否为0x0000,并比较;若发现不是0x0000,则返回
uint32_t is_backup_register_clear(void)
{uint32_t temp = 0;for(temp = 0; temp < BKP_DATA_REG_NUM; temp++){if(bkp_data_read((bkp_data_register_enum)(temp+1))!=0x0000){//BKP_DATA_0的初始值为1,所以这里要用(temp+1)return temp+1;//发现错误}
// 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;
}//函数功能:"TAMPER引脚(PC13)侵入中断服务函数
//bkp_tamper_active_level_set(TAMPER_PIN_ACTIVE_LOW)配置TAMPER引脚(PC13)输入低电平有效
//TAMPER引脚(PC13)输入低电平时,会产生一个侵入检测事件,它会将所有数据备份寄存器内容清除。
void TAMPER_IRQHandler(void)
{if(RESET != bkp_interrupt_flag_get())//读取"TAMPER-RTC引脚(PC13)侵入中断标志"{if(0 == is_backup_register_clear())//发现"侵入事件"清除了"备份数据寄存器"{//"备份数据寄存器"中的数据被清除了
// MCU_Led_On();printf("\r\nClear backup_register!!!");}else//发现"侵入事件"没有清除"备份数据寄存器"{//"备份数据寄存器"中的数据没有被清除
// MCU_Led_On();printf("\r\nDon't Clear backup_register!!!");}bkp_interrupt_flag_clear();//清除"TAMPER-RTC引脚(PC13)侵入中断标志",clear the interrupt bit flag of tamper interruptbkp_flag_clear();//清除"TAMPER-RTC引脚(PC13)侵入事件标志",clear the bit flag of tamper event bkp_interrupt_disable();//不使能"TAMPER-RTC引脚(PC13)侵入中断",disable the tamper pinbkp_interrupt_enable();//TAMPER-RTC引脚(PC13)侵入中断使能,enable the tamper pinbkp_tamper_active_level_set(TAMPER_PIN_ACTIVE_LOW);//配置TAMPER引脚(PC13)输出低电平有效,tamper pin active level set}
}
#include "UART3.h"
#include "stdio.h" //使能printf(),sprintf()void UART3_Init(unsigned int bound);//函数功能:初始化串口3,这个和STM32F103VET6的UART4兼容
void UART3_Init(unsigned int bound)
{rcu_periph_clock_enable(RCU_GPIOC); //使能GPIOC时钟,enable GPIO clock rcu_periph_clock_enable(RCU_UART3); //使能UART3时钟,enable USART clockgpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);//将GPIOC10设置为AFIO口(复用IO口),输出上拉gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);//将GPIOC11设置为浮空输入口usart_deinit(UART3); //复位UART3,USART configureusart_baudrate_set(UART3, bound); //设置UART3的波特率usart_word_length_set(UART3, USART_WL_8BIT); //设置UART3数据传输格式为8位usart_stop_bit_set(UART3, USART_STB_1BIT); //设置UART3停止位为1位usart_parity_config(UART3, USART_PM_NONE); //设置UART3无需奇偶校验usart_hardware_flow_rts_config(UART3, USART_RTS_DISABLE); //设置不使能UART3的RTS引脚功能usart_hardware_flow_cts_config(UART3, USART_CTS_DISABLE); //设置不使能UART3的CTS引脚功能usart_receive_config(UART3, USART_RECEIVE_ENABLE); //使能UART3接收usart_transmit_config(UART3, USART_TRANSMIT_ENABLE); //使能UART3发送usart_enable(UART3); //使能UART3
}/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{usart_data_transmit(UART3, (uint8_t) ch);while( RESET == usart_flag_get(UART3, USART_FLAG_TBE) ){//等待串口0发送结束}return ch;
}
main.c程序如下:
#include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t,bool
#include "UART3.h"
#include "stdio.h" //使能printf(),sprintf()#include "LED.h"
#include "TamperDetectionFunction.h"const char CPU_Reset_REG[]="\r\nCPU reset!\r\n";
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"UART3_Init(115200);//初始化UART3printf("%s",CPU_Reset_REG);//调试串口输出"\r\nCPU reset!\r\n"INTX_ENABLE();//开启所有中断LED_Init();//初始化MCU_LedTamperDetectionFunction_Init();
//TAMPER引脚(PC13)输入低电平时,会产生一个侵入检测事件,它会将所有数据备份寄存器内容清除。
//当将PC13输入低电平时,串口输出"Clear backup_register!!!"while(1){}
}
相关文章:

GD32F103VE侵入事件
GD32F103VE的TAMPER引脚(PC13),当PC13输入低电平时,会产生一个侵入检测事件。它会将所有“数据备份寄存器”内容清除。 这个功能有什么用? 一是防止被人开壳,抄袭。二是自毁功能。 直奔主题,多一句就是浪费时间。测试…...

将tp5项目、fastadmin项目部署到服务器宝塔面板
目录 一、将你的fastadmin或者tp5项目文件夹上传至你的服务器域名根目录下 二、修改你的网站目录指向,指向public目录,点击保存,并取消勾选防跨站攻击。 三、配置伪静态 四、fastadmin框架上传至服务器后如果想要访问后台可以进行重定向&am…...

Jenkins+Docker+SpringCloud微服务持续集成
JenkinsDockerSpringCloud微服务持续集成 JenkinsDockerSpringCloud持续集成流程说明SpringCloud微服务源码概述本地运行微服务本地部署微服务 Docker安装和Dockerfile制作微服务镜像Harbor镜像仓库安装及使用在Harbor创建用户和项目上传镜像到Harbor从Harbor下载镜像 微服务持…...

系统架构设计师-系统可靠性分析与设计
目录 一、可靠性相关基本概念 二、可靠性指标 1、串联系统与并联系统可靠性指标计算 2、混合系统 三、可靠性设计 1、影响软件可靠性的主要因素: 2、增加可靠性的解决方案 2.1 避错技术 2.2 降低复杂度设计 2.3 检错技术 2.4 容错技术 3、双机容错 一、可靠性相关…...

Linux(CentOS7)搭建达梦数据库
参考官方文档 本文记录一下达梦数据库的安装步骤,在安装的过程中出现了一些问题,进行了处理。 文章目录 安装前准备数据库安装命令行安装图形化安装 配置实例注册服务启动、停止数据库达梦数据库卸载 安装前准备 用户在安装 DM 数据库之前需要检查或修…...

[杂谈]-国产MCU竞争力浅析
[杂谈]-国产MCU竞争力浅析 文章目录 [杂谈]-国产MCU竞争力浅析1、研发方面2、技术方面3、市场方面4、应用方面5、生态方面6、总结 微控制器(MCU)是一种集成了微处理器、存储器、输入/输出接口和其他外设的单片电路,广泛应用于各种电子产品和系…...

4.1、Flink任务怎样读取集合中的数据
1、API说明 非并行数据源: def fromElements[T: TypeInformation](data: T*): DataStream[T] def fromCollection[T: TypeInformation](data: Seq[T]): DataStream[T] def fromCollection[T: TypeInformation] (data: Iterator[T]): Data…...

JD商品详情页面+关键词搜索商品列表API接口数据,详情页面数据返回值说明
作为一个工作助手,我无法直接为您提供实时的京东商品详情。您可以通过访问京东官方网站或使用API接口来查看商品的详细信息。每个商品的详情页面通常会包括以下内容: 1. 商品标题:商品的名称和简要描述。 2. 价格信息:包括原价、…...

Electron v26.0.0-beta.11 发布,跨平台桌面应用开发工具
Electron是一款跨平台桌面应用开发工具,它基于Web技术,使用HTML、CSS和JavaScript来构建应用程序。它能够让开发者使用熟悉的Web开发技术来创建强大的桌面应用,并且可以运行在Windows、macOS和Linux等多个操作系统上。 一、Electron的特点 跨平台:Electron可以将Web技术转…...

提高办案效率:公检系统引入自动校对技术
引入自动校对技术到公检系统中可以有效提高办案效率。自动校对技术结合公检系统的特点,可以在以下方面提高办案效率: 1.节省时间:自动校对技术可以快速检测和修正法律文书中的语法、拼写和标点符号等错误。与手动校对相比,自动校对…...

iptables 清空
清空 iptables中所有策略。 -Z: 重置计数器 -F:删除所有规则(flush) -X:删除所有自定义的链 规则清理和重建如下: iptables -Z iptables -t nat -F iptables -t nat -X iptables -t nat -P PREROUTING A…...

网络安全(黑客)零基础入门
导语 什么是 Web 安全?我又该如何入门学习它呢?学习过程中又应注意哪些问题呢?... 或许你的心中有着这样的疑问、不过别着急,本文会为你一一解答这些问题。 正文 定义 Web 安全,顾名思义便是由保障 Web 应用能够持续…...
Al Go: 蒙特卡洛树搜索(MCTS)简介
目录 1. 前言 1.1 Minimax 1.2 剪枝 1.3 蒙特卡洛树搜索 1.4 为什么随机走子会可行呢? 2. vanilla Monte Carlo tree search 3. UCT-based trade-off between exploitation and exploration 4. MCTS基本算法流程 5. Efficiency Through Expert Policies 6…...

Client-go操作Deployment
在工作中需要对kubernetes进行自定义资源的开发,操作K8s的资源肯定是必不可少的。K8s原生语言是用Go编写的,所以在CRD中使用client-go来操作资源。本次介绍一下使用client-go来操作Deployment。 1. 创建main函数 func main() {homePath : homedir.Home…...

设计模式——单例模式(懒汉和饿汉)
单例模式 一、概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。一个类只能有一个实例在生活中是很常见的,比如打印机程…...

详解——Vue3递归函数功能
在 Vue 3 中,递归函数是一种在组件中调用自身的技术。递归函数在解决树状数据结构、无限级分类、嵌套组件等情况下非常有用。以下是一个示例,展示如何在 Vue 3 中实现递归函数的功能、代码和原理: 1. 创建递归组件: 首先&#x…...

【VSCode】查看二进制文件
1.安装插件Hex Editor 2.打开二进制文件 3.执行Hex Editor命令...

C#设计模式之观察者模式
题目:假设你正在开发一个简单的新闻发布系统,该系统允许用户订阅不同的新闻频道,并在有新闻发布时向订阅者发送通知。使用观察者模式设计和实现该系统。观察者模式的相关概念和定义: 观察者模式是一种行为设计模式,它定…...

小红书攻略:爆款引流,如何在激烈竞争中脱颖而出?
小红书(RED)作为国内最具影响力的社交电商平台之一,是很多品牌运营者的首选之一。然而,在小红书的激烈竞争中,如何快速引流、吸引关注,成为了品牌运营者面临的挑战。本篇文章一秒推小编将为您介绍小红书运营…...

Ubuntu中的安装卸载及删除方法
说明:由于图形化界面方法(如Add/Remove... 和Synaptic Package Manageer)比较简单,所以这里主要总结在终端通过命令行方式进行的软件包安装、卸载和删除的方法。 一、Ubuntu中软件安装方法 1、APT方式 (1࿰…...

获取历史dokcer镜像项目,并上传gitlab,再打包镜像管理
今天遇到一个问题: 发现一个部署在Jenkins的脚本用的docker镜像是:test_project:v20191108,即这个项目是19年的一个版本,由于代码不断更新,用现在的最新代码运行该脚本,可能不能运行了,必须用19…...

【Go语言】Golang保姆级入门教程 Go初学者chapter3
Go语言 第三章 运算符 下划线“_”本身在Go中一个特殊的标识符,成为空标识符。可以代表任何其他的标识符,但是他对应的值就会被忽略 仅仅被作为站维度使用, 不能作为标识符使用 因为Go语言中没有private public 所以标记变量首字母大写代表其…...

网络防御(4)
一、结合以下问题对当天内容进行总结 1. 什么是IDS? 2. IDS和防火墙有什么不同? 3. IDS工作原理? 4. IDS的主要检测方法有哪些详细说明? 5. IDS的部署方式有哪些? 6. IDS的签名是什么意思?签名过滤器有什么…...

conda错误处理:ResolvePackageNotFound
当运行conda env create -f environment.yaml时出现"ResolvePackageNotFound"错误,这可能是由于环境配置文件中指定的依赖项无法找到或不可用。 错误消息中列出的依赖项包括pip20.3、python3.8.5和cudatoolkit11.3。 尝试以下解决方案: 更新…...

linux初学者小命令
linux初学者小命令 一.在正式学习linux命令之前需要先认识一下linux环境中命令是如何被执行的shell是一个属于linux内核的软件,在系统启动后加载进RAM(内存)内,每个用户通过终端登录系统后,就会运行。负责不间断的接收用户的输入,…...

宝尊电商短期前景堪忧,宝尊国际能否取得成功还有待验证
来源:猛兽财经 作者:猛兽财经 核心业务面临短期逆风 在2023年第一季度财报中,宝尊电商(BZUN)表示其电商业务(简称BEC)主要包括:品牌的门店运营、客户服务以及物流和供应链管理、IT和数字营销等增值服务”。…...

百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5
4月官宣创业,6月15日发布第一款7B开源模型,7月11日发布第二款13B、130亿参数开源模型。 平均保持2个月一个版本发布速度,8月8日,百川智能发布了创业以来的首个530亿参数闭源大模型——Baichuan-53B(以下简称“53B”&a…...

Redis的常用数据结构
StringListhashsetzset 1.字符串类型是Redis最基础的数据结构 使用场景: 缓存功能 Redis 作为缓存层,MySQL作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作…...

深入JVM - JIT分层编译技术与日志详解
深入JVM - JIT分层编译技术与日志详解 文章目录 深入JVM - JIT分层编译技术与日志详解1. 背景简介2. JIT 编译器2.1. 客户端版本的编译器: C12.2. 服务端版本的编译器: C22.3. Graal JIT 编译器 3. 分层编译技术(Tiered Compilation)3.1. 汇聚两种编译器的优点3.2. 精准优化(Ac…...

临时文档2
java 中 IO 流分为几种? 按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的角色划分为节点流和处理流。 Java Io流共涉及40多个类,这些类看上去很杂乱,但实际…...