F203/Core/Src/flash.c

130 lines
2.3 KiB
C

/*
* flash.c
*
* Created on: Oct 24, 2017
* Author: toporov
*/
#include "my.h"
#include "stm32f7xx_hal_flash.h"
#include "stm32f7xx_hal_flash_ex.h"
#include "flash.h"
#include "adc.h"
extern volatile float32_t aa1;
extern volatile float32_t aa0;
extern __IO float32_t MEAN;
//static const float32_t TEMP_CORR_KU[] = {1.06887186, 1.08734334, 1.09281802, 1.07570958, 1.08372843, 1.00074244, 1.00249016, 1.0147537, 1.08287311};
//static const float32_t TEMP_CORR_KU[] = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
extern __IO uint8_t CardState;
extern __IO uint32_t NextIndexMeas;
extern __IO uint32_t NextIndexPoint;
extern volatile uint32_t Ns;
extern volatile uint32_t Fs;
volatile UserData_TypeDef pardata, pardata_old;
volatile CorrData_TypeDef corrdata;
volatile bool FirstOn = false;
extern __IO uint32_t WavFileNameLen;
extern __IO uint32_t MeasFileNameLen;
extern __IO uint32_t DiagFileNameLen;
volatile char _SERIAL_DRAW[10];
FLASH_OBProgramInitTypeDef OBInit;
static FLASH_EraseInitTypeDef EraseInitStruct;
volatile bool CORRECTION = false;
volatile char _SERIAL[8] = {0, 0, 0, 0, 0, 0, 0, 0};
volatile uint32_t id = 0;
void initFlash(void)
{
__HAL_RCC_SYSCFG_CLK_ENABLE();
HAL_FLASHEx_OBGetConfig(&OBInit);
rdPar();
}
void wrPar(void)
{
volatile uint32_t i;
volatile uint32_t lenpar = 0;
volatile uint32_t Address, *pData;
uint32_t SECTORError = 0;
#ifndef DEBUGGING
lenpar = 8u << 2;
__disable_irq();
HAL_FLASH_Unlock();
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
EraseInitStruct.Sector = USERSECTOR; //FLASH_SECTOR_11;
EraseInitStruct.NbSectors = 1;
if(HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError) == HAL_OK)
{
Address = USERPAGE;
pData = (uint32_t *) &pardata.OWN;
for(i = 0; i < lenpar; i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, *pData++);
Address += 4;
}
}
HAL_FLASH_Lock();
__enable_irq();
#endif
}
void rdPar(void)
{
uint8_t i, j;
uint32_t lenpar;
volatile bool rewrite = false;
sfloat hpf;
memcpy((void *) &pardata.OWN, (void *) USERPAGE, 8u);
if(pardata.OWN != 18)
{
pardata.OWN = 18;
pardata.BAUD = 7;
pardata.INFB = 0;
pardata.LANG = RUS;
rewrite = true;
}
if(rewrite)
{
rewrite = false;
wrPar();
}
}
void rdFlash(void)
{
//rdPar();
}