如何创建用于在 stm32f4xx 平台上配置已定义端口的功能?

How to create a function for configuring defined ports on a stm32f4xx platform?

我正在使用 stm32f4xxHAL 库 并且我配置了一些这样的端口:

  #define Led1 GPIO_PIN_1
  #define Led1_Port GPIOC

  #define Led2 GPIO_PIN_2
  #define Led2_PoRT GPIOE

  GPIO_InitStruct.Pin = Led1;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(Led1_Port, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = Led2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(Led2_Port, &GPIO_InitStruct);

我想将上面的代码(当然不是 defines)移动到一个可以调用的函数,并按照与上面完全相同的方式设置端口:

  #define Led1 GPIO_PIN_1
  #define Led1_Port GPIOC

  #define Led2 GPIO_PIN_2
  #define Led2_PoRT GPIOE

  void GPIOConfig(*Pin,GPIO_TypeDef *Port)
  {
    GPIO_InitStruct.Pin = &Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(&Port, &GPIO_InitStruct);
  }

  // Calling the configuration function
  GPIOConfig(Led1,Led1_Port);
  GPIOConfig(Led2,Led2_Port);

由于某种原因它不起作用。

我认为您的 init 函数应该更像这样,因为 Pin 只是一个数字而不是指针。此外,您还将 Port 作为指针传递,这是您要传递给 HAL_GPIO_Init 的内容(而不是指针的地址):

void GPIOConfig(uint32_t Pin,GPIO_TypeDef *Port)
{
   GPIO_InitStruct.Pin = Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(Port, &GPIO_InitStruct);
}

然后应该这样调用:

GPIOConfig( Led1, Led1_Port );