指针指针(u32指针)GPIOx简介

altools u32  时间:2021-01-22  阅读:()

typedef struct

{

__IO uint32_t CRL;

__IO uint32_t CRH;

__IO uint32_t IDR;

__IO uint32_t ODR;

__IO uint32_t BS RR;

__IO uint32_t BRR;

__IO uint32_t LCKR;

}GPIO_TypeDef;

GPIO_TypeDef是一个结构体定义,里面定义了控制端口的几个寄存器

#define PERIPH_BASE ((uint32_t)0x40000000)

#define APB2PERIPH_BASE (PERIPH_BASE+0x10000)

#define GPIOA_BASE (APB2PERIPH_BASE+0x0800)

可以看出 GP IOA_BASE其实就是一个地址偏移量是一个U32类型的常量说到底就是一个地址

#define GPIOA ((GPIO_TypeDef*)GPIOA_BASE)

注 GPIOA就是GPIO_TypeDef类型的指针了,这样子就可以直接通过GPIOA这个地址来访问

其中的寄存器O DR,B RR之类

GPIO_DeInit GP IOA 

STM32中的源程序

/***********************************************************************

********

*函数名称:GP IO_De Init

*功能描述:将GPIO部件的寄存器复位为默认值

*输入参数:GPIOx x可为A到G来选择特定的GPIO设备

*输出参数:无

*返回参数:无

************************************************************************

*******/void GPIO_DeInit(GPIO_TypeDef*GPIOx)

{

/*Check the parameters [检查参数]*/ass ert_param(IS_GPIO_ALL_PERIPH(GPIOx));sw itc h(*(u32*)&GP IO x)

{case GPIOA_BASE:

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,DISABLE);b re ak;case GPIOB_BASE:

RCC_APB2PeriphResetCmd(RCC_APB2P eriph_GPIOB,ENABLE);

RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,DISABLE);b re ak;

. . . . . .

}

}

有人说

(*(uint32_t*)&GPIOx)获得的值就是GPIOx本身的值,只不过类型变了而已可以简化为(U32)GPIOx,

这样也可以获得(*(uint32_t*)&GP IOx)的效果 即(*(uint32_t*)&GPIO x)

= (U32)GPIO x 但是,

为什么要这样子做,我觉得是可读性问题, (U32)GPIOx是可以获得同样的结果 但是却不合理,让人觉

得无厘头; (*(uint32_t*)&GP IOx)的运算虽然兜来兜去,但是却是符合语法,跟逻辑的.无非最核心的

部分是获得一个指针的指针,然后对这个指针的指针取值,获得最原始那个指针。但是我觉得——这里GPIOx是个指针 (*(uint32_t*)&GP IOx)获得的值是指针GPIOx中的值类型也改变了

但不能简化为U32GPIOx而简化为*GPIOx好像更合适。

因为有#define GPIOA ((GPIO_TypeDef*)GPIOA_BASE),并且调用GPIO_De Init(GPIOA)后指针GPIOx

所指的值就为0x40010800假设指针变量GPIOx的地址为0x20000000那么&GPIOx就是取GPIOx的地址

0x20000000 (u32*)&GPIOx就是将0x200000000存的数据强制转化为u32位类型的数据 * (u32*)&GPIOx就

能得到地址里0x200000000存的0x40010800这个数据。

特网云(198元/月),高质量云虚拟主机低至0.16元/天,裸金属服务器仅需10.5元/天

特网云为您提供高速、稳定、安全、弹性的云计算服务计算、存储、监控、安全,完善的云产品满足您的一切所需,深耕云计算领域10余年;我们拥有前沿的核心技术,始终致力于为政府机构、企业组织和个人开发者提供稳定、安全、可靠、高性价比的云计算产品与服务。官方网站:https://www.56dr.com/ 10年老品牌 值得信赖 有需要的请联系======================特网云推出多IP云主机...

Hostiger 16G大内存特价VPS:伊斯坦布尔机房,1核50G SSD硬盘200Mbps带宽不限流量$59/年

国外主机测评昨天接到Hostigger(现Hostiger)商家邮件推送,称其又推出了一款特价大内存VPS,机房位于土耳其的亚欧交界城市伊斯坦布尔,核50G SSD硬盘200Mbps带宽不限月流量只要$59/年。 最近一次分享的促销信息还是5月底,当时商家推出的是同机房同配置的大内存VPS,价格是$59.99/年,不过内存只有10G,虽然同样是大内存,但想必这次商家给出16G,价格却是$59/年,...

美国G口/香港CTG/美国T级超防云/湖北高防云服务器物理机促销活动 六一云

六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,宿母鸡等,另外也诚招代理欢迎咨询。官网www.61cloud.net最新直销劲爆...

altools u32为你推荐
金士顿4g内存条金士顿DDR3 4G的内存有什么型号?腾讯空间首页qq空间主页怎么每个都看不见骁龙750g和765g哪个好骁龙765G,这里的g是什么意思?游戏加速器哪个好大家玩游戏用的都是什么加速器啊,哪个效果最好石英表和机械表哪个好手表是电子手表好还是机械手表好?录音软件哪个好什么录音软件最好用ps软件哪个好什么PS软件好核芯显卡与独立显卡哪个好核芯显卡和独立显卡有什么区别?最好的是哪个?尼康和佳能单反哪个好佳能和尼康哪个好播放器哪个好安卓手机视频播放器哪个好点
万网虚拟主机 cc域名 免费cn域名注册 新网域名解析 购买域名和空间 bluevm 好看的桌面背景大图 长沙服务器 京东商城0元抢购 有益网络 合租空间 phpmyadmin配置 cn3 美国在线代理服务器 福建铁通 免费cdn 超级服务器 starry 上海电信测速 帽子云排名 更多