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中的值类型也改变了
但不能简化为U32GPIOx而简化为*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这个数据。
百纵科技:美国高防服务器,洛杉矶C3机房 独家接入zenlayer清洗 带金盾硬防,CPU全系列E52670、E52680v3 DDR4内存 三星固态盘阵列!带宽接入了cn2/bgp线路,速度快,无需备案,非常适合国内外用户群体的外贸、搭建网站等用途。C3机房,双程CN2线路,默认200G高防,3+1(高防IP),不限流量,季付送带宽美国洛杉矶C3机房套餐处理器内存硬盘IP数带宽线路防御价格/月套...
WordPress经典外贸企业建站主题,经典配色扁平化简约设计+跨屏自适应移动端设备,特色外贸企业建站功能模块+在线Inquiry询单功能,更有利于Google等英文搜索优化和站点收录。采用标准的HTML5+CSS3语言开发,兼容当下的各种主流浏览器: IE 6+(以及类似360、遨游等基于IE内核的)、Firefox、Google Chrome、Safari、Opera等;同时支持移动终端的常用...
柚子互联官网商家介绍柚子互联(www.19vps.cn)本次给大家带来了盛夏促销活动,本次推出的活动是湖北十堰高防产品,这次老板也人狠话不多丢了一个6.5折优惠券而且还是续费同价,稳撸。喜欢的朋友可以看看下面的活动详情介绍,自从站长这么久以来柚子互联从19年开始算是老商家了。六五折优惠码:6kfUGl07活动截止时间:2021年9月30日客服QQ:207781983本次仅推荐部分套餐,更多套餐可进...