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

时间:2017-01-25 12:01:15

标签: stm32 stm32f4discovery

我正在使用 stm32f4xx HAL库,我已经配置了一些像这样的端口:

  #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);

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

  #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);

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

1 个答案:

答案 0 :(得分:2)

我认为你的init函数应该更像这样,因为Pin只是一个数字而不是指针。此外,您还将Port in作为指针传递给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 );