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