OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 186|回复: 2

请问STM32H562的FLASH写入问题

[复制链接]

4

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2021-4-3
在线时间
11 小时
发表于 6 天前 | 显示全部楼层 |阅读模式
1金钱
这是原子的代码,这个地方不明白,请教!!! qw1.png

回复

使用道具 举报

11

主题

2208

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5663
金钱
5663
注册时间
2015-1-10
在线时间
703 小时
发表于 5 天前 | 显示全部楼层
字节,字,双字分别是多少位?
回复

使用道具 举报

0

主题

114

帖子

0

精华

高级会员

Rank: 4

积分
592
金钱
592
注册时间
2026-1-29
在线时间
41 小时
发表于 5 天前 | 显示全部楼层
这样写的原因:
1. 写地址 "waddr += 4;" 的原因
STM32内部Flash是按字节寻址的,1个WORD(32位/4字节)数据占用4个字节的存储空间,因此每写入一个WORD,地址需要向后偏移4字节,才能写入下一个WORD,所以每次自增4。
2. 缓冲区地址 "(uint32t)&pbuf[i]" i4的原因
这和C语言数组的寻址规则有关:
- 数组"pbuf"如果是"uint32t"类型的数组,"pbuf[i]"本身就已经等价于"(pbuf + i4)"(编译器会自动根据数组元素类型计算偏移,每个uint32t元素占4字节)。
- 代码这里直接写"&pbuf[i]"取地址是正确写法,它本身已经得到了第i个WORD元素的正确缓冲区地址,不需要手动乘4。
如果"pbuf"是uint8t类型的字节数组,才需要手动"i*4"来偏移到第i个WORD的起始位置,这是适配不同数组类型的写法。
简单总结这个写法的逻辑:一次写入4个WORD,每个WORD占4字节,所以目标Flash地址每次+4;缓冲区地址直接通过数组下标取值就可以得到对应位置的地址,符合C语言的数组寻址规则。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-8-15 07:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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