-
数据的保存和毁灭(
2
)
和以前学到的有关数据保存不同,这里的数
据保存还有“保密”之意,即一旦受到
意外的侵入,
STM32
将毁灭数据。这是通过
Tamper
机
制来实现的。
以下是数据手册中的有关说明:
5.3.1
侵入检测
当
TAMPER
引脚上的信号从
0
变成
1
或者从
1
变成
0(
取决于备份控
制寄存器
BKP_CR
的
TPAL
p>
位
)
,
会产生一个
侵入检测事件。
侵入检测事件将所有数据备份寄存器内容清除。
然而为了
避免丢失侵入事件,
侵入检测
信号是边沿检测的信号与侵入检测允许位的逻辑与,
从而在侵
入
检测引脚被允许前发生的侵入事件也可以被检测到。
●
当
TPAL=0
时:如果在启动侵入检测
TAMPER
引脚前
(
通过设置
TP
E
位
)
该引脚已经为高
电平,
一旦启动侵入检测功能,
则会产生一个额外的侵
入事件
(
尽管在
TPE
位置’1’后并没
有出现上升沿
)
。
●
当
TPAL=1
时:如果在启动侵
入检测引脚
TAMPER
前
(
通过设置
TPE
位
)<
/p>
该引脚已经为低
电平,
一旦启动侵入检测
功能,
则会产生一个额外的侵入事件
(
尽管在
TPE
位置’1’后并没
有出现
下降沿
)
。
设置
BKP_CSR
寄存器的
TPIE
位为’1’,当检测到侵入事件时就会产生一个中断。
在一个侵入事件被检测到并被清除后,侵入
检测引脚
TAMPER
应该被禁止。然后,在再次写
入备份数据寄存器前重新用
TPE
位启动侵入检测
功能。
这样,
可以阻止软件在侵入检测引脚
上仍然有侵入事件时对备份数据寄存器进行写操作。这相当于对侵入引脚
TAMPE
R
进行电平
检测。
注:当
V
DD
电源断开时,侵入检测功能仍然有效。为了避免不必要的复位数据备份
寄存器,
TAMPER
引脚应该在片外连接到正确的电平。
显然,
Tamper
需要硬件与之配合。
以上数据手
册描述了硬件配置时的一些注意事项。
(
1
)
可以是把引脚由低电平到高电平认为是一次侵入,
也可以把引脚
从高电平变到
低电平认为是一次侵入,这通过
TPAL
来设置。
(
2
)
Tamper
机制需要被启动才能起作用。但在启动之前,如果引脚已处于设定的
状态,那么一旦启动,就会产生一次
Tamper
事件,这需要注意,否则会引起数据的意外丢
失而不自觉。
(
3
)
即便芯片上的
VDD
电源断开,(只要
仍有
VBAT
),那么
Tamper<
/p>
检测仍是有效
的,因此,设计硬件时必须要小心,如果某设计是将
Tamper
引脚通过上拉电阻接
VD
D
,并
在这个引脚上接入机械开关到地。如果开关导通,那么就
是一次
Tamper
事件,这个没有问
题。但是,如果电源断开(
VDD
变低),也会引发一次
Tamper
事件,而这往往并不是设计
都的
本意。因此,这个引脚的上拉电阻必须接到
VBAT
而不是接到
VDD
。
(
4
)
总的来说,
TAMPER
并不复杂,下
面来看一看代码。
这次是用的
p>
STM32
库中的这个例子。
有关<
/p>
LED
的设置,
这里就不再重复了,
p>
和上一篇文章
(数据的保存与毁灭
(
1
)
相同)
。
/* Enable write access to
Backup domain */
PWR_BackupAccessCmd(ENABLE);
这是打开
BKP
功能。
/* Clear Tamper pin Event(TE) pending
flag */
BKP_ClearFlag();
清除
Tamper
事件
/*
Tamper pin active on low level */
BKP_TamperPinLevelConfig(BKP_TamperPi
nLevel_Low);
配置
Ta
mper
引脚究竟是高电平有效还是低电平有效,这个再研究一下,继续跟踪:
/**
*
@brief Configures the Tamper Pin active
level.
* @param
BKP_TamperPinLevel: specifies the Tamper Pin
active level.
* This
parameter can be one of the following
values:
* @arg
BKP_TamperPinLevel_High: Tamper pin active on high
level
* @arg
BKP_TamperPinLevel_Low: Tamper pin active on low
level
* @retval
None
*/
void BKP_TamperPinLevelConfig(uint16_t
BKP_TamperPinLevel)
{
/* Check the
parameters */
assert_param
(IS_BKP_TAMPER_PIN_LEVEL(BKP_TamperPinLevel));
*(__IO uint32_t *) CR_TPAL_BB
= BKP_TamperPinLevel;
}
CR_TPAL_BB
又是什么呢?
/* Alias word address of TPAL bit
*/
#define CR_OFFSET
(BKP_OFFSET + 0x30)
#define
TPAL_BitNumber 0x01
#define CR_TPAL_BB
(PERIPH_BB_BASE + (CR_OFFSET * 32) +
(TPAL_BitNumber *
4))
-
-
-
-
-
-
-
-
-
上一篇:常用的化疗药物缩写对照表
下一篇:语言学复习试题及参考答案