上一次我们掌握了使用STM CubeMX创建新项目的过程,第一部分可以在
这里找到
。对于那些懒得重新阅读的人来说,所有的最终结果都是空项目已成功组装。

在这一部分中,我们将在HAL上编写最简单的Hello World示例,了解如何运行和使用调试器,让我们找出程序吃了多少内存,这部分将用HAL编写。
我们将最后一部分中初始化的空项目作为基础。
为了使LED闪烁-我们需要遵循以下算法:
- 将状态反转设置为微控制器分支上的当前状态。 也就是说,有0-设置1,有1-设置0,依此类推。
- 等待N毫秒数,然后返回到步骤1。
为了满足第一点,我们需要告诉编译器LED连接到哪个引脚和端口以及哪个功能反转其状态。
首先,我们找到连接LED的位置。
在ST公司好心地写给我们的介绍性评论之后的main.c文件中,有一行用于连接头文件main.h。

右键单击此行,找到“打开声明”项

通过单击它,我们将移至main.h文件
在哪里可以找到我们声明的引脚和端口名称。

还记得在第一部分中,在初始化PC13 LED的输出时,我们填写了“用户标签”字段并在其中输入CLOCK_LED吗?
在生成项目时,STM32CubeMX考虑了我们的愿望,现在我们可以通过更易懂的CLOCK_LED_Pin和CLOCK_LED_GPIO_Port来访问我们的LED,而不是抽象的GPIO_PIN_13和GPIOC。
有了这个-我们将管理的-弄清楚了。
现在,我们正在寻找可以将GPIO状态更改为相反状态的函数。
为此,请在屏幕左侧的项目树中找到文件:
Drivers -> STM32F1xx_HAL_Driver -> Inc -> stm32f1xx_hal_gpio.h
它有很多东西,但是我们需要对/ *导出的函数* /块中的函数进行描述
在那找到功能
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
这正是我们所需要的。

为了使LED持续闪烁,有必要将我们函数的调用放在主程序循环主体中的main中。
并且为了区分眨眼-之后使用HAL_Delay(500)函数添加一个延迟;
在这种情况下,延迟将为500ms。

顺便说一下,HAL_Delay函数也在
Drivers -> STM32F1xx_HAL_Driver -> Inc
仅在stm32f1xx_hal.h文件中
也就是说,要使LED闪烁-我们只需要编写2行代码即可。
如果我们做的一切正确,则可以尝试运行调试器,并查看程序的运行方式。


您可以使用F5和F6按钮浏览程序代码
同时,F6按钮仅在函数调用时执行,而F5按钮使您可以进入被调用的函数并查看内部发生了什么。

如果您不想在调试过程中遇到故障,那么唯一的建议就是关闭优化。 这是通过菜单项目->属性完成的
优化级别值必须设置为无(-O0)

停止调试后,控制器将再次重新启动代码并循环执行。
结果应该是这样的。

总结一下
使用HAL允许我们仅编写2行代码来实现此任务。
但是为了简化工作,有必要付出记忆

1.54 KB的RAM和4.69 KB的闪存
让我提醒您,优化已禁用,即“ -O0”
是很多还是一点?
只能在本文的以下部分中有把握地回答这个问题。
原始文章一如既往地在
我的博客上 。