STM32F4 DIS เขียนค่าเก็บลงMemory ยังไงครับ มือใหม่

Started by gaibl555, February 16, 2015, 05:14:36 PM

Previous topic - Next topic

gaibl555

STM32F4 DIS เขียนค่าเก็บลง InternelMemory เขียนยังไงหรอครับ


zerochero

เพิ่ม Flash_if.h Flash_if.c stm32f4xx_flash.h และ stm32f4xx_flash.c เข้ามาใน Library ก่อนนะครับ ไฟล์ทั้งสี่มีอยู่ในตัวอย่างจากทาง ST ครับ

ตัวอย่างโค๊ดคำสั่งนะครับ
/* Flash unlock */
FLASH_If_FlashUnlock();

/* Flash lock */
FLASH_If_FlashLock();

/* Flash erase */
FLASH_If_EraseSectors(FLASH_START_ADDR, FLASH_END_ADDR);

/* Flash write word*/
FLASH_If_ProgramWord(newFirmware.address, newFirmwareData);

ตัวอย่างการใช้งาน (เฉพาะส่วนที่เขียน Flash memory)
โดยในตัวอย่างเป็นการเขียนข้อมูล 0xABCD ลงที่ตำแหน่ง (Address) 0x08008000
/* Flash unlock */
FLASH_If_FlashUnlock();

/* Flash erase */
FLASH_START_ADDR = ((uint32_t)0x08008000);
FLASH_START_ADDR = ((uint32_t)0x08008000);
FLASH_If_EraseSectors(FLASH_START_ADDR, FLASH_END_ADDR); // ลบ Internal Flash ที่ Address 0x08008000

/* Create word data (1 word = 4 bytes)*/
uint32_t newAddress = FLASH_START_ADDR;
uint32_t newData = 0xABCD;

/* Flash write word*/
FLASH_If_ProgramWord(newAddress, newData); //

/* Read newData*/
uint32_t readNewData = *(__IO uint32_t*)newAddress;

/* Flash lock */
FLASH_If_FlashLock();

ข้อมูลเพิ่มเติมนะครับ
1. การลบ Flash memory 1 ครั้ง Life Circle จะลดลงนะครับ ส่วนการเขียนน่าจะเขียนได้เรื่อยๆ นะครับ แต่ไม่สามารถเขียนทับตำแหน่งเดิมได้ ต้องทำการลบก่อนถึงจะเขียนทับตำแหน่งเดิมได้
2. Flash memory ของ STM32 มีขนาด Sector Size ต่างกันนะครับ โปรดศึกษา Data sheet ก่อน
3. การลบข้อมูลใน Flash memory ผมไม่แน่ใจว่าลบแบบไหนได้บ้าง ผมเคยแต่ลบเป็น Sector แต่รู้สึกจะลบเป็น Block ได้ด้วย
4. การเขี่ยนข้อมูลลง Flash memroy มีหลายแบบ ทั้ง Byte, Half word (2 Bytes) และ Word (4 Bytes) ลองศึกษาดูนะครับ
5. การเขียน Flash memory จำเป็นต้องเปิดการใช้งานและตั้งค่า Clock นะครับ