示例#1
0
void Data_Load(void)
{
	uint8_t count;
	uint8_t i;
	FLASH_Unlock();
	while(FLASH_GetFlagStatus(FLASH_FLAG_BSY)==1);
	
	for(count=0;count < SAVEDATA_NUM;count++)
	{
		for(i=0;i<4;i++)
		{
			flash_save[count].u16_data[i] = flashread((PAGE_ADDRESS +count*8+i*2));    //flash  为一个字节存储,16位数据必须地址加2
		}
	}
	
	Gyro_Float				= flash_save[0].i32_data[0];
	Gyro_Convert1			= flash_save[1].f64_data;
	Gyro_Convert2			= flash_save[2].f64_data;
	Encoders[0].Convert1	= flash_save[3].f64_data;
	Encoders[0].Convert2	= flash_save[4].f64_data;
	Encoders[0].Radius		= flash_save[5].f64_data;
	Encoders[0].radian		= flash_save[6].f64_data;
	Encoders[1].Convert1	= flash_save[7].f64_data;
	Encoders[1].Convert2	= flash_save[8].f64_data;
	Encoders[1].Radius		= flash_save[9].f64_data;
	Encoders[1].radian		= flash_save[10].f64_data;
	
	while(FLASH_GetFlagStatus(FLASH_FLAG_BSY)==1);

	FLASH_Lock();
}
示例#2
0
uint8_t DataMem_Write(uint32_t addr, uint8_t * pu8Buffer, uint8_t size)
{
	uint32_t timeout = 10000;
	uint8_t i = 0;
	uint8_t state = 1;

	usr_assert(pu8Buffer != NULL);

	// Unlock flash data eeprom memory 
  	FLASH_Unlock(FLASH_MemType_Data);
	
  	// Wait until Data EEPROM area unlocked flag is set
  	while ((FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET) && (timeout--))
  	{}

	if(timeout)
	{
		for(i = 0;i < size;i ++)
		{
			FLASH_ProgramByte(addr + i, *(pu8Buffer + i));
		}
		state = 1;
	}
	else
	{
		state = 0;
	}

	// Lock flash data eeprom memory 
  	FLASH_Lock(FLASH_MemType_Data);

	return (state);
}
示例#3
0
void Data_Save(void)
{
	uint8_t count;
	uint8_t i,flag;
	LED4_on;
	flash_save[0].i32_data[0] = Gyro_Float;
	flash_save[0].i32_data[1] = 0x00000000;
	flash_save[1].f64_data = Gyro_Convert1;
	flash_save[2].f64_data = Gyro_Convert2;
	flash_save[3].f64_data = Encoders[0].Convert1;
	flash_save[4].f64_data = Encoders[0].Convert2;
	flash_save[5].f64_data = Encoders[0].Radius;
	flash_save[6].f64_data = Encoders[0].radian;
	flash_save[7].f64_data = Encoders[1].Convert1;
	flash_save[8].f64_data = Encoders[1].Convert2;
	flash_save[9].f64_data = Encoders[1].Radius;
	flash_save[10].f64_data = Encoders[1].radian;
	
	FLASH_Unlock();
	while(FLASH_GetFlagStatus(FLASH_FLAG_BSY)==1);
	
	FLASH_ErasePage(PAGE_ADDRESS);
	for(count=0;count < SAVEDATA_NUM;count++)
	{
		for(i=0;i<4;i++)
		{
			flag = 0;
			while(flag==0)
			{
				FLASH_ProgramHalfWord((PAGE_ADDRESS +count*8+i*2),flash_save[count].u16_data[i]);  //flash  为一个字节存储,16位数据必须地址加2
				if(flashread((PAGE_ADDRESS +count*8+i*2)) == (flash_save[count].u16_data[i]))
				{
					flag = 1;
					LED2_off;
				}
				else
					LED2_on;
			}
		}
	}
	while(FLASH_GetFlagStatus(FLASH_FLAG_BSY)==1);

	FLASH_Lock();
	
	LED4_off;
}
示例#4
0
uint16_t flashread(uint32_t Address)
{
	uint16_t data;
	
	while(FLASH_GetFlagStatus(FLASH_FLAG_BSY)==1);
	data= *((u16 *)Address);
	
	return data;
}
示例#5
0
文件: ee.c 项目: ns96/InstrasPDC2
	/**
  * @brief  Initializes the EEPROM memory. Sets the flash
	* programming time and Unlocks the DATA memory section.
  * @retval : None
  */
	void ee_init(void){
		/* Define flash programming Time*/
		FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
	
		/* Unlock flash data eeprom memory */
		FLASH_Unlock(FLASH_MEMTYPE_DATA);
		/* Wait until Data EEPROM area unlocked flag is set*/
		while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)
			;
	}
示例#6
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void main(void)
{
  uint32_t add, startadd, stopadd = 0;
  uint8_t newval = 0xAA;
  uint8_t i = 0;

#ifdef _COSMIC_
/* Call the _fctcpy() function with the first segment character as parameter 
   "_fctcpy('F');"  for a manual copy of the declared moveable code segment
   (FLASH_CODE) in RAM before execution*/
  _fctcpy('F');
#endif /*_COSMIC_*/

#ifdef _RAISONANCE_
/* Call the standard C library: memcpy() or fmemcpy() functions available through 
   the <string.h> to copy the inram function to the RAM destination address */
  MEMCPY(FLASH_EraseBlock,
         (void PointerAttr*)&__address__FLASH_EraseBlock,
         (int)&__size__FLASH_EraseBlock);
  MEMCPY(FLASH_ProgramBlock,
         (void PointerAttr*)&__address__FLASH_ProgramBlock,
         (int)&__size__FLASH_ProgramBlock);
#endif /*_RAISONANCE_*/

  /* Initialize I/Os in Output Mode */
  STM_EVAL_LEDInit(LED2);
  STM_EVAL_LEDInit(LED3);
  STM_EVAL_LEDInit(LED4);

  /* High speed internal clock prescaler */
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

  /* Define flash programming Time*/
  FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);

  FLASH_Unlock(FLASH_MemType_Program);
  /* Wait until Flash Program area unlocked flag is set*/
  while (FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET)
  {}

  /* Unlock flash data eeprom memory */
  FLASH_Unlock(FLASH_MemType_Data);
  /* Wait until Data EEPROM area unlocked flag is set*/
  while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)
  {}

  /* Fill the buffer in RAM */
  for (i = 0; i < FLASH_BLOCK_SIZE; i++)
  {
    GBuffer[i] = newval;
  }
  /* This function is executed from RAM */
  FLASH_ProgramBlock(BLOCK_OPERATION, FLASH_MemType_Data, FLASH_ProgramMode_Standard, GBuffer);
  
  /* Wait until End of high voltage flag is set*/
  while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
  {}
  /* Check the programmed block */
  startadd = FLASH_DATA_EEPROM_START_PHYSICAL_ADDRESS + ((uint16_t)BLOCK_OPERATION * (uint16_t)FLASH_BLOCK_SIZE);
  stopadd = startadd + (uint16_t)FLASH_BLOCK_SIZE;
  for (add = startadd; add < stopadd; add++)
      {
        if (FLASH_ReadByte(add) != newval)
        {
          /* Error */
          OperationStatus = FAILED;
          /* OperationStatus = PASSED, if the data written/read to/from Flash program memory is correct */
          /* OperationStatus = FAILED, if the data written/read to/from Flash program memory is corrupted */
          while (1)
          {
            STM_EVAL_LEDToggle(LED1); /*FAIL: write error */
            
            Delay(0xFFFF);
          }
        }
      }
  /* Erase block 0 and verify it */
  /* This function is executed from RAM */
  FLASH_EraseBlock(BLOCK_OPERATION, FLASH_MemType_Data);

  /* Wait until End of high voltage flag is set*/
  while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
  {}

  for (add = startadd; add < stopadd; add++)
      {
        if (FLASH_ReadByte(add) != 0x00)
        {
          /* Error */
          OperationStatus = FAILED;
          /* OperationStatus = PASSED, if the data written/read to/from Flash program memory is correct */
          /* OperationStatus = FAILED, if the data written/read to/from Flash program memory is corrupted */
          while (1)
          {
            STM_EVAL_LEDToggle(LED2); /* FAIL: Erase error */
            
           Delay(0xFFFF);
          }
        }
      }

  /* Pass */
  OperationStatus = PASSED;
  /* OperationStatus = PASSED, if the data written/read to/from Flash program memory is correct */
  /* OperationStatus = FAILED, if the data written/read to/from Flash program memory is corrupted */
  while (1)
  {
    STM_EVAL_LEDToggle(LED3); /* PASS: without errors*/
    
    Delay(0xFFFF);
  }
}