| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | /* * sys_hal.c * *  Created on: 12.03.2017 *      Author: pavel */#include <stdint.h>#include "sys_hal.h"#include "sys_api.h"#include "common_config.h"#include "main.h"//#include "hal.h"#ifdef PRINTF_STDLIB#include <stdio.h>#endif#ifdef PRINTF_CUSTOM#include "tinystdio.h"#endif/**  * @brief  */void SYS_ReadFromFlash(uint8_t *data, uint32_t size, uint32_t baseAddress){  for (uint32_t i = 0; i < size; i++)    *data++ = (*(uint32_t*)baseAddress++);}/**  * @brief  */void SYS_WriteToFlash(uint8_t *data, uint32_t size, uint32_t crc){  uint32_t baseAddress = SYS_SECTOR;  uint32_t checkCrc = 0;  bool fAlarm = 0;  FLASH_Status status;  uint8_t *pdata = data;  for (uint8_t i = 0; i < 3; i++)  {    fAlarm = 0;    FLASH_Unlock();    SYS_EraseFlashSector();    for (uint32_t i = 0; i < size; i++)        if ((status = FLASH_ProgramByte(baseAddress++, *pdata++)) != FLASH_COMPLETE) {             DBG printf("FLASH_ProgramByte error: %d\r\n", status);             break;         }    if ((status = FLASH_ProgramWord((uint32_t)SYS_CRC_ADDRESS, crc)) != FLASH_COMPLETE) {         DBG printf("FLASH_ProgramWord error: %d\r\n", status);     }    FLASH_Lock();//    /* Считываем что записали *///    SYS_ReadFromFlash((uint8_t*)data, size, SYS_SECTOR);////    checkCrc = SYS_GetCRC(data);    checkCrc = SYS_GetCRC((SYS_t *)SYS_SECTOR);    /* Проверяем  CRC того что было записано */    if (checkCrc == crc) {    //  DBG printf("SYS write OK\r\n");      break;    }    else      fAlarm = 1; // Авария  }  /* Произошел сбой при записи - заносим ошибку в лог и перезагружаемся */  if (fAlarm) {    DBG printf("Flash write error: 1%d", (uint8_t)status);;    NVIC_SystemReset();//    while (1)//    {};  }}/**  * @brief  Очистка сектора настроек  * @retval  */void SYS_EraseFlashSector(void){  FLASH_Status status;  if ((status = FLASH_EraseSector(FLASH_Sector_2, VoltageRange_3)) != FLASH_COMPLETE) {      DBG printf("SYS_EraseFlashSector error: %d\r\n", status);  }}
 |