STM32F0xx在闪存部分问题中仿真EEPROM

时间:2018-11-24 09:41:33

标签: stm32 eeprom

我正在使用STM32F030RC MCU,并且我想将数据存储在内部EEPROM中:STM32F0没有EEPROM部分,因此我使用了仿真的{{1} }将数据存储在闪存中。在读取或写入过程中的某个时间,数据CPU处理程序中发生错误。

EEPROM

要完整地了解问题,这是写入功能,我在复制时查看了闪存:我写入的所有数据都已成功存储在闪存中。

#define EEPROM_baseADD 0
#define S1_ADD_ADC_OC 0                   // 12 int
#define S1_ADD_Temperature_Offset_x1000 1 // 20 int
#define S1_ADD_ADC_Zero 2                 // 30 int
#define S1_ADD_T_Zero 3                   // 32 int
#define S1_ADD_RH_Zero 4                  // 34 int
#define S1_ADD_ADC_Span 5                 // 40 int
#define S1_ADD_T_Span 6                   // 42 int
#define S1_ADD_RH_Span 7                  // 44 int
#define S1_ADD_PPM_Span_x100 8            // 46 int
#define S1_ADD_LMP91000_B01 9             // 50 int
#define S1_ADD_LMP91000_B10 10            // 52 int
#define S1_ADD_LMP91000_B11 11            // 54 int
#define S1_ADD_LMP91000_B12 12            // 56 int
#define S1_ADD_nA_per_PPM_x100 13         // 70 int

void LMP91000_ReadROM_Sensor(LMP91000_Object_t * LMP91000, unsigned char Sen_No, unsigned int EEPROM_baseADD) {
  unsigned char i = 0;

  EE_ReadVariable(EEPROM_baseADD + S1_ADD_ADC_OC, & LMP91000 - > ADC_OC); // 12
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_Temperature_Offset_x1000, & LMP91000 - > Temperature_Offset_x1000); // 20
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_ADC_Zero, & LMP91000 - > ADC_Zero); // 30
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_T_Zero, & LMP91000 - > T_Zero); // 32
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_RH_Zero, & LMP91000 - > RH_Zero); // 34
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_ADC_Span, & LMP91000 - > ADC_Span); // 40
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_T_Span, & LMP91000 - > T_Span); // 42
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_RH_Span, & LMP91000 - > RH_Span); // 44
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_PPM_Span_x100, & LMP91000 - > PPM_Span_x100); // 46
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_LMP91000_B01, & LMP91000 - > LMP91000_B01); // 50
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_LMP91000_B10, & LMP91000 - > LMP91000_B10); // 52
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_LMP91000_B11, & LMP91000 - > LMP91000_B11); // 54
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_LMP91000_B12, & LMP91000 - > LMP91000_B12); // 56
  EE_ReadVariable(EEPROM_baseADD + S1_ADD_nA_per_PPM_x100, (uint16_t * ) & LMP91000 - > nA_per_PPM_x100); // 70
  // I am able to read all above successfully but
  // for the blew loops it give Cpu handler error after read the first byte only

  i = 0;
  while (i < S1_ADD_OFFEST_LMP91000_Serial_Number) {
    EE_ReadVariable((S1_ADD_LMP91000_Serial_Number + EEPROM_baseADD), (uint16_t * ) & LMP91000 - > Serial_Number_[i]); // 300+12*2
    i++;
  }
  i = 0;
  while (i < S1_ADD_OFFEST_LMP91000_Part_Number) {
    EE_ReadVariable((S1_ADD_LMP91000_Part_Number + EEPROM_baseADD) + (i), (uint16_t * ) & LMP91000 - > Part_Number_[i]); // 330+7*2
    HAL_Delay(100);
    i++;
  }
  LMP91000 - > Part_Number = atol(LMP91000 - > Part_Number_);
  i = 0;
  while (i < S1_ADD_OFFEST_LMP91000_Gas) {
    EE_ReadVariable((S1_ADD_LMP91000_Gas + EEPROM_baseADD) + (i), (uint16_t * ) & LMP91000 - > Gas_[i]); // 350+10*2
    i++;
    HAL_Delay(100);
  }
  i = 0;
  while (i < S1_ADD_OFFEST_LMP91000_Date_Code) {
    EE_ReadVariable((S1_ADD_LMP91000_Date_Code + EEPROM_baseADD) + (i), (uint16_t * ) & LMP91000 - > Date_Code_[i]); //370+5*2
    i++;
  }
  i = 0;
  while (i < S1_ADD_offest_LMP91000_Sensitivity_Code) {
    EE_ReadVariable((S1_ADD_LMP91000_Sensitivity_Code + EEPROM_baseADD) + (i), (uint16_t * ) & LMP91000 - > Sensitivity_Code_[i]); //380+8*2
    i++;
  }

  LMP91000_Unlock(Sen_No);
  LMP91000_Write_0x10(LMP91000 - > LMP91000_B10, Sen_No);
  LMP91000_Write_0x11(LMP91000 - > LMP91000_B11, Sen_No);
  LMP91000_Write_0x12(LMP91000 - > LMP91000_B12, Sen_No);

}

0 个答案:

没有答案