stm8s eeprom读写

2019-11-19来源: eefocus关键字:stm8s  eeprom读写  起始地址

stm8s有自带的eeprom,起始地址是0x4000,终止到哪看手册,因为我用的时候只写一个4字节数据,配置如下:


入参:eeprom偏移地址,写入的数据   


void eeprom_write(const unsigned char addr,unsigned long date)

{

   asm("sim");

   FLASH_CR1_FIX = 1;//编程时间固定为标准编程时间

   FLASH_CR2_WPRG = 1;//使能字编程

   FLASH_NCR2_NWPRG = 0;/使能字编程

   do

   { 

     FLASH_DUKR = 0xAE;

     FLASH_DUKR = 0x56;

   }

   while(!(FLASH_IAPSR_DUL & 1));//等待解锁

   unsigned long *p = (unsigned long*)(0x4000 + addr);

   *p = date;

   //while(!FLASH_IAPSR_EOP & 1);//等待写完成//加上掉电写入不准

   FLASH_IAPSR_DUL = 0;//上锁

   asm("rim");


}


说明:while(!FLASH_IAPSR_EOP & 1);被我注释掉了,原因如注释所写的那样,我也不知道为什么。然后写完之后记得上锁,要不然会不准。另外就是这里中文手册又出错了,就是do while语句中的那两句给FLASH_DUKR写入密钥,中文手册写反了。


读eeprom就比较简单了,代码如下:


入参:eeprom地址偏移量                             出参:相应地址的值*/

unsigned long eeprom_read(const unsigned char addr)

{

   return *((unsigned long*)(0x4000 + addr));

}


关键字:stm8s  eeprom读写  起始地址 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic480471.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM8做IAP(Bootloader)时在RAM中执行Flash块擦写函数问题
下一篇:STM8S EEPROM 操作

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm8s 定时器2测量脉冲宽度(单位 us)
void Init_Timer2(void){  GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_IN_PU_NO_IT);//输入 无中断  TIM2_TimeBaseInit(TIM2_PRESCALER_16,65536-1);       //16分频, 65ms 溢出  TIM2_Cmd(ENABLE);  }uint16_t TIM2_GetCapture(void){  /* Get the Capture  Register value */  uint16_t tmpccr = 0;&n
发表于 2019-12-02
STM8S003F3使用总结——串口
STM8作为低成本芯片一直受到广大用户青睐,最近一个项目使用了STM8S003F3P6这款芯片,主要实现的功能就是串口接收指令控制PWM输出。这里对这款芯片使用过程中遇到的问题进行总结。编译环境:IAR for STM8 3.10.2库版本:V2.2.01.STM8S003F3与STM8S103F3差异除了以上差异,两款芯片可pin-to-pin兼容,片内外设资源一致。2.串口通信STM8S003F不支持DMA,因此使用中断方式接收。中断向量表如下:typedef enum { UART1_IT_TXE        = (uint16_t)0x0277, /*!< Transmit
发表于 2019-11-30
STM8S003F3使用总结——串口
stm8s003f3使用杂记
转换模式,怎么从缓存区读回各路转换结果?用GETBUFFERVALUE(直接写寄存器组的序号就行)函数。之前要调用相应的配置函数:ADC1_DataBufferCmd(FunctionalState NewState);参考RM0016——page366中关于数据缓存寄存器的介绍。此时要用DMA传送结果。8:为什么已经修改了stm8s.h文件,ADC1部分的定义还是会在编译时提示没有定义呢?甚至把那部分的定义放到主函数里也不行呢。这种无厘头的问题------重新建个工程就行了。>我*?!!!事实再一次证明,新建工程也不管用啊!!!conf没改好吧??(我已经放弃了,包含了iostm8s003f3的源文件然后用寄存器写的
发表于 2019-11-30
STM8s003(也包括103)使用笔记
;     FLASH_Lock(FLASH_MEMTYPE_DATA);编程4、对于awu唤醒单元定时3s的问题时基单元做成1s,然后加入3个halt();即可5、测量功耗时,电流过大的原因首先确r认是最小单元,然后需要确认仿真器已经拔下来了6、对于adc只能转换一次的情况:进入休眠模式的话,需要重新使能一次ADC才能使用。
发表于 2019-11-30
STM8s003(也包括103)使用笔记
stm8s003使用心得_时钟(CLK)
本文介绍stm8s003MCU的时钟(CLK)。前几天直接使用官方的库开发的程序,直接利用了库函数进行的时钟及TIMER的配置,其中有一些不太明白的地方,今天又仔细看了datasheet,有了更多的了解。由于产品要控制成本,我选择使用的是MCU的内部时钟HSI 16MHz RC。通过下图1,可以更直观的了解MCU的整个时钟情况。图1通过CLK_ICKR寄存器配置选择HSI,再通过HSIDIV进行HSI的预分频。通过Master Clock Switch进行fmaster的输出,而这个fmaster就是Timers、I2C、SPI等等外设的时钟源。CPU的时钟源是fmaster通过cpudiv进行了预分频得到,驱动cpu
发表于 2019-11-30
stm8s003使用心得_时钟(CLK)
STM8S003F3 使用内置的Data EEPROM的操作接口
操作系统:win10 64bit平台:STM8S003F3 IDE: IAR For STM8/* Data EEPROM 操作初始化 */void Init_Flash(void){  FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);} /************************************************函数名称 : EE_FLASH_WriteNByte功    能 : 写EEPROM参    数 : pBuffer ----- 写入数据区首地址   
发表于 2019-11-30
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved