对于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)
{
;
}
}
上一篇:提高stm32f103c8t6的PWM精度
下一篇:STM8驱动HX711
推荐阅读最新更新时间:2024-11-05 20:20
设计资源 培训 开发板 精华推荐
- 树莓派-开机重启按键
- LT1506CS8-3.3 5V 至 3.3V 降压转换器的典型应用电路
- TDA8559T低压立体声耳机放大器典型(改进型单端缓冲无喇叭电容)应用
- LTC7130EY 高效率、双相极低 DCR 检测 1.2V/40A 降压电源的典型应用电路
- 随身信息牌
- 立创·梁山派-交通灯扩展板
- KIT908-5643EVM: 面向MPC5643L和MC33908 SBC的评估系统
- 使用 Analog Devices 的 LTC2627CDE-1 的参考设计
- DC2116A-B,用于 LTC4233 10A 保证 SOA 热插拔控制器的演示板
- LTC1261CS8-4 -1.24V 发生器的典型应用电路,用于 4mA-20mA 到 0V-5V 的转换