再补点东西:
掉电中断里能存多少数据,能成多长时间一直是我比较关心的问题,在这里我测试了一下,也提供了一个简单的测试方法,可以粗略的获知。
1、测试RTC后备存储器存数据的速度
[mw_shl_code=c,true]void PVD_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line16);//清中断
vTaskEndScheduler();//关闭调度器
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);//使能PWR和BKP外设时钟
PWR_BackupAccessCmd(ENABLE);//使能后备寄存器访问
while(1)
{
power_time++;
RTC_WriteBackupRegister(RTC_BKP_DR14, power_time);
}
}[/mw_shl_code]
重上电之后,power_time = 171534,也就是说在2.8V掉到2V的时间内能读写171534次那么多,当然这个跟你设计的电路有绝对的关系,这个就根据具体自己的情况去测试吧。(事实证明RTC后备存储器的读写速度是很快的)
2、测试掉电的时间
[mw_shl_code=c,true]void PVD_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line16);//清中断
vTaskEndScheduler();//关闭调度器
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);//使能PWR和BKP外设时钟
PWR_BackupAccessCmd(ENABLE);//使能后备寄存器访问
while(1)
{
power_time++;
RTC_WriteBackupRegister(RTC_BKP_DR14, power_time);
Dellayus(2);//1.2us
}
}[/mw_shl_code]
重上电之后,power_time = 40496,也就是说在2.8V掉到2V的需要大约33~40ms左右(当然这是我的电路的掉电时间),这个需要具体自行测试。
注意:这里测试的是STM32F207的RTC,用这个存储一些应急数据还是足够的,不建议用FLASH存数据,因为FLASH读写操作需要高压,不确定2~2.8V操作是否稳定,但是STM32手册上说单片机的工作电压到2V还是可以工作的。
[mw_shl_code=c,true]/*******************************************************************************
* 函数名 : Dellayu
* 描述 : 延时函数(局部使用),调用一次延时的时间:
* 72M下是1us,120M下是0.6us
* 参数 : usec
* 返回值 : 无
*******************************************************************************/
__asm int Dellayu(u32 usec)
{
ALIGN
PUSH.W {r1} //2时钟周期
MOV r1,#18 //1时钟周期
MUL r0,r1 //1时钟周期
SUB r0,#3 //1时钟周期
loop
SUBS r0,#1 //1时钟周期
BNE loop //如果跳转则为3个周期,不跳则只有1个周期
POP {r1} //2时钟周期
BX lr //3个时钟周期
//总共所用周期为(usec*4)-4,此处减4主要用于抵消调用此函数的消耗时钟周期(传参1时钟,BLX跳转3时钟)
}[/mw_shl_code]
|