HAL库框架学习总结

概述:HAL库为各种外设基本都配了三套 API,查询,中断和 DMA。

一、HAL库为外设初始化提供了一套框架,这里以串口为例进行说明,调用函数 HAL_UART_Init初始化串口,此函数就会调用 HAL_UART_MspInit,这个函数是弱定义的,在 stm32f4xx_hal_uart.c文件里面:如果要初始化,直接将此函数在其它源文件里面实现即可,如果用到了中断和 DMA,也是直接在这里填写。

由于所有串口都是通过函数 HAL_UART_Init做初始化,所以函数 HAL_UART_MspInit也是共用的。因此需要大家在这个里面区分是配置的哪个串口。

二、HAL库对中断的处理:

1、那么问题来了,如果要实现功能,用户的应用程序怎么写入中断?用户可以直接在函数

HAL_UART_IRQHandler的前面或者后面添加新代码,也可以直接在 HAL_UART_IRQHandler调用的各种回调函数里面执行,这些回调都是弱定义的,方便用户直接在其它文件里面重定义

三、HAL库的DMA处理思路

1、为了方便各种外设直接启动 DMA,HAL库专门为支持 DMA操作的外设都提供了对应的 DMA函数,比如串口的:

2、这里特别注意一点,针对外设的 DMA函数基本都有开启中断,如果用户使能此外设的 NVIC,使用中务必别忘了写 DMA的中断服务程序,比如使用 DMA1_Stream1:

3、如果要在 DMA传输完成,半传输完成等中断里面执行功能,也是通过 HAL_DMA_IRQHandler调用的各种回调函数里面实现,这些回调都是弱定义的,方便用户直接在其它文件里面重定义:

相关推荐
西岸行者7 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意7 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码7 天前
嵌入式学习路线
学习
Lester_11017 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元7 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133977 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315207 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
毛小茛7 天前
计算机系统概论——校验码
学习
babe小鑫7 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms7 天前
ROS2知识大白话
笔记·学习·ros2