zoukankan      html  css  js  c++  java
  • STM8 EEPROM心得

    对于STM8来说,其内部的EEPROM确实是个不错的东西,而且STM8S103/105价格已经非常便宜了,当然也可以用STM8S003/005代替,而且价格更便宜,大概在,1.2/2.0元左右,比103/105的便宜1元左右,而且有网友说,其实这两个系列的晶圆完全是一样的(这个是秘密哦),至于ST为什么要这样做,我们就不去猜了,大家应该都知道。

           对于EEPROM的读写时间比较长,特别是写入的时间,都是在ms级的,想必大家都知道。但是对于单片机内置EEPROM来说,由于其内部特性,导致单片 机在操作EEPROM时,不能产生中断,当然这个问题一般来说是没有问题的。但是像有数码管扫描的产品来说,这个就是问题了,一般来说,3位数码管扫描周 期为18ms是没有问题的,但大于这个时间,就有闪烁的感觉了,所以,对于3位数码管来说,没有显示的时间大概为6ms,而我们从STM8芯片手册上得到 是典型的EEPROM操作时间为6.6ms,所以,显示3位数码管就比较危险了,如果是4位,或者更多,那就更麻烦了。

          对于实验确实可以获取EEPROM的操作时间大概是2.5ms每字节,为此,如果在时间限制比较短的地方,我们可以在数码管点亮后的空闲时间去显示数 据,但每次只能是一字节数据,故要解决这个问题,最好建立个显示缓冲,每次在显示空闲时间去看缓冲中有无数据,如果有,我们就存储,直到存储完整为止。但 是我们还发现一个问题,如果用EEPROM的块操作,实际上,消耗的时间和用操作一字节是一样的。所以,我们也可以用每次操作一块的方式实现EEPROM 的操作,从而实现,大量数据的存储。

    下面我们简单说说,如何实现块操作:

        STM8的库函数中已经提供了块操作函数FLASH_ProgramBlock(),但是要进行块操作,还必须进行一系列的配置,否则,程序代码会死在这个函数里边的。


        1. 修改stm8s_conf.h的注射,让#include "stm8s_flash.h"得以编译

        2.修改stm8s.h的注射,让使Flash功能能够从RAM中运行

    #if !defined (RAM_EXECUTION)
        #define RAM_EXECUTION  (1)                                                  // 块写入时,必须打开这里的注射
    #endif /* RAM_EXECUTION */


       3.修改完成后,将产生不少警告,消除的方法,暂时还没有找到,但不影响代码的运行。

    /**************************************************************************************
    * FunctionName   : EEPWirteBlock()
    * Description    : 块写入
    * EntryParameter : None
    * ReturnValue    : None
    **************************************************************************************/
    void EEPWirteBlock(u16 blockNum, u8 *pDat)
    {
        //u8 tmpBuf[FLASH_BLOCK_SIZE] = {0};
    
        FLASH_EraseBlock(blockNum, FLASH_MEMTYPE_DATA);
        while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
        {
            ;
        }
        
        FLASH_ProgramBlock(blockNum, FLASH_MEMTYPE_DATA, FLASH_PROGRAMMODE_FAST, pDat);
        while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
        {
            ;
        }
    }
  • 相关阅读:
    从yield关键字看IEnumerable和Collection的区别
    弹出框Fancybox使用详解
    几个不错的JQuery UI框架
    解决 IE6 position:fixed 固定定位问题
    autocomplete 应用(搜索提示框)
    HTML5 基础
    Cookie原理
    escape()、encodeURI()、encodeURIComponent()区别详解
    顶回Top
    移植mavlink协议到STM32详细教程
  • 原文地址:https://www.cnblogs.com/alanfeng/p/5055105.html
Copyright © 2011-2022 走看看