stm8s,想保存几个字节的数据到flash或者eeprom,改怎么做?

[复制链接]
8099|2
 楼主| donkey89 发表于 2011-8-8 21:00 | 显示全部楼层 |阅读模式
如题,芯片是stm8s的芯片,需要用8个字节的flash或者eeprom保存运行的配置,应该怎么操作?操作越简单越好,代码越少越好.
我用的编译器是iar
上官金虹 发表于 2011-8-8 21:26 | 显示全部楼层
本帖最后由 上官金虹 于 2011-8-8 21:30 编辑

  1. #include "stm8s_conf.h"

  2. void __eeprom_write_8(unsigned short addr_eep,unsigned char data)
  3. {
  4.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);   
  5.   FLASH_Unlock(FLASH_MEMTYPE_DATA);
  6.    
  7.   FLASH_ProgramByte(addr_eep, data);  
  8.    
  9.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  10.   FLASH_Lock(FLASH_MEMTYPE_DATA);   
  11. }

  12. void __eeprom_write_16(unsigned short addr_eep,unsigned short data)
  13. {
  14.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);   
  15.   FLASH_Unlock(FLASH_MEMTYPE_DATA);
  16.    
  17.   FLASH_ProgramByte(addr_eep,   data/256);  
  18.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  19.    
  20.   FLASH_ProgramByte(addr_eep+1, data%256);
  21.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  22.    
  23.   FLASH_Lock(FLASH_MEMTYPE_DATA);   
  24. }

  25. void __eeprom_write_32(unsigned short addr_eep,unsigned long data)
  26. {
  27.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);   
  28.   FLASH_Unlock(FLASH_MEMTYPE_DATA);
  29.    
  30.   FLASH_ProgramByte(addr_eep,   (unsigned char)(data>>24));  
  31.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  32.    
  33.   FLASH_ProgramByte(addr_eep+1, (unsigned char)(data>>16));
  34.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  35.    
  36.   FLASH_ProgramByte(addr_eep+2,   (unsigned char)(data>>8));  
  37.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  38.    
  39.   FLASH_ProgramByte(addr_eep+3, (unsigned char)(data>>0));
  40.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
  41.    
  42.   FLASH_Lock(FLASH_MEMTYPE_DATA);   
  43. }


  44. void __eeprom_write_many(unsigned short addr_eep,unsigned short size,unsigned short dummy,unsigned short addr_ram)
  45. {
  46.    
  47.   FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);   
  48.   FLASH_Unlock(FLASH_MEMTYPE_DATA);
  49.    
  50.   for(unsigned short i=0;i<size;i++)
  51.   {
  52.      FLASH_ProgramByte(addr_eep+i,   *((unsigned char *)(addr_ram)+i));  
  53.      FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);  
  54.   }
  55.    
  56.   FLASH_Lock(FLASH_MEMTYPE_DATA);   
  57. }
  1. volatile __eeprom __no_init char  eep_u8;
  2. volatile __eeprom __no_init short eep_u16;
  3. volatile __eeprom __no_init long  eep_u32;

  4. void main( void )
  5. {
  6.   eep_u8=123;
  7.   eep_u16=12345;
  8.   eep_u32=123456789;
  9.      
  10.   while(1);
  11. }
上官金虹 发表于 2011-8-8 21:31 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:数显ESR电容等效内阻测量仪 http://cn.digit-esr.com

241

主题

1609

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部