目录
1. HAL库的整体结构
宏观上来看HAL库从底层到上层可由下图来呈现:
从上述不难看出来HAL库主要用于操纵寄存器,芯片驱动以及功能驱动。
1.1 文件夹结构
以下为我基于H563板子创建的工程项目,每个文件夹都有不同的含义:
文件夹 | 功能 |
Core | 存放内核代码 |
Debug | 存放着与仿真器调试相关的文件 |
Drivers | 存放着HAL库和相关的驱动程序文件 |
icode(并未出现) | 存放着用户自建的板级硬件驱动程序 |
Middlewares(并未出现) | 存放着与“中间件”相关的驱动程序文件 |
USB_DEVICE(并未出现) | c存放着USB从设备的驱动程序文件 |
其中还有几个例如 .project表示cubeide工程的启动文件,.ioc为cubemx图形界面的启动文件,在此并未显示。
1.2 工程树结构
实际不难发现工程树结构与上述文件夹结构相同。各个部分下面将详细讲解
1) Core文件:里面包括Inc、Src、Startup三大部分,分别用来装.h文件、.C文件、以及会变启动文件。其中sys开头的这些文件主要是最底层的内核级文件。main.c为程序主函数。
2) Drivers
3)Debug
4)icode
建议:之后每次再添加新外设新功能时候,都在相应文件夹下建立 .c/.h文件。
2. HAL库的函数原理
2.1 单个功能的文件内容
这里可以看下面这篇大佬的文章:
GPIO相关函数解析:https://blog.csdn.net/weixin_44793491/article/details/107603084
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin(GPIOB, LED_BLUE_Pin);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
TogglePin为翻转电平在这里,LED_BLUE_Pin为蓝灯所在的引脚,即执行该语句红灯应该闪烁。
while (1)
{
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
2.2 函数调用层级
选中变量名等右键选择open Declaration即可跳转声明处。或者快捷键chontrol+点击也可以