test4
Dependencies: mbed BufferedSerial LS7366LIB2 FastPWM
flash.h
- Committer:
- lsh3146
- Date:
- 2020-12-08
- Revision:
- 4:bf278ddb8504
- Parent:
- 0:7cff999a7f5c
File content as of revision 4:bf278ddb8504:
#ifndef _FLASH_H_ #define _FLASH_H_ // ST32F103RBT6 - FLASH : 128KB, SRAM : 20KB (Medium-density model) // flash memory page : 127 (last page) // flash memory size : 1KB, unit : Word(4Byte) // 0x0801 FC00 - 0x0801 FFFF #define FLASH_START_ADDRESS ((uint32_t)0x0801FC00) #define FLASH_END_ADDRESS ((uint32_t)0x0801FFFF) #define FLASH_START_ADDRESS2 ((uint32_t)0x0801F800) #define FLASH_END_ADDRESS2 ((uint32_t)0x0801FBFF) uint32_t flash_address_count = 0; bool Flash_Head_Check(); void Erase_Flash(); void Write_Flash(uint32_t data); uint32_t Read_Flash(uint32_t address); bool Flash_Head_Check() { uint32_t flash_data[5]; for(uint32_t i = 0; i < 5; i++) { flash_data[i] = Read_Flash(i * 4); } if ( (char)flash_data[0] == 'F' && (char)flash_data[1] == 'L' && (char)flash_data[2] == 'A' && (char)flash_data[3] == 'S' && (char)flash_data[4] == 'H') { return true; } else { return false; } } void Erase_Flash() { static FLASH_EraseInitTypeDef flash_struct; // Flash erase struct uint32_t PageError = 0; // Page error state flash_struct.TypeErase = FLASH_TYPEERASE_PAGES; // Erase type : Page flash_struct.PageAddress = FLASH_START_ADDRESS; // Flash start address flash_struct.NbPages = 1; // Number of page HAL_FLASH_Unlock(); // Flash control unlock if(HAL_FLASHEx_Erase(&flash_struct, &PageError) != HAL_OK) // Flash erase function & result, HAL_OK = true { //pc.printf("Flash erase error!\n\r"); } HAL_FLASH_Lock(); // Flash control lock flash_address_count = 0; // Flash address count variable reset } void Write_Flash(uint32_t data) { if(Read_Flash(flash_address_count * 4)) { HAL_FLASH_Unlock(); HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, FLASH_START_ADDRESS + (flash_address_count * 4), data); HAL_FLASH_Lock(); } flash_address_count++; } uint32_t Read_Flash(uint32_t address) { uint32_t val = 0; address = address + FLASH_START_ADDRESS; val = *(__IO uint32_t*)address; return val; } #endif