硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2218|回复: 20
收起左侧

[技术讨论] stm8的eeprom连续保存四五十个字节,导致数码会管闪烁?

  [复制链接]

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2021-8-14 16:55:35 | 显示全部楼层 |阅读模式
stm8s连续保存参数,有五六十个字节,会导致中断扫描的数码管闪烁几下,写的这么慢吗?有什么改进的办法?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2021-8-15 07:51:26 | 显示全部楼层
可以考虑没写一个字节,等待会再写下个
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-15 08:49:08 | 显示全部楼层
eric2013 发表于 2021-8-15 07:51
可以考虑没写一个字节,等待会再写下个

分时写入吧,stm8s有的芯片有RWW,我这个没有,应该是这个造成的吧。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2021-8-15 10:28:36 | 显示全部楼层
zhengwending 发表于 2021-8-15 08:49
分时写入吧,stm8s有的芯片有RWW,我这个没有,应该是这个造成的吧。

每次写一个,时间还快点。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-15 10:32:12 | 显示全部楼层
eric2013 发表于 2021-8-15 10:28
每次写一个,时间还快点。

每次写一个?现在就是写一个字节,会连着写四五十个字节;没明白版主说的写一个的意思。。。开始以为分时写入,比如每隔10ms写入一个;但仔细想这也很不好办,可能随时都要写入eeprom,还要设计队列;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2021-8-15 10:40:02 | 显示全部楼层
zhengwending 发表于 2021-8-15 10:32
每次写一个?现在就是写一个字节,会连着写四五十个字节;没明白版主说的写一个的意思。。。开始以为分时 ...

就是延迟写入,方便配合你的数码管扫描。

随时写入完全不用担心。所有字节操作完毕了再操作下次。EEPROM主要是用于参数存取,基本不当RAM那样频繁读写使用,所以完全不用担心这个问题。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-15 11:42:56 | 显示全部楼层
eric2013 发表于 2021-8-15 10:40
就是延迟写入,方便配合你的数码管扫描。

随时写入完全不用担心。所有字节操作完毕了再操作下次。EEPR ...

嗯 谢谢版主回复;我测试了写一个字节,就会有眼睛看到的微闪。用的8s903k3;但是看别人的产品参数也保存在eeprom里,就没有闪烁;我看手册说是一个字节写入6ms左右。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
发表于 2021-8-15 20:55:22 | 显示全部楼层
上操作系统,写一个,sleep,操作系统就干刷新数码管,然后回来,写第2个字节。
裸机,就用状态机
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-16 22:01:10 | 显示全部楼层
snakeemail 发表于 2021-8-15 20:55
上操作系统,写一个,sleep,操作系统就干刷新数码管,然后回来,写第2个字节。
裸机,就用状态机

哈哈  谢谢回复;这不是受很多限制才没用嘛;他这个是上操作系统也不行,是在写eeprom时,程序停止执行的;我数码管是放中断里扫描的,他就会闪。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-16 22:04:41 | 显示全部楼层
看了手册,想了想可以用块编程放在RAM中执行;但是这个函数一直执行写不进去。希望指点指点;没用库函数,但是从库函数修改而来的。调用里不执行,函数里设置断点进不去,但是使用库的话,就很顺利;空间大小原因 ,没使用库;
__ramfunc void FLASH_ProgramBlock(uint16_t BlockNum,uint8_t *Buffer)
{
    uint16_t Count = 0;

    FLASH_DUKR = 0xAE;           /* 解锁eerpom */
    FLASH_DUKR = 0x56;
   
    while((FLASH_IAPSR & MASK_FLASH_IAPSR_DUL) != MASK_FLASH_IAPSR_DUL);        /* 等待解锁完成 */

    /* Fast programming mode */
    FLASH_CR2 |= MASK_FLASH_CR2_FPRG;
    FLASH_NCR2 &= (uint8_t)(~MASK_FLASH_NCR2_NFPRG);

    /* Copy data bytes from RAM to FLASH memory */
    for (Count = 0; Count < 64; Count++)
    {
      *((__near uint8_t*) (uint16_t)0x4000 + Count) = ((uint8_t)(Buffer[Count]));
   
    }
   
    while((FLASH_IAPSR & MASK_FLASH_IAPSR_EOP) != MASK_FLASH_IAPSR_EOP);
    FLASH_IAPSR &= 0xF7;       /* 加锁 */
}
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-17 15:33:09 | 显示全部楼层
结贴;已找到合适的方法;用block操作。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2021-8-19 13:45:33 | 显示全部楼层
The read-while-write (RWW) feature is not available on the 4-8 Kbyte STM8S because data EEPROM and Flash program
memory are located in the same memory array.


楼主的是哪个型号
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-19 16:20:32 | 显示全部楼层
emwin 发表于 2021-8-19 13:45
楼主的是哪个型号

903k3这个型号
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-19 16:21:49 | 显示全部楼层
emwin 发表于 2021-8-19 13:45
楼主的是哪个型号

对,就是这个原因,在存eep的时候,是禁止中断什么的,手册也有说。写eep的时间太长了,肯定会影响数码管中断扫描的
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2021-8-27 16:09:10 | 显示全部楼层
换个解决思路,写eeprom的时候,先把数码管的扫描暂停,显示固定的符号。写完了,再回复扫描。 产品说明书在注释一下就好了。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-28 07:12:28 | 显示全部楼层
caicaptain2 发表于 2021-8-27 16:09
换个解决思路,写eeprom的时候,先把数码管的扫描暂停,显示固定的符号。写完了,再回复扫描。 产品说明书 ...

谢谢回复;嗯,客户不同意啊,他也不懂这东西,就说 别人的就没这问题,不行,必须解决;但是硬件什么的都不能换,已经做好了;
回复

使用道具 举报

8

主题

136

回帖

160

积分

初级会员

积分
160
发表于 2021-8-29 22:13:59 | 显示全部楼层
zhengwending 发表于 2021-8-28 07:12
谢谢回复;嗯,客户不同意啊,他也不懂这东西,就说 别人的就没这问题,不行,必须解决;但是硬件什么的 ...

代码放到RAM运行,之前用STM8时也是这样操作的,数码管就微微闪烁一下
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-8-30 08:42:57 | 显示全部楼层
caicaptain2 发表于 2021-8-27 16:09
换个解决思路,写eeprom的时候,先把数码管的扫描暂停,显示固定的符号。写完了,再回复扫描。 产品说明书 ...

有个问题啊,段码液晶,动态扫描模式,暂停的话, 显示会消失的;
回复

使用道具 举报

5

主题

30

回帖

45

积分

新手上路

积分
45
发表于 2021-9-1 18:10:24 | 显示全部楼层
zhengwending 发表于 2021-8-17 15:33
结贴;已找到合适的方法;用block操作。

老哥,可以具体分享一下你的做法吗?非常感谢
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-9-2 08:22:26 | 显示全部楼层
tcs_stm32 发表于 2021-8-29 22:13
代码放到RAM运行,之前用STM8时也是这样操作的,数码管就微微闪烁一下

谢谢回复,嗯!现在用的block操作,同时还放入RAM中,但也会有察觉到的闪烁
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-9-2 08:23:14 | 显示全部楼层
xdh873939316 发表于 2021-9-1 18:10
老哥,可以具体分享一下你的做法吗?非常感谢

可以啊,得看你哪点有疑问,遇到了什么样的问题。我才好说啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 19:26 , Processed in 0.228705 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表