test

Dependencies:   mbed BufferedSerial LS7366LIB2 FastPWM

Committer:
lsh2205
Date:
Thu Apr 23 00:38:16 2020 +0000
Revision:
0:e12eb40b9fef
test;

Who changed what in which revision?

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