单片机/MCUwilliam hill官网
直播中

s

7年用户 113经验值
擅长:可编程逻辑
私信 关注
[问答]

C语言问题?

以下一段代码是关于32的但是我的问题是关于C语言的:GPIO_TypeDef* GPIOx是一个结构体类型的指针,可为什么在往void GPIO_Init()函数里面写数据时(例如是写 GPIO_Init(GPIOB, &GPIO_InitStructure)),那么为什么第一个参数是写成  GPIOB  而不是写成  &GPIOB   呢?(求赐教,谢谢)


void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
  uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
  uint32_t tmpreg = 0x00, pinmask = 0x00;
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
  assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));  
  .................
}

回帖(4)

许锦海

2017-7-30 16:25:29

最佳答案

你看一下GPIOB的define:
“#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)”(这个是我用的一个32的固件库里的头文件stm32f10x.h定义)
GPIOB已经指向GPIOB_BASE,是一个地址,不需要再用取地址了。
举报

blust

2017-7-31 08:23:22
我的理解是这样的,GPIOB是底层库里面定义的一个指向B口寄存器的指针,所以就不用再次取址了。不知道对不对
举报

654524

2017-8-1 09:51:33
GPIOB本身就被定义为一个地址了,并且定义为GPIO_TypeDef *类型的指针。也就是从GPIOB地址开始往后一块内存单元里被结构化为GPIO_TypeDef 类型的数据。
举报

愚塘霸主

2017-10-14 14:17:51
其实寄存器对我们使用而言就是普通的指针变量,对于单片机而言,他不懂什么是强制类型转换,这些都是编译层次上的。看看你寄存器的定义就明白了。或者仿真的时候看看你的memory映射。现在都讲究模块化设计,所以对这些io操作归类。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分