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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103C8项目-我无法让HAL在自己的函数中工作相关的知识,希望对你有一定的参考价值。

这对我来说很奇怪,我当然没想到在学习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一个特定的标头?

答案

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

  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

    

这不是调用函数的方法。

另一答案
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()调用函数>

以上是关于STM32F103C8项目-我无法让HAL在自己的函数中工作的主要内容,如果未能解决你的问题,请参考以下文章

基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块

基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块

基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块

带有 STM32f103c8t6 Bluepill 和 CAN 总线的 HAL_CAN_ERROR_PARAM

基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距

基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距