你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STVD使用STM8S005K6T6C内部data eeprom进行数据写入操作问题,请大佬帮忙看下

[复制链接]
小王字 提问时间:2025-5-20 08:46 / 未解决

1.STVD使用STM8S005K6T6C内部data eeprom进行数据写入操作,使用st-link V2(B2013 21)进行仿真调试,发现寄存器FLASH_CR2写入1是值仍为0x00,发现无法写入值;对data eeprom进行MASS KEY后,发现FLASH_IAPSR变为0x4a,按手册应为DUL置位,但PUL也同步变为1;对FLASH_IAPSR的PUL,DUL进行清零无效,仍为0x4a;

2.PB0口配置上拉输入做按键电平检测,按键按下变为低电平,弹起后IO口通过万用表测试为高电平,确认硬件电路无问题,但PB_IDR读此IO一直为低电平;

收藏 评论2 发布时间:2025-5-20 08:46

举报

2个回答
butterflyspring 回答时间:11 小时前
1. 这个有例程可以参考的,按照例程应用即可。 网上也有很多成功的代码分享可以参照。
    stm8sfwlib2.31\STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\FLASH\FLASH_DataProgram

2. IO 读数建议仔细检查一下对应的顺序,包括寄存器观测的顺序,必要时可以换一块板对比验证一下。
小王字 回答时间:10 小时前

butterflyspring 发表于 2025-5-20 09:53</p>
<ol>
<li>这个有例程可以参考的,按照例程应用即可。 网上也有很多成功的代码分享可以参照。
stm8sfwlib2.31\ ...

FLASH->CR2|=(u8)0X40;//wpg set 1

FLASH->NCR2&=(u8)0XBF;//nwprg set 0,able word programing

do { FLASH_DUKR=0XAE; FLASH_DUKR=0X56; }while((!(FLASH->IAPSR&((u8)0X08)))&&(ee_write_time<10));//erase write-protection

ee_write_time=0;

for(write_times=0;write_times<4;write_times++) { ((u8 )(0X4000+write_times))= ((u8 )(data+write_times)); }

while((!(FLASH->IAPSR&((u8)0X04)))&&(ee_write_time<10));//write eeprom delay 100ms

FLASH->IAPSR &=(u8)0XF7;//Clear DUL flag bit,enter data write protection

FLASH->IAPSR &=(u8)0XFD;//Clear PUL flag bit,enter flash write protection (void)FLASH->IAPSR;

以上是EEPROM环节字写入,内存可以正确写入数据,但是调试时对应寄存器值异常如前文所述

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版