Microcontroller 使用HAL_闪存_程序STM32L0写入闪存
我试图使用HAL_flash_程序(uint32_t TypeProgram、uint32_t Address、uint32_t data)在闪存中的特定区域写入一些字节的数据。但我目前对HAL用户手册19.2.7“指定地址的程序字”的理解不清楚它是什么意思?如何将字节写入内存,例如:Microcontroller 使用HAL_闪存_程序STM32L0写入闪存,microcontroller,stm32,hal,Microcontroller,Stm32,Hal,我试图使用HAL_flash_程序(uint32_t TypeProgram、uint32_t Address、uint32_t data)在闪存中的特定区域写入一些字节的数据。但我目前对HAL用户手册19.2.7“指定地址的程序字”的理解不清楚它是什么意思?如何将字节写入内存,例如:char*demo=“nucleo” char* demo="nucleo"; int main(){ . . ScratchWrite(FLASH_SCRATCH_START, demo); . . } u
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;
}
HAL\u FLASH\u程序
允许您在指定地址下写入给定数量的字节。第一个函数参数uint32\u 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 */
将在地址0x801000
下写入“nucl”
您想用
HAL\u FLASH\u program
编程的块大小完全取决于您自己,如果您在编程大部分FLASH时选择小块(FLASH\u TYPEPROGRAM\u BYTE
),则会影响性能。这将是两个字,8个字节,所以肯定要做两次写入。
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x8010000, *(uint32_t*)demo);