
STM32F411RE Embedded FLASH(internal FLASH) write.
main.cpp
- Committer:
- hiro99ma
- Date:
- 2015-11-30
- Revision:
- 0:23f5942ba14e
- Child:
- 1:fa70127b3381
File content as of revision 0:23f5942ba14e:
#include "mbed.h" #include "stm32f4xx_hal_flash.h" namespace { //STM32F411.C/E(DM00119316.pdf p.43 Table 4) const uint32_t ADDR_FLASH_SECTOR_0 = (uint32_t)0x08000000; /* Base address of Sector 0, 16 Kbytes */ const uint32_t ADDR_FLASH_SECTOR_1 = (uint32_t)0x08004000; /* Base address of Sector 1, 16 Kbytes */ const uint32_t ADDR_FLASH_SECTOR_2 = (uint32_t)0x08008000; /* Base address of Sector 2, 16 Kbytes */ const uint32_t ADDR_FLASH_SECTOR_3 = (uint32_t)0x0800c000; /* Base address of Sector 3, 16 Kbytes */ const uint32_t ADDR_FLASH_SECTOR_4 = (uint32_t)0x08010000; /* Base address of Sector 4, 64 Kbytes */ const uint32_t ADDR_FLASH_SECTOR_5 = (uint32_t)0x08020000; /* Base address of Sector 5, 128 Kbytes */ const uint32_t ADDR_FLASH_SECTOR_6 = (uint32_t)0x08040000; /* Base address of Sector 6, 128 Kbytes */ const uint32_t ADDR_FLASH_SECTOR_7 = (uint32_t)0x08060000; /* Base address of Sector 7, 128 Kbytes */ /** @brief 内蔵FLASHへのbyte書込み(セクタ消去有り) * * @param[in] addr 書込み先アドレス(ADDR_FLASH_SECTOR_x) * @param[in] pData 書き込みデータ * @param[in] Len 書き込みデータサイズ */ void programByte(uint32_t addr, const uint8_t *pData, uint8_t Len) { HAL_StatusTypeDef ret; /* flash control registerへのアクセス許可 */ HAL_FLASH_Unlock(); /* 消去(電圧 [2.7V to 3.6V]) */ FLASH_Erase_Sector(addr, FLASH_VOLTAGE_RANGE_3); /* 書込み(4byte単位) */ for (int lp = 0 ; lp < Len; lp ++) { ret = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, addr, *pData); if (ret != HAL_OK) { //trouble!! while (true) {} } addr++; pData++; } /* flash control registerへのアクセス禁止 */ HAL_FLASH_Lock(); } } int main() { uint8_t str[] = "Hello."; programByte(ADDR_FLASH_SECTOR_7, str, sizeof(str)); }