STM32单片机小Tips(6):玩转IAR,开发STM32
● 当 TPAL=1 时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现下降沿)。
设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。
在一个侵入事件被检测到并被清除后,侵入检测引脚TAMPER应该被禁止。然后,在再次写入备份数据寄存器前重新用TPE位启动侵入检测功能。这样,可以阻止软件在侵入检测引脚上仍然有侵入事件时对备份数据寄存器进行写操作。这相当于对侵入引脚TAMPER进行电平检测。
注:当V DD电源断开时,侵入检测功能仍然有效。为了避免不必要的复位数据备份寄存器,TAMPER引脚应该在片外连接到正确的电平。
显然,Tamper需要硬件与之配合。以上数据手册描述了硬件配置时的一些注意事项。
(1) 可以是把引脚由低电平到高电平认为是一次侵入,也可以把引脚从高电平变到低电平认为是一次侵入,这通过TPAL来设置。
(2) Tamper机制需要被启动才能起作用。但在启动之前,如果引脚已处于设定的状态,那么一旦启动,就会产生一次Tamper事件,这需要注意,否则会引起数据的意外丢失而不自觉。
(3) 即便芯片上的VDD电源断开,(只要仍有VBAT),那么Tamper检测仍是有效的,因此,设计硬件时必须要小心,如果某设计是将Tamper引脚通过上拉电阻接VDD,并在这个引脚上接入机械开关到地。如果开关导通,那么就是一次Tamper事件,这个没有问题。但是,如果电源断开(VDD变低),也会引发一次Tamper事件,而这往往并不是设计都的本意。因此,这个引脚的上拉电阻必须接到VBAT而不是接到VDD。
(4) 总的来说,TAMPER并不复杂,下面来看一看代码。
这次是用的STM32库中的这个例子。
有关LED的设置,这里就不再重复了,和上一篇文章(数据的保存与毁灭(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_TamperPinLevel_Low);
配置Tamper引脚究竟是高电平有效还是低电平有效,这个再研究一下,继续跟踪:
/**
* @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))
要看懂上面有关CR_TPAL_BB的相关定义及理解为何这样写,恐怕又要涉及到Contex的另一个重要内容,即bit-band,这个暂不深究,留待下次学习(说句闲话:bit-bank我早就看到,就是没有兴趣深入了解,因为没觉得什么地方有用到,今天既已知其用途,改日必去改看,,,所以只有动起来,才能学更多的东西)。这里只管当它是能够直接设定该平是0或都是1就行了。
即根据实参决定BKP_CR中的TPAL究竟是0还是1。可选参数为:
#define BKP_TamperPinLevel_High ((uint16_t)0x0000)
#define BKP_TamperPinLevel_Low ((uint16_t)0x0001)
BKP的其他用途:
BKP的寄存器可以用来存储RTC校验值的校验寄存器。
在PC13管脚(当该管脚不用于侵入检测时)上输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲
为方便测量,RTC时钟可以经64分频输出到侵入检测引脚TAMPER上。通过设置RTC校验寄存器(BKP_RTCCR)的CCO位来开启这一功能。 通过配置CAL[6:0]位,此时钟可以最多减慢121ppm。
下面以RTC的那个例子为例,来看一看如何用Tamper(PC13)引脚来送出信号。
/* 打开PWR和KB
MCU STM32 IAR STM 32位单片机 相关文章:
- 基于MCU的智能漏水检测系统设计(10-06)
- 分享来自凌特大牛关于LTC6804相关问题解决方案(06-20)
- 基于飞思卡尔MCU的血糖监测仪应用(09-16)
- 探索利用MCU增加LED照明系统的智能程度的方法(02-07)
- 强化射频与MCU性能 车用77GHz雷达性价比攀升(03-03)
- 飞思卡尔汽车电控系统MCU新方案:关注安全与联网(03-22)