test4

Dependencies:   mbed BufferedSerial LS7366LIB2 FastPWM

Committer:
lsh3146
Date:
Tue Dec 08 01:25:06 2020 +0000
Revision:
4:bf278ddb8504
Parent:
0:7cff999a7f5c
aaaaaqqqqq

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gohgwaja 0:7cff999a7f5c 1 #ifndef _FLASH_H_
gohgwaja 0:7cff999a7f5c 2 #define _FLASH_H_
gohgwaja 0:7cff999a7f5c 3
gohgwaja 0:7cff999a7f5c 4 // ST32F103RBT6 - FLASH : 128KB, SRAM : 20KB (Medium-density model)
gohgwaja 0:7cff999a7f5c 5 // flash memory page : 127 (last page)
gohgwaja 0:7cff999a7f5c 6 // flash memory size : 1KB, unit : Word(4Byte)
gohgwaja 0:7cff999a7f5c 7 // 0x0801 FC00 - 0x0801 FFFF
gohgwaja 0:7cff999a7f5c 8 #define FLASH_START_ADDRESS ((uint32_t)0x0801FC00)
gohgwaja 0:7cff999a7f5c 9 #define FLASH_END_ADDRESS ((uint32_t)0x0801FFFF)
gohgwaja 0:7cff999a7f5c 10
gohgwaja 0:7cff999a7f5c 11 #define FLASH_START_ADDRESS2 ((uint32_t)0x0801F800)
gohgwaja 0:7cff999a7f5c 12 #define FLASH_END_ADDRESS2 ((uint32_t)0x0801FBFF)
gohgwaja 0:7cff999a7f5c 13
gohgwaja 0:7cff999a7f5c 14 uint32_t flash_address_count = 0;
gohgwaja 0:7cff999a7f5c 15
gohgwaja 0:7cff999a7f5c 16 bool Flash_Head_Check();
gohgwaja 0:7cff999a7f5c 17 void Erase_Flash();
gohgwaja 0:7cff999a7f5c 18 void Write_Flash(uint32_t data);
gohgwaja 0:7cff999a7f5c 19 uint32_t Read_Flash(uint32_t address);
gohgwaja 0:7cff999a7f5c 20
gohgwaja 0:7cff999a7f5c 21 bool Flash_Head_Check()
gohgwaja 0:7cff999a7f5c 22 {
gohgwaja 0:7cff999a7f5c 23 uint32_t flash_data[5];
gohgwaja 0:7cff999a7f5c 24 for(uint32_t i = 0; i < 5; i++)
gohgwaja 0:7cff999a7f5c 25 {
gohgwaja 0:7cff999a7f5c 26 flash_data[i] = Read_Flash(i * 4);
gohgwaja 0:7cff999a7f5c 27 }
gohgwaja 0:7cff999a7f5c 28
gohgwaja 0:7cff999a7f5c 29 if ( (char)flash_data[0] == 'F'
gohgwaja 0:7cff999a7f5c 30 && (char)flash_data[1] == 'L'
gohgwaja 0:7cff999a7f5c 31 && (char)flash_data[2] == 'A'
gohgwaja 0:7cff999a7f5c 32 && (char)flash_data[3] == 'S'
gohgwaja 0:7cff999a7f5c 33 && (char)flash_data[4] == 'H')
gohgwaja 0:7cff999a7f5c 34 {
gohgwaja 0:7cff999a7f5c 35 return true;
gohgwaja 0:7cff999a7f5c 36 }
gohgwaja 0:7cff999a7f5c 37 else
gohgwaja 0:7cff999a7f5c 38 {
gohgwaja 0:7cff999a7f5c 39 return false;
gohgwaja 0:7cff999a7f5c 40 }
gohgwaja 0:7cff999a7f5c 41 }
gohgwaja 0:7cff999a7f5c 42
gohgwaja 0:7cff999a7f5c 43
gohgwaja 0:7cff999a7f5c 44 void Erase_Flash()
gohgwaja 0:7cff999a7f5c 45 {
gohgwaja 0:7cff999a7f5c 46 static FLASH_EraseInitTypeDef flash_struct; // Flash erase struct
gohgwaja 0:7cff999a7f5c 47 uint32_t PageError = 0; // Page error state
gohgwaja 0:7cff999a7f5c 48
gohgwaja 0:7cff999a7f5c 49 flash_struct.TypeErase = FLASH_TYPEERASE_PAGES; // Erase type : Page
gohgwaja 0:7cff999a7f5c 50 flash_struct.PageAddress = FLASH_START_ADDRESS; // Flash start address
gohgwaja 0:7cff999a7f5c 51 flash_struct.NbPages = 1; // Number of page
gohgwaja 0:7cff999a7f5c 52
gohgwaja 0:7cff999a7f5c 53 HAL_FLASH_Unlock(); // Flash control unlock
gohgwaja 0:7cff999a7f5c 54 if(HAL_FLASHEx_Erase(&flash_struct, &PageError) != HAL_OK) // Flash erase function & result, HAL_OK = true
gohgwaja 0:7cff999a7f5c 55 {
gohgwaja 0:7cff999a7f5c 56 //pc.printf("Flash erase error!\n\r");
gohgwaja 0:7cff999a7f5c 57 }
gohgwaja 0:7cff999a7f5c 58 HAL_FLASH_Lock(); // Flash control lock
gohgwaja 0:7cff999a7f5c 59 flash_address_count = 0; // Flash address count variable reset
gohgwaja 0:7cff999a7f5c 60 }
gohgwaja 0:7cff999a7f5c 61
gohgwaja 0:7cff999a7f5c 62
gohgwaja 0:7cff999a7f5c 63 void Write_Flash(uint32_t data)
gohgwaja 0:7cff999a7f5c 64 {
gohgwaja 0:7cff999a7f5c 65 if(Read_Flash(flash_address_count * 4))
gohgwaja 0:7cff999a7f5c 66 {
gohgwaja 0:7cff999a7f5c 67 HAL_FLASH_Unlock();
gohgwaja 0:7cff999a7f5c 68 HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, FLASH_START_ADDRESS + (flash_address_count * 4), data);
gohgwaja 0:7cff999a7f5c 69 HAL_FLASH_Lock();
gohgwaja 0:7cff999a7f5c 70 }
gohgwaja 0:7cff999a7f5c 71 flash_address_count++;
gohgwaja 0:7cff999a7f5c 72 }
gohgwaja 0:7cff999a7f5c 73
gohgwaja 0:7cff999a7f5c 74 uint32_t Read_Flash(uint32_t address)
gohgwaja 0:7cff999a7f5c 75 {
gohgwaja 0:7cff999a7f5c 76 uint32_t val = 0;
gohgwaja 0:7cff999a7f5c 77 address = address + FLASH_START_ADDRESS;
gohgwaja 0:7cff999a7f5c 78 val = *(__IO uint32_t*)address;
gohgwaja 0:7cff999a7f5c 79
gohgwaja 0:7cff999a7f5c 80 return val;
gohgwaja 0:7cff999a7f5c 81 }
gohgwaja 0:7cff999a7f5c 82
gohgwaja 0:7cff999a7f5c 83
gohgwaja 0:7cff999a7f5c 84 #endif
gohgwaja 0:7cff999a7f5c 85