STM32F103C8项目-我无法让HAL在自己的函数中工作

问题描述 投票:1回答:2

这对我来说很奇怪,我当然没想到在学习STM32CubeIDE的第一天就被完全迷住了。当天的首要任务是使机载LED闪烁,并带有

HAL_GPIO_TogglePin(GPIOC, LED1_Pin);
HAL_Delay(500);

通过New Project / pin配置和代码生成器,在main.c文件中提供的while循环内,此方法运行良好,但是当我使用HAL命令在循环内调用自己的函数时,它将停止工作。该代码循环并调用我的函数mainLoop(),但函数中的任何HAL命令均不执行任何操作。

为什么?我是否缺少某种必须传递的句柄或#include来扩展源文件中的HAL命令的范围,而不仅仅是main()本身?

      while (1)
      {
          HAL_GPIO_TogglePin(GPIOC, LED1_Pin);
          void mainLoop(void);
    //    HAL_Delay(500);         // works fine when uncommented
      }
    }   // end of main()

    void mainLoop(void)
    {
          HAL_Delay(200);         // this does nothing

}                             // no HAL commands actioned

是的,您说得很对,并为此感谢。我的愚蠢问题是我实际上试图将mainLoop()放在另一个.cpp文件中的结果,该文件带有包含原型的相应.h头文件,并从main.c while循环中调用它。由于我对mainLoop链接器错误有未定义的引用,因此我将mainloop()移回main.c,然后尝试运行原型。 h!

因此,尽管我为简化问题进行了很多尝试,但我仍然无法通过其HAL命令驻留在另一个.cpp文件中来调用mainloop()函数。另外,尽管我还没有达到这一点,但是每个项目源文件中都可以使用HAL命令,还是需要#include一个特定的标头?

c stm32 hal
2个回答
2
投票

您应通过以下方式调用函数。

  while (1)
      {
          HAL_GPIO_TogglePin(GPIOC, LED1_Pin);
          mainLoop();
    //    HAL_Delay(500);         // works fine when uncommented
      }
    }   // end of main()

    void mainLoop(void)
    {
          HAL_Delay(200);         // this does nothing

}    

这不是调用函数的方法。


2
投票
void mainLoop(void);  //function declaration (prototype) needed as mainLoop is defined after the call

int main(void)
{
    while (1)
    {
        HAL_GPIO_TogglePin(GPIOC, LED1_Pin);
        mainLoop(); //call to the function
    }
}

void mainLoop(void)  // function definition
{
    HAL_Delay(200);         // this does nothing

}   

由于您的mainLoop调用在函数定义之前,因此您需要提供函数原型,以告知编译器参数接受函数以及函数返回什么。

然后您需要通过mainLoop()而不是void mainLoop()调用函数>

© www.soinside.com 2019 - 2024. All rights reserved.