【发布时间】:2019-06-06 13:39:22
【问题描述】:
我想使用 HAL 库在我的 STM32F4 Discovery 板的 C 程序中将结构的内容写入闪存。这是我的结构:
typedef struct
{
RTC_TimeTypeDef time;
RTC_DateTypeDef date;
float Data;
} DataLogTypeDef;
我可以选择使用 stm32f4xx_hal_flash.c 库函数一次将字节、半字、字和双字写入每个内存地址:
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);
我的结构包含各种数据类型,但我不确定如何一次只使用字节、半字、字和双字命令来编写内容?
【问题讨论】:
-
只要你写出至少
sizeof(DataLogTypeDef)字节的信息,你应该能够使用其中任何一种方法来编写它,并且你用你写的同样的方式把它读回到一个结构中它和在同一个平台上(以避免可移植性问题)。换句话说,将其视为一个简单的数据块。 -
感谢您的回复。我不确定如何安排数据以便将其传输到内存。我确信这将需要几个写操作,但是我如何指示程序执行几个写操作,每个写操作都有整个结构的不同部分?
-
你不必安排它。如果您的数据被声明为
DataLogTypeDef my_data;,那么您将从地址&my_data向闪存写入一块内存,该块的长度为sizeof(DataLogTypeDef)字节。在同一个平台上以同样的方式读回它应该没问题。 -
感谢您的回复。我可以按照您的描述进行操作,但我不确定如何编写代码。你有任何关于如何进行这种写操作的例子吗?再次感谢
-
我不确定您的闪存编程函数中的参数是什么意思,但假设您有一个函数
write_flash(from_address, to_address, number_of_bytes),您只需调用write_flash(&my_data, flash_address, sizeof(DataLogTypeDef))。
标签: struct stm32 stm32f4discovery flash-memory stm32f4