金牌会员
 
- 积分
- 1073
- 金钱
- 1073
- 注册时间
- 2017-6-10
- 在线时间
- 279 小时
|
发表于 2018-1-5 10:53:48
|
显示全部楼层
本帖最后由 rjx007 于 2018-1-5 11:27 编辑
这是我之前发的一个帖子的摘录:
不用ADC检测,只要用库里提供的现成的几个函数就能行。前提是电源的滤波电容要大些,以提供足够的时间来保存数据。我试过,保存十几个数据是不成问题的。
我也试过用ADC来检测电源电压,检测点必须取在电源的主滤波电容后,7805或LM1117_3.3之前,电容要大些,并且要电阻分压。没有这个方法简洁,两者效果一样。上电时只要读出eeprom就行了。
以下是之前发过的一个帖子的摘录:
终于搞定了!根本不用这么复杂,用简单的查询方式就可以了,几条语句就行了,与大家分享:思路非常务实:
1、开PWR时钟-----必须的。
2、使能PVD
3、设置监控电压的阈值,这里设为2.9V.
4、再判断到阈值后,标志位是否置位,如置位,就保存数值到EEPROM.
至于为什么用中断方式失败,原因不清。
int main()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE); //打开PWR时钟
PWR_PVDCmd(ENABLE); //使能PVD
PWR_PVDLevelConfig(PWR_PVDLevel_2V9); //设置PVD的探测电压阀值为2.9V。可设置范围:2.2-2.9
while(1)
{
if(PWR_GetFlagStatus(PWR_FLAG_PVDO)==SET) //判断WR_FLAG_PVDO的标志位是否置位,即电压是否跌落到2.9V了。
{
AT24CXX_WriteOneByte(0x02,VOLUME_1); //write_eep(0x02,VOLUME_1); //如若置位了,就保存数据。
delay_ms(4);
}
}
}
|
|