当前位置: 首页 > news >正文

20-HAL库

一、STM32CUBEMX

1、HAL库

  HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。HAL库是基于一个非限制性的BSD许可协议(Berkeley Software Distribution)而发布的开源代码。 ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在ST公司的MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。  可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。

标准库

STM32F0 STM32F1 STM32F3 STM32F2 STM32F4 STM32L1系统芯片有标准库支持

STM32F7 STM32H7 STM32L0 STM32L4系统芯片无标准库支持

HAL库

STM32所系列芯片都有HAL库支持

ST提供库函数:标准库、LL库、HAL

2、软件安装步骤

1、安装并破解keil软件

2、双击安装HAL库:

Keil.STM32F4xx_DFP.2.14.0.pack:

https://download.csdn.net/download/m0_63622771/90861310

STM32全部系列最新HAL库下载地址

链接:百度网盘 请输入提取码

提取码:upoq

3、安装STM32CUBEMX,请参考博客:STM32CubeMX安装(全图文安装步骤,一步不落下)_stm32cubemx安装教程-CSDN博客

3、开发步骤

1、从芯片建立工程

下面是以点亮LED灯为例:

2、设置时钟

选择外部晶振时钟源

3、引脚设置

4、代码生成设置

注意:工程的路径不允许是中文路径

5、生成代码

//LED灯初始化
void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable *///GPIOF组初始化__HAL_RCC_GPIOF_CLK_ENABLE();//GPIOH组初始化__HAL_RCC_GPIOH_CLK_ENABLE();/*Configure GPIO pin Output Level *///配置PF9输出高电平 亮灭HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);/*Configure GPIO pin : PF9 */GPIO_InitStruct.Pin = GPIO_PIN_9;        //引脚9GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //输出推挽GPIO_InitStruct.Pull = GPIO_PULLUP;  //上拉GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; //中速HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);}

主函数

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals *///GPIOF9初始化MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///1S变更灯状态HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9);  //延时1000msHAL_Delay(1000);}/* USER CODE END 3 */
}
//程序写在BEGIN   与 END之前的注释,下一次更新工程会保留代码。

6、外部中断

以按键KEY0为例(下降沿触发)

(1)选择NVIC分组

(2)配置引脚为中断输入

(3)在中断服务函数中实现相关功能(stm32f4xx_it.c)

HAL工程中断服务函数在stm32f4xx_it.c当中

void EXTI0_IRQHandler(void)
{/* USER CODE BEGIN EXTI0_IRQn 0 *//* USER CODE END EXTI0_IRQn 0 */HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);/* USER CODE BEGIN EXTI0_IRQn 1 *///写入中断处理事件/* USER CODE END EXTI0_IRQn 1 */
}

7、HAL库配置PWM输出,控制灯的亮度

源码例子:

https://download.csdn.net/download/m0_63622771/90861329

http://www.xdnf.cn/news/520921.html

相关文章:

  • 进程控制总结
  • Spyglass:参数(parameter)及其设置方式
  • 考研数学积分学
  • supervisorctl守护进程
  • PCB设计实践(十九)PCB设计中NPN/PNP选型策略
  • C++(23):容器类<vector>
  • C++控制结构详解:if-else、switch、循环(for/while/do-while)
  • 嵌入式学习笔记 - U(S)ART 模块HAL 库函数总结
  • 开启健康生活的多元养生之道
  • Prism使用消息总线打开窗体的案例(中介者模式)
  • GBS 8.0服装裁剪计划软件在线试用
  • SAPROv5.7
  • Muduo网络库大总结
  • 大语言模型 vs NLTK/SpaCy:NLP工具的代际跃迁与互补之道
  • LORA 微调 - LoRA 介绍与 LoRA 微调指南
  • 最长公共子序列(LCS)
  • 网络编程套接字(二)
  • 17 C 语言数据类型转换与数据溢出回绕详解:隐式转换、显式转换、VS Code 警告配置、溢出回绕机制
  • 并发编程(4)
  • 中山市东区信息学竞赛2025 题目解析
  • CMake调试与详细输出选项解析
  • 基于区块链技术的智能汽车诊断与性能分析
  • 运行vscode编辑器源码
  • 课外活动:再次理解页面实例化PO对象的魔法方法__getattr__
  • 【免杀】C2免杀技术(五)动态API
  • C2S-Scale方法解读
  • [Android] 青木扫描全能文档3.0,支持自动扫描功能
  • 机器学习入门之朴素叶贝斯和决策树分类(四)
  • 【VMware】开启「共享文件夹」
  • 计算机系统的工作原理