STM32快速启动。 第2部分HAL上的Hello World,在Atollic TrueSTUDIO中进行调试

上一次我们掌握了使用STM CubeMX创建新项目的过程,第一部分可以在这里找到

对于那些懒得重新阅读的人来说,所有的最终结果都是空项目已成功组装。



在这一部分中,我们将在HAL上编写最简单的Hello World示例,了解如何运行和使用调试器,让我们找出程序吃了多少内存,这部分将用HAL编写。

我们将最后一部分中初始化的空项目作为基础。

为了使LED闪烁-我们需要遵循以下算法:

  1. 将状态反转设置为微控制器分支上的当前状态。 也就是说,有0-设置1,有1-设置0,依此类推。
  2. 等待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”

是很多还是一点?

只能在本文的以下部分中有把握地回答这个问题。

原始文章一如既往地在我的博客上

Source: https://habr.com/ru/post/zh-CN481436/


All Articles