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

stm32 flash问题

[复制链接]
fjsadkj 提问时间:2016-3-24 17:24 /
  下图是stm32中对flash写入一个字的库函数,其中再给用u32表示的地址address赋值时,用(_IO uint16_t*)将address强制转换成了一个16位数的地址,这里很不理解为什么要转成16位的。实验改成32位后不可写入flash。
  例如:一个0xabcd1234的地址用(_IO uint16_t*)强转下就变成了0x1234……很不理解为什么要丢弃地址的4个高位才能操作。库后面的地址加2数据右移16位都很好理解,但是为什么要把一个u32表示的地址强转成u16表示后,才能对地址的内容进行操作.........很不理解,望知道的大神指点一二,纠结很久了T_T。
  

address定义是32位的

address定义是32位的

在对address指向的位置赋值时却将address转成了16位

在对address指向的位置赋值时却将address转成了16位
收藏 评论3 发布时间:2016-3-24 17:24

举报

3个回答
fjsadkj 回答时间:2016-3-24 21:13:10
没人能告诉下吗
xmshao 回答时间:2016-3-24 23:24:17
用(_IO uint16_t*)将address强制转换成了一个16位数的地址,这里很不理解为什么要转成16位的。实验改成32位后不可写入flash。
===>应该说 (_IO uint16_t*)address 将Address强制转换为一个指针,该指针指向的数据为 uint16_t,并非address转成16位了。这是C语言要了解的。
另外,你如果把改写为(_IO uint32_t*)address 写入失败是正常的,因为有些STM32芯片只支持半字编程,比如STM32F1. 有的支持半字、字等,要具体看芯片FLASH PROGRAMMING MANUAL. 这是STM32手册要了解的。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

fjsadkj 回答时间:2016-3-25 10:52:58
xmshao 发表于 2016-3-24 23:24
用(_IO uint16_t*)将address强制转换成了一个16位数的地址,这里很不理解为什么要转成16位的。实验改成32 ...

一语惊醒,谢谢了,嗯C语言还不够扎实

所属标签

相似问题

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