指针指针(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这个数据。

蓝速数据(58/年)秒杀服务器独立1核2G 1M

蓝速数据金秋上云季2G58/年怎么样?蓝速数据物理机拼团0元购劲爆?蓝速数据服务器秒杀爆产品好不好?蓝速数据是广州五联科技信息有限公司旗下品牌云计算平台、采用国内首选Zkeys公有云建设多种开通方式、具有IDC、ISP从业资格证IDC运营商新老用户值得信赖的商家。我司主要从事内地的枣庄、宿迁、深圳、绍兴、成都(市、县)。待开放地区:北京、广州、十堰、西安、镇江(市、县)。等地区数据中心业务,均KV...

Webhosting24:€15/年-AMD Ryzen/512MB/10GB/2TB/纽约&日本&新加坡等机房

Webhosting24是一家始于2001年的意大利商家,提供的产品包括虚拟主机、VPS、独立服务器等,可选数机房包括美国洛杉矶、迈阿密、纽约、德国慕尼黑、日本、新加坡、澳大利亚悉尼等。商家VPS主机采用AMD Ryzen 9 5950X CPU,NVMe磁盘,基于KVM架构,德国机房不限制流量,网站采用欧元计费,最低年付15欧元起。这里以美国机房为例,分享几款套餐配置信息。CPU:1core内存...

Gcore(75折)迈阿密E5-2623v4 CPU独立服务器

部落分享过多次G-core(gcorelabs)的产品及评测信息,以VPS主机为主,距离上一次分享商家的独立服务器还在2年多前,本月初商家针对迈阿密机房限定E5-2623v4 CPU的独立服务器推出75折优惠码,活动将在9月30日到期,这里再分享下。G-core(gcorelabs)是一家总部位于卢森堡的国外主机商,主要提供基于KVM架构的VPS主机和独立服务器租用等,数据中心包括俄罗斯、美国、日...

altools u32为你推荐
唐人社美国10次啦美国的10号码是我们中国多少码?qq空间首页QQ空间主页怎么弄?天玑1000plus和骁龙865哪个好CPU型号 MediaTek MT6853 5G,和天玑1000+哪个好?集成显卡和独立显卡哪个好集成显卡和独立显卡那个好?车险哪个好私家车买什么保险好红茶和绿茶哪个好红茶和绿茶,哪个好?红茶和绿茶哪个好红茶和绿茶 那个更好yy空间登录怎么进入YY音乐空间google广告申请怎样才能申请google广告360云查杀360出了个云查杀?啥叫云啊
郑州虚拟主机 主机优惠码 GGC 最好看的qq空间 华为4核 服务器维护方案 速度云 世界测速 电信虚拟主机 33456 卡巴斯基是免费的吗 空间登录首页 台湾google 阿里云官方网站 什么是web服务器 中国联通宽带测速 黑科云 小夜博客 webmin e-mail 更多