野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8367|回复: 3

新手想问个寄存器基础问题,求解答

[复制链接]
发表于 2022-3-17 15:03:30 | 显示全部楼层 |阅读模式
本帖最后由 高手不多 于 2022-3-17 15:04 编辑



原子哥这里说16个IO口全设为1,第一个是0xFFFF,对应16个1,可是后面怎么变成0xFF,8个1了呢。这样还能达到16个IO口设1的目的吗

回复

使用道具 举报

发表于 2022-3-18 09:47:24 | 显示全部楼层
这个可能又根据原理图来讲解了吧,用低八位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 10:21:56 | 显示全部楼层
我发现图片好像没发出来
底下是原文



代码清单:寄存器-1 通过绝对地址访问内存单元
// GPIOH 端口全部输出 高电平
*(unsigned int*)(0x4002 1C14) = 0xFFFF;
0x4002 1C14在我们看来是GPIOH端口ODR的地址,但是在编译器看来,这只是一个普通的变量,是一个立即数, 要想让编译器也认为是指针,我们得进行强制类型转换,把它转换成指针,即(unsigned int *)0x4002 1C14,然后再对这个指针进行 * 操作。

刚刚我们说了,通过绝对地址访问内存单元不好记忆且容易出错,我们可以通过寄存器的方式来操作,具体见 代码清单:寄存器-2 。

代码清单:寄存器-2 通过寄存器别名方式访问内存单元
// GPIOH 端口全部输出 高电平
#define GPIOH_ODR                   (unsigned int*)(GPIOH_BASE+0x14)
* GPIOH_ODR = 0xFF;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 10:22:49 | 显示全部楼层
LF_laffy 发表于 2022-3-18 09:47
这个可能又根据原理图来讲解了吧,用低八位

是这样啊
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 05:53 , Processed in 0.038394 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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