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这个数据。
Megalayer 商家在之前也有记录过,商家开始只有提供香港站群服务器和独立服务器,后来也有增加到美国独立服务器,以及前几天也有介绍到有增加香港VPS主机。对于香港服务器之前有过评测(Megalayer香港服务器配置一览及E3-1230 8GB服务器评测记录),这里申请到一台美国独立服务器,所以也准备简单的评测记录。目前市场上我们看到很多商家提供VPS或者云服务器基本上没有什么特别的,但是独立服...
racknerd怎么样?racknerd商家最近促销三款美国便宜vps,最低只需要9.49美元,可以选择美国圣何塞、西雅图、纽约和芝加哥机房。RackNerd是一家成立于2019年的美国高性价比服务器商家,主要从事美国和荷兰数据中心的便宜vps、独立服务器销售!支持中文工单、支持支付宝和微信以及PayPal付款购买!点击直达:racknerd官方网站INTEL系列可选机房:加利福尼亚州圣何塞、芝加...
傲游主机商我们可能很多人并不陌生,实际上这个商家早年也就是个人主机商,传说是有几个个人投资创办的,不过能坚持到现在也算不错,毕竟有早年的用户积累正常情况上还是能延续的。如果是新服务商这几年确实不是特别容易,问到几个老牌的个人服务商很多都是早年的用户积累客户群。傲游主机目前有提供XEN和KVM架构的云服务器,不少还是亚洲CN2优化节点,目前数据中心包括中国香港、韩国、德国、荷兰和美国等多个地区的CN...