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调用的各种回调函数里面实现,这些回调都是弱定义的,方便用户直接在其它文件里面重定义:

相关推荐
每天题库14 分钟前
架子工脚手架工题库:安全操作考点与模拟题练习指南
学习·安全·考试·题库·考证
yangmu32031 小时前
Codex 提示词优化教程:用四要素把模糊需求变成可执行任务
人工智能·学习
新晨单片机设计1 小时前
S011C-基于STM32智能灯光控制系统(光强、声音、人体)【Proteus仿真+Keil程序+原理图】
stm32·嵌入式硬件·proteus·智能灯光控制系统
无敌贵点大王2 小时前
RTThread学习记录13——关于要使用一个外设,RTThread与cubemx到底要怎么配合?
c语言·stm32·学习·rtthread
喜欢打篮球的普通人3 小时前
MiniMind 学习笔记(十二):Pretrain 实操——从版本梳理到 8GB 显卡上的真实训练
人工智能·笔记·学习
女神下凡3 小时前
芯参谋(26):DDR4_软件设计规范
arm开发·单片机·嵌入式硬件
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(87):VizoMem——把文本历史转化为可检索的视觉记忆
论文阅读·人工智能·学习·开源·github
zd8451015004 小时前
DSLogic逻辑分析仪连接失败
嵌入式硬件
坤坤子吖5 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
国科安芯5 小时前
星载通信载荷信号处理中抗辐射微控制器的选型与适应性分析
人工智能·嵌入式硬件·mcu·信号处理·risc-v·抗辐射·空间信息