Microcontroller 使用HAL_闪存_程序STM32L0写入闪存

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

我试图使用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);
.
.
}


 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);