在 STM32f10x 中使用 EEPROM
Using EEPROM in STM32f10x
我正在使用 STM32f103,在我的程序中,我需要在内部闪存中保存一些字节。但据我所知,我必须擦掉一整页才能写进去,这需要时间。
此延迟导致我的显示为 blink。
谁能帮我保存我的数据而不用花那么多时间?
这是一个可能有用的列表:
1-单片机:STM32f103
2- IDE: Keil 愿景
3-使用STM32CubeMx提供的HAL驱动
4-保存在Flash中的样本数据:{0x53, 0xa0, 0x01, 0x54}
在下面的 link 中,您可以找到我正在使用的代码。
您提供的代码似乎没有很好地实现。每次启动写入操作时,它基本上会做两件事:
- 擦除页面(这是需要时间的部分)
- 从给定的指针开始,写入直到达到零。
这是一种非常低效的闪光灯使用方式。
可能最简单和最广为人知的方法是使用ST的AN2594中描述的方法,尽管它有一些限制。
不过,无论您使用何种方法,在某些时候都需要进行页面擦除,并且无法避免一些延迟,除非您的 uC 支持双闪存组(STM32F103 没有此功能)。您需要相应地规划闪存写入和显示刷新的时间。如果您需要定期写入闪存,您的设计中可能存在一些高级错误。
为了解决这个问题,我使用了STM本身提供的另一个库。我必须将“eeprom.h”包含到您的项目中,然后向其中添加“eeprom.c”。您可以在 Internet 上轻松找到这些文件。
我正在使用 STM32f103,在我的程序中,我需要在内部闪存中保存一些字节。但据我所知,我必须擦掉一整页才能写进去,这需要时间。 此延迟导致我的显示为 blink。 谁能帮我保存我的数据而不用花那么多时间?
这是一个可能有用的列表:
1-单片机:STM32f103
2- IDE: Keil 愿景
3-使用STM32CubeMx提供的HAL驱动
4-保存在Flash中的样本数据:{0x53, 0xa0, 0x01, 0x54}
在下面的 link 中,您可以找到我正在使用的代码。
您提供的代码似乎没有很好地实现。每次启动写入操作时,它基本上会做两件事:
- 擦除页面(这是需要时间的部分)
- 从给定的指针开始,写入直到达到零。
这是一种非常低效的闪光灯使用方式。
可能最简单和最广为人知的方法是使用ST的AN2594中描述的方法,尽管它有一些限制。
不过,无论您使用何种方法,在某些时候都需要进行页面擦除,并且无法避免一些延迟,除非您的 uC 支持双闪存组(STM32F103 没有此功能)。您需要相应地规划闪存写入和显示刷新的时间。如果您需要定期写入闪存,您的设计中可能存在一些高级错误。
为了解决这个问题,我使用了STM本身提供的另一个库。我必须将“eeprom.h”包含到您的项目中,然后向其中添加“eeprom.c”。您可以在 Internet 上轻松找到这些文件。