我正在尝试使用HAL_FLASH_Program(uint32_t TypeProgram,uint32_t Address,uint32_t Data)在闪存中的特定区域写入一些数据字节。但我目前对HAL用户手册19.2.7 UM1749“指定地址的程序字”的理解尚不清楚它是什么意思?我怎么能把字节写成:char* demo="nucleo"
到内存
char* demo="nucleo";
int main(){
.
.
ScratchWrite(FLASH_SCRATCH_START, demo);
.
.
}
uint32_t ScratchWrite(uint32_t destination, uint32_t *p_source)
{
HAL_FLASH_Unlock();
/* Write the buffer to the memory */
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,destination, p_source );
HAL_FLASH_Lock();
return status;
}
答案 0 :(得分:1)
HAL_FLASH_Program
允许您在指定地址下写入给定的字节数。第一个函数参数uint32_t TypeProgram
控制要写入的块的大小。可能性是:
#define FLASH_TYPEPROGRAM_BYTE ((uint32_t)0x00U) /*!< Program byte (8-bit) at a specified address */
#define FLASH_TYPEPROGRAM_HALFWORD ((uint32_t)0x01U) /*!< Program a half-word (16-bit) at a specified address */
#define FLASH_TYPEPROGRAM_WORD ((uint32_t)0x02U) /*!< Program a word (32-bit) at a specified address */
#define FLASH_TYPEPROGRAM_DOUBLEWORD ((uint32_t)0x03U) /*!< Program a double word (64-bit) at a specified address */
因此,如果您的问题,FLASH_TYPEPROGRAM_WORD会在指定地址下写入32位(4字节)值。例如:
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x8010000, *(uint32_t*)demo);
会在地址"nucl"
下面写0x8010000
。
您希望使用HAL_FLASH_Program
编程的块的大小完全取决于您,并且如果您在编写大部分闪存时选择小块(例如FLASH_TYPEPROGRAM_BYTE
),则会影响性能。