当前位置: 首页 > 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

相关文章:

  • 加密芯片法(一)ATSHA204A 特性理解
  • 一次页面假死分析
  • FreeRTOS “探究任务调度机制魅力”
  • 三、关系数据库
  • 垂直智能体:企业AI落地的正确打开方式
  • 仿腾讯会议——房间界面用户设置
  • STM32F10X-中文参考手册2
  • 构建一个“湖仓一体”(Data Lakehouse)系统
  • 八股碎碎念01——HashMap原理
  • C++高级用法--绑定器和函数对象
  • C++跨平台开发经验与解决方案
  • 备战!全国青少年信息素养大赛图形化编程-省赛——求最小公倍数
  • 院士方复全数学命题证明采用预期理由和循环论证以及类比的错误方法
  • 【C++进阶篇】C++容器完全指南:掌握set和map的使用,提升编码效率
  • 在Gitee中配置SSH公钥,建立远程仓库和本地仓库的连接
  • 【U-boot 命令使用】
  • 5月18日day29打卡
  • MCP - Cline 接入 高德地图 Server
  • 论信息系统项目的采购管理
  • 每天学一个Linux命令:compgen
  • 国家外汇管理局:4月货物贸易项下跨境资金净流入649亿美元
  • 秦洪看盘|小市值股领涨,A股交易情绪复苏
  • 受贿2.61亿余元,陕西省政协原主席韩勇一审被判死缓
  • 老旧小区加装电梯后续维护谁负责?上海:各区属房管集团托底保障
  • 宫崎骏的折返点
  • 美国恶劣天气已造成至少28人死亡