OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5539|回复: 22

STM32F103系列单片机掉电存储功能

[复制链接]

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
发表于 2018-6-13 09:06:58 | 显示全部楼层 |阅读模式
1金钱
最近在搞了一个小功能,就是开机次数和开机总时间存储,我在原子哥的mini板上想实现这个功能,开机次数和开机总时间都存储在24c02芯片里面,开机次数这个好弄,这个弄好了,关键是开机运行总时间的存储,我如果每一分钟存储一次或者每一秒钟存储一次24c02的话不太好,太频繁了,想用掉电的时候把开机总时间存储到24c02里面的,这个改怎么弄呀?各位大神都过来分析分析

最佳答案

查看完整内容[请看2#楼]

flash掉电存储,上电的时候读出来并擦除那个扇区,掉电中断里面写进去,你试试;开机时间滴答定时器中断内计时,同样掉电存储
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 09:06:59 | 显示全部楼层
flash掉电存储,上电的时候读出来并擦除那个扇区,掉电中断里面写进去,你试试;开机时间滴答定时器中断内计时,同样掉电存储
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 12:42:32 | 显示全部楼层
找了好多资料都是库函数的pvd中断,有没有寄存器的pvd中断配置
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 13:36:01 | 显示全部楼层
47933673 发表于 2018-6-13 12:42
找了好多资料都是库函数的pvd中断,有没有寄存器的pvd中断配置

http://www.openedv.com/forum.php ... 72644&highlight=PVD
1楼 8楼
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 13:54:19 | 显示全部楼层
275891381 发表于 2018-6-13 13:36
http://www.openedv.com/forum.php ... 72644&highlight=PVD
1楼 8楼

程序弄好了,我怎么测试掉电的时候能不能进入掉电中断,我关掉开关之后,我也不知道怎么测试有没有进入过中断,请教一下 谢谢
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 13:59:56 | 显示全部楼层
47933673 发表于 2018-6-13 13:54
程序弄好了,我怎么测试掉电的时候能不能进入掉电中断,我关掉开关之后,我也不知道怎么测试有没有进入过 ...

void PVD_IRQHandler(void)  
{
        if (EXTI_GetITStatus(EXTI_Line16) != RESET)
        {
                 //用户添加紧急处理代码处 ,测试的时候 3.3 GND 插个大电容存电
                 while(1)
                {
                        printf("掉电\r\n");//测试断电能执行多少个printf
                }       
  
                PWR_ClearFlag(PWR_FLAG_PVDO);
                EXTI_ClearITPendingBit(EXTI_Line16);
        }
}
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 14:29:42 | 显示全部楼层
275891381 发表于 2018-6-13 13:59
void PVD_IRQHandler(void)  
{
        if (EXTI_GetITStatus(EXTI_Line16) != RESET)

弱弱的问一下,机器都掉电了printf("掉电\r\n")    这句话输出怎么能看到呢,谢谢
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 14:31:19 | 显示全部楼层
47933673 发表于 2018-6-13 14:29
弱弱的问一下,机器都掉电了printf("掉电\r\n")    这句话输出怎么能看到呢,谢谢

可以的,ttl转usb 只接 gnd txd rxd 就可以了,掉电了看电容大小也能打印出来很多次
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 14:49:18 | 显示全部楼层
275891381 发表于 2018-6-13 14:31
可以的,ttl转usb 只接 gnd txd rxd 就可以了,掉电了看电容大小也能打印出来很多次

你说是这样连接电脑,在电脑上看吗?
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 14:59:51 | 显示全部楼层
47933673 发表于 2018-6-13 14:49
你说是这样连接电脑,在电脑上看吗?

对呀,要不在哪看
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 15:03:52 | 显示全部楼层
275891381 发表于 2018-6-13 14:59
对呀,要不在哪看

OK,我现在试试
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 15:06:23 | 显示全部楼层
本帖最后由 275891381 于 2018-6-13 15:08 编辑

之前试过470uf能打印出来20个左右,这样正常代码里面测试打印20个出来耗时多少就知道能执行多少代码了
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 15:19:25 | 显示全部楼层
275891381 发表于 2018-6-13 15:06
之前试过470uf能打印出来20个左右,这样正常代码里面测试打印20个出来耗时多少就知道能执行多少代码了

我现在正在连线,主板串口232电平直接连到电脑上,连好先就测试,一会给你测试结果 谢谢
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 16:09:07 | 显示全部楼层
275891381 发表于 2018-6-13 15:06
之前试过470uf能打印出来20个左右,这样正常代码里面测试打印20个出来耗时多少就知道能执行多少代码了

掉电可以出来数据但是写24c02的话,掉电写不了,我只需要写两个字节就可以了,但是两个字节也写不了
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 16:28:35 | 显示全部楼层
47933673 发表于 2018-6-13 15:19
我现在正在连线,主板串口232电平直接连到电脑上,连好先就测试,一会给你测试结果 谢谢

232连接电脑,那你这估计打印不多,板子上的232需要供电呀,要是也用电容的电,打印一个就不错了
我当时是用ch340模块,ttl转usb的,340是电脑供电的,电容只给开发板上的3.3供电
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 16:48:08 | 显示全部楼层
275891381 发表于 2018-6-13 16:28
232连接电脑,那你这估计打印不多,板子上的232需要供电呀,要是也用电容的电,打印一个就不错了
我当时 ...

在3.3v的电压处加了一个470UF的电容在掉电的时候往24c02里面写2个字节的数据成功了,我想请问一下如果掉电的时候不往24c02里面写数据,往stm32 flash里面写2个字节数据是不是速度更快
回复

使用道具 举报

1

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2018-5-12
在线时间
56 小时
发表于 2018-6-13 18:08:33 | 显示全部楼层
FLASH掉电写入估计不好实现,写入区域如果有数据,需要先擦除后才能写入。
如果只需要写两个字节,可以写到FLASH的OP用户字节里面。这个写的快些。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 18:25:04 | 显示全部楼层
47933673 发表于 2018-6-13 16:48
在3.3v的电压处加了一个470UF的电容在掉电的时候往24c02里面写2个字节的数据成功了,我想请问一下如果掉 ...

应该快点,最后一个扇区上电稳定后读出你要的数据,就擦除备用,掉电直接写进去,擦除写太慢
回复

使用道具 举报

61

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2012-1-12
在线时间
93 小时
 楼主| 发表于 2018-6-13 18:39:02 | 显示全部楼层
275891381 发表于 2018-6-13 18:25
应该快点,最后一个扇区上电稳定后读出你要的数据,就擦除备用,掉电直接写进去,擦除写太慢

有读写flash的相关程序能让我参考一下吗?最好是寄存器的
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 19:59:55 | 显示全部楼层
47933673 发表于 2018-6-13 18:39
有读写flash的相关程序能让我参考一下吗?最好是寄存器的

原子历程里面有
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 22:46:23 | 显示全部楼层
47933673 发表于 2018-6-13 18:39
有读写flash的相关程序能让我参考一下吗?最好是寄存器的

刚发了个帖子 是用17楼的方法,用户选项字节掉电存储,你可以看看
数据量大,还是flash模拟eepron
http://www.openedv.com/forum.php ... &extra=page%3D1
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2333
金钱
2333
注册时间
2017-12-11
在线时间
496 小时
发表于 2018-12-24 13:46:31 | 显示全部楼层
275891381 发表于 2018-6-13 15:06
之前试过470uf能打印出来20个左右,这样正常代码里面测试打印20个出来耗时多少就知道能执行多少代码了

你好,请问为什么我用 10V 470uf 的电容加在 eeprom的 GND 和 vcc端,却只能打印出3个?
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-12-24 18:41:58 | 显示全部楼层
白纸扇001 发表于 2018-12-24 13:46
你好,请问为什么我用 10V 470uf 的电容加在 eeprom的 GND 和 vcc端,却只能打印出3个?

你用的开发板吧,耗电的东西太多,换最小系统试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 23:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表