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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版