写入闪存uisng HAL_FLASH_Program STM32L0

时间:2018-03-29 16:18:46

标签: microcontroller stm32 hal

我正在尝试使用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;
}

1 个答案:

答案 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),则会影响性能。