C语言问题?

2019-07-15 10:03发布

以下一段代码是关于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));  
  .................
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
he07413
1楼-- · 2019-07-15 21:35
GPIOB本身就被定义为一个地址了,并且定义为GPIO_TypeDef *类型的指针。也就是从GPIOB地址开始往后一块内存单元里被结构化为GPIO_TypeDef 类型的数据。
愚塘霸主
2楼-- · 2019-07-16 01:23
其实寄存器对我们使用而言就是普通的指针变量,对于单片机而言,他不懂什么是强制类型转换,这些都是编译层次上的。看看你寄存器的定义就明白了。或者仿真的时候看看你的memory映射。现在都讲究模块化设计,所以对这些io操作归类。

一周热门 更多>