本文档整理了 STM32F4 系列 HAL 库中常用外设的核心 API 及其简要说明,所有函数均需开发者手动调用。内容涵盖 GPIO、UART、TIM、ADC、DAC、SPI、I2C、CAN、RTC、看门狗、FLASH、CRC、RNG、DMA、PWR、SAI、SD 卡及 HAL 顶层通用函数,方便快速查阅与使用。
一、GPIO 通用输入输出
| API 函数 | 简洁说明 |
|---|---|
| HAL_GPIO_WritePin(GPIOx, GPIO_PIN_x, PinState) | 写引脚电平 |
| HAL_GPIO_ReadPin(GPIOx, GPIO_PIN_x) | 读引脚电平,返回 0 或 1 |
| HAL_GPIO_TogglePin(GPIOx, GPIO_PIN_x) | 翻转引脚电平 |
| HAL_GPIO_LockPin(GPIOx, GPIO_PIN_x) | 锁定引脚配置(直到复位) |
二、UART/USART 串口
2.1 阻塞发送/接收
| API 函数 | 简洁说明 |
|---|---|
| HAL_UART_Transmit(huart, pData, Size, Timeout) | 阻塞发送指定字节 |
| HAL_UART_Receive(huart, pData, Size, Timeout) | 阻塞接收指定字节 |
2.2 中断发送/接收
| API 函数 | 简洁说明 |
|---|---|
| HAL_UART_Transmit_IT(huart, pData, Size) | 中断方式发送 |
| HAL_UART_Receive_IT(huart, pData, Size) | 中断方式接收(启动后一直收) |
| HAL_UART_Transmit_IT(huart, pData, Size) | 中断发送 |
2.3 DMA 发送/接收
| API 函数 | 简洁说明 |
|---|---|
| HAL_UART_Transmit_DMA(huart, pData, Size) | DMA 方式发送 |
| HAL_UART_Receive_DMA(huart, pData, Size) | DMA 方式接收(常需配合空闲中断) |
| HAL_UART_DMAPause(huart) | 暂停 DMA 传输 |
| HAL_UART_DMAResume(huart) | 恢复 DMA 传输 |
| HAL_UART_DMAStop(huart) | 停止 DMA 传输 |
2.4 中断处理与状态查询
| API 函数 | 简洁说明 |
|---|---|
| HAL_UART_IRQHandler(huart) | UART 中断总处理函数(在 stm32f4xx_it.c 中调用) |
| HAL_UART_Abort(huart) | 中止所有传输 |
| HAL_UART_Abort_IT(huart) | 中止传输(中断方式) |
| HAL_UART_GetState(huart) | 取得当前状态(HAL_UART_STATE_READY/BUSY 等) |
| HAL_UART_GetError(huart) | 获取错误码 |
2.5 回调函数(需自己重写实现)
| 回调函数 | 触发时机 |
|---|---|
| HAL_UART_TxCpltCallback(huart) | 发送完成(DMA/IT 方式下回调) |
| HAL_UART_TxHalfCpltCallback(huart) | 发送一半完成 |
| HAL_UART_RxCpltCallback(huart) | 接收完成(最常用:在里面再次调用 Receive_IT) |
| HAL_UART_RxHalfCpltCallback(huart) | 接收一半完成 |
| HAL_UART_ErrorCallback(huart) | 发生错误(溢出、噪声、帧错等) |
| HAL_UART_AbortCpltCallback(huart) | 中止完成回调 |
2.6 空闲中断(常用但 HAL 没有专门 API,需手动实现)
__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE) 使能空闲中断后,在 USARTx_IRQHandler 内判断 IDLE 标志,配合 DMA 接收实现不定长接收。
三、TIM 定时器
3.1 基本定时器(时基)
| API 函数 | 简洁说明 |
|---|---|
| HAL_TIM_Base_Start(htim) | 启动定时器计数(轮询) |
| HAL_TIM_Base_Stop(htim) | 停止定时器 |
| HAL_TIM_Base_Start_IT(htim) | 启动定时器(中断方式,更新事件将进回调) |
| HAL_TIM_Base_Stop_IT(htim) | 停止定时器中断模式 |
| HAL_TIM_Base_Start_DMA(htim, pData, Length) | 启动定时器 DMA 传输 |
| HAL_TIM_Base_Stop_DMA(htim) | 停止 DMA 模式 |
3.2 输出比较(OC)
| API 函数 | 简洁说明 |
|---|---|
| HAL_TIM_OC_Start(htim, Channel) | 启动输出比较通道 |
| HAL_TIM_OC_Stop(htim, Channel) | 停止输出比较 |
| HAL_TIM_OC_Start_IT(htim, Channel) | 中断方式启动 OC |
| HAL_TIM_OC_Stop_IT(htim, Channel) | 中断方式停止 OC |
| HAL_TIM_OC_Start_DMA(htim, Channel, pData, Length) | DMA 方式启动 OC |
| HAL_TIM_OC_Stop_DMA(htim, Channel) | DMA 停止 OC |
3.3 PWM 脉宽调制
| API 函数 | 简洁说明 |
|---|---|
| HAL_TIM_PWM_Start(htim, Channel) | 启动 PWM 输出(最常用) |
| HAL_TIM_PWM_Stop(htim, Channel) | 停止 PWM |
| HAL_TIM_PWM_Start_IT(htim, Channel) | 启动 PWM(带中断) |
| HAL_TIM_PWM_Stop_IT(htim, Channel) | 停止 PWM 中断 |
| HAL_TIM_PWM_Start_DMA(htim, Channel, pData, Length) | DMA 方式启动 PWM |
| HAL_TIM_PWM_Stop_DMA(htim, Channel) | 停止 DMA 方式 PWM |
3.4 输入捕获(IC)
| API 函数 | 简洁说明 |
|---|---|
| HAL_TIM_IC_Start(htim, Channel) | 启动输入捕获(轮询) |
| HAL_TIM_IC_Stop(htim, Channel) | 停止输入捕获 |
| HAL_TIM_IC_Start_IT(htim, Channel) | 中断方式启动 IC |
| HAL_TIM_IC_Stop_IT(htim, Channel) | 中断停止 IC |
| HAL_TIM_IC_Start_DMA(htim, Channel, pData, Length) | DMA 启动 IC |
| HAL_TIM_IC_Stop_DMA(htim, Channel) | DMA 停止 IC |
| HAL_TIM_ReadCapturedValue(htim, Channel) | 读取捕获寄存器值 |
3.5 单脉冲模式(One Pulse)
| API 函数 | 简洁说明 |
|---|---|
| HAL_TIM_OnePulse_Start(htim, OutputChannel) | 启动单脉冲输出 |
| HAL_TIM_OnePulse_Stop(htim, OutputChannel) | 停止单脉冲 |
| HAL_TIM_OnePulse_Start_IT(htim, OutputChannel) | 中断方式单脉冲 |
| HAL_TIM_OnePulse_Stop_IT(htim, OutputChannel) | 停止中断方式单脉冲 |
3.6 编码器接口(Encoder)
3.6 编码器接口(Encoder)
| API 函数 | 简洁说明 |
|---|---|
| HAL_TIM_Encoder_Start(htim, Channel) | 启动编码器接口(最常用:TIM_CHANNEL_ALL) |
| HAL_TIM_Encoder_Stop(htim, Channel) | 停止编码器 |
| HAL_TIM_Encoder_Start_IT(htim, Channel) | 编码器+中断 |
| HAL_TIM_Encoder_Stop_IT(htim, Channel) | 停止编码器中断 |
| HAL_TIM_Encoder_Start_DMA(htim, Channel, pData1, pData2, Length) | DMA方式编码器 |
| HAL_TIM_Encoder_Stop_DMA(htim, Channel) | 停止DMA编码器 |
编码器使用小技巧:CNT寄存器值即编码器累积值,可直接读取 htim->Instance->CNT。
3.7 中断处理与通用控制
| API 函数 | 简洁说明 |
|---|---|
| HAL_TIM_IRQHandler(htim) | TIM中断总处理(在stm32f4xx_it.c中调用) |
| HAL_TIM_OC_ConfigChannel(htim, sConfig, Channel) | 运行时配置OC通道参数 |
| HAL_TIM_PWM_ConfigChannel(htim, sConfig, Channel) | 运行时配置PWM通道 |
| HAL_TIM_IC_ConfigChannel(htim, sConfig, Channel) | 运行时配置IC通道 |
| HAL_TIM_ConfigClockSource(htim, sClockSourceConfig) | 配置时钟源(内部/外部/ETR) |
| HAL_TIM_SlaveConfigSynchro(htim, sSlaveConfig) | 配置从模式(定时器级联) |
| HAL_TIM_GenerateEvent(htim, EventSource) | 软件产生事件(如更新事件) |
| __HAL_TIM_SET_COUNTER(htim, value) | 宏:设置计数器值 |
| __HAL_TIM_GET_COUNTER(htim) | 宏:获取计数器值 |
| __HAL_TIM_SET_COMPARE(htim, Channel, value) | 宏:设置PWM比较值(修改占空比) |
| __HAL_TIM_SET_AUTORELOAD(htim, value) | 宏:设置自动重装值 |
3.8 回调函数(需自己重写)
| 回调函数 | 触发时机 |
|---|---|
| HAL_TIM_PeriodElapsedCallback(htim) | 周期更新事件回调(基本定时器最常用) |
| HAL_TIM_PeriodElapsedHalfCpltCallback(htim) | DMA方式半满传输回调 |
| HAL_TIM_OC_DelayElapsedCallback(htim) | 输出比较匹配回调 |
| HAL_TIM_IC_CaptureCallback(htim) | 输入捕获完成回调 |
| HAL_TIM_IC_CaptureHalfCpltCallback(htim) | 输入捕获半完成(DMA) |
| HAL_TIM_PWM_PulseFinishedCallback(htim) | PWM脉冲完成回调 |
| HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim) | PWM半完成回调 |
| HAL_TIM_TriggerCallback(htim) | 触发事件回调 |
| HAL_TIM_ErrorCallback(htim) | 错误回调 |
四、ADC 模数转换
4.1 启动/停止
| API 函数 | 简洁说明 |
|---|---|
| HAL_ADC_Start(hadc) | 启动ADC转换(轮询方式) |
| HAL_ADC_Stop(hadc) | 停止ADC |
| HAL_ADC_Start_IT(hadc) | 启动ADC(中断方式) |
| HAL_ADC_Stop_IT(hadc) | 停止ADC中断模式 |
| HAL_ADC_Start_DMA(hadc, pData, Length) | DMA方式启动(多通道最常用) |
| HAL_ADC_Stop_DMA(hadc) | 停止DMA方式 |
4.2 结果读取与等待
| API 函数 | 简洁说明 |
|---|---|
| HAL_ADC_GetValue(hadc) | 读取ADC转换结果 |
| HAL_ADC_PollForConversion(hadc, Timeout) | 阻塞等待转换完成 |
| HAL_ADC_PollForEvent(hadc, EventType, Timeout) | 阻塞等待事件(看门狗、溢出等) |
| HAL_ADC_IRQHandler(hadc) | ADC中断总处理 |
4.3 运行时配置
| API 函数 | 简洁说明 |
|---|---|
| HAL_ADC_ConfigChannel(hadc, sConfig) | 配置ADC通道(采样时间等) |
| HAL_ADC_AnalogWDGConfig(hadc, sConfig) | 配置模拟看门狗 |
4.4 回调函数
| 回调函数 | 触发时机 |
|---|---|
| HAL_ADC_ConvCpltCallback(hadc) | 转换完成(DMA全部传输完成时) |
| HAL_ADC_ConvHalfCpltCallback(hadc) | 转换半完成(DMA半满) |
| HAL_ADC_LevelOutOfWindowCallback(hadc) | 模拟看门狗越界 |
| HAL_ADC_ErrorCallback(hadc) | 错误回调 |
五、DAC 数模转换
5.1 启动/停止
| API 函数 | 简洁说明 |
|---|---|
| HAL_DAC_Start(hdac, Channel) | 启动DAC通道(手动输出模式) |
| HAL_DAC_Stop(hdac, Channel) | 停止DAC |
| HAL_DAC_Start_DMA(hdac, Channel, pData, Length, Alignment) | 启动DAC+DMA(输出波形时用) |
| HAL_DAC_Stop_DMA(hdac, Channel) | 停止DAC DMA |
5.2 设置输出值
| API 函数 | 简洁说明 |
|---|---|
| HAL_DAC_SetValue(hdac, Channel, Alignment, Data) | 设置DAC输出值 |
| HAL_DAC_GetValue(hdac, Channel) | 获取当前DAC输出值 |
| HAL_DAC_ConfigChannel(hdac, sConfig, Channel) | 配置DAC通道参数 |
| HAL_DAC_IRQHandler(hdac) | DAC中断处理 |
5.3 回调函数
| 回调函数 | 触发时机 |
|---|---|
| HAL_DAC_ConvCpltCallbackCh1(hdac) | DMA传输完成 |
| HAL_DAC_ConvHalfCpltCallbackCh1(hdac) | DMA半传输完成 |
| HAL_DAC_ErrorCallbackCh1(hdac) | 错误回调 |
| HAL_DAC_DMAUnderrunCallbackCh1(hdac) | DMA欠载(下溢) |
六、SPI 串行外设接口
6.1 阻塞方式
| API 函数 | 简洁说明 |
|---|---|
| HAL_SPI_Transmit(hspi, pData, Size, Timeout) | 阻塞发送 |
| HAL_SPI_Receive(hspi, pData, Size, Timeout) | 阻塞接收 |
| HAL_SPI_TransmitReceive(hspi, pTxData, pRxData, Size, Timeout) | 阻塞全双工收发 |
6.2 中断方式
| API 函数 | 简洁说明 |
|---|---|
| HAL_SPI_Transmit_IT(hspi, pData, Size) | 中断发送 |
| HAL_SPI_Receive_IT(hspi, pData, Size) | 中断接收 |
| HAL_SPI_TransmitReceive_IT(hspi, pTxData, pRxData, Size) | 中断全双工 |
6.3 DMA方式
| API 函数 | 简洁说明 |
|---|---|
| HAL_SPI_Transmit_DMA(hspi, pData, Size) | DMA发送 |
| HAL_SPI_Receive_DMA(hspi, pData, Size) | DMA接收 |
| HAL_SPI_TransmitReceive_DMA(hspi, pTxData, pRxData, Size) | DMA全双工 |
| HAL_SPI_DMAPause(hspi) | 暂停DMA |
| HAL_SPI_DMAResume(hspi) | 恢复DMA |
| HAL_SPI_DMAStop(hspi) | 停止DMA |
6.4 中止与中断处理
| API 函数 | 简洁说明 |
|---|---|
| HAL_SPI_Abort(hspi) | 中止传输 |
| HAL_SPI_Abort_IT(hspi) | 中止传输(中断) |
| HAL_SPI_IRQHandler(hspi) | SPI中断总处理 |
6.5 回调函数
| 回调函数 | 触发时机 |
|---|---|
| HAL_SPI_TxCpltCallback(hspi) | 发送完成 |
| HAL_SPI_RxCpltCallback(hspi) | 接收完成 |
| HAL_SPI_TxRxCpltCallback(hspi) | 全双工收发完成 |
| HAL_SPI_TxHalfCpltCallback(hspi) | 发送半完成 |
| HAL_SPI_RxHalfCpltCallback(hspi) | 接收半完成 |
| HAL_SPI_TxRxHalfCpltCallback(hspi) | 全双工半完成 |
| HAL_SPI_ErrorCallback(hspi) | 错误回调 |
| HAL_SPI_AbortCpltCallback(hspi) | 中止完成 |
七、I2C 集成电路总线
7.1 主机阻塞方式
| API 函数 | 简洁说明 |
|---|---|
| HAL_I2C_Master_Transmit(hi2c, DevAddress, pData, Size, Timeout) | 主机阻塞发送 |
| HAL_I2C_Master_Receive(hi2c, DevAddress, pData, Size, Timeout) | 主机阻塞接收 |
| HAL_I2C_Mem_Write(hi2c, DevAddress, MemAddress, MemAddSize, pData, Size, Timeout) | 写从机内部寄存器(EEPROM常用) |
| HAL_I2C_Mem_Read(hi2c, DevAddress, MemAddress, MemAddSize, pData, Size, Timeout) | 读从机内部寄存器 |
| HAL_I2C_IsDeviceReady(hi2c, DevAddress, Trials, Timeout) | 检测从机是否就绪(轮询ACK) |
7.2 从机阻塞方式
| API 函数 | 简洁说明 |
|---|---|
| HAL_I2C_Slave_Transmit(hi2c, pData, Size, Timeout) | 从机阻塞发送 |
| HAL_I2C_Slave_Receive(hi2c, pData, Size, Timeout) | 从机阻塞接收 |
7.3 中断方式(主机/从机/存储器)
| API 函数 | 简洁说明 |
|---|---|
| HAL_I2C_Master_Transmit_IT(hi2c, DevAddress, pData, Size) | 主机中断发送 |
| HAL_I2C_Master_Receive_IT(hi2c, DevAddress, pData, Size) | 主机中断接收 |
| HAL_I2C_Slave_Transmit_IT(hi2c, pData, Size) | 从机中断发送 |
| HAL_I2C_Slave_Receive_IT(hi2c, pData, Size) | 从机中断接收 |
| HAL_I2C_Mem_Write_IT(hi2c, DevAddress, MemAddress, MemAddSize, pData, Size) | 中断写内存 |
| HAL_I2C_Mem_Read_IT(hi2c, DevAddress, MemAddress, MemAddSize, pData, Size) | 中断读内存 |
| HAL_I2C_EnableListen_IT(hi2c) | 开启从机监听模式 |
| HAL_I2C_DisableListen_IT(hi2c) | 关闭监听 |
| HAL_I2C_Master_Abort_IT(hi2c, DevAddress) | 主机中止传输 |
7.4 DMA方式
| API 函数 | 简洁说明 |
|---|---|
| HAL_I2C_Master_Transmit_DMA(hi2c, DevAddress, pData, Size) | 主机DMA发送 |
| HAL_I2C_Master_Receive_DMA(hi2c, DevAddress, pData, Size) | 主机DMA接收 |
| HAL_I2C_Slave_Transmit_DMA(hi2c, pData, Size) | 从机DMA发送 |
| HAL_I2C_Slave_Receive_DMA(hi2c, pData, Size) | 从机DMA接收 |
| HAL_I2C_Mem_Write_DMA(hi2c, DevAddress, MemAddress, MemAddSize, pData, Size) | DMA写内存 |
| HAL_I2C_Mem_Read_DMA(hi2c, DevAddress, MemAddress, MemAddSize, pData, Size) | DMA读内存 |
7.5 中断处理与状态
| API 函数 | 简洁说明 |
|---|---|
| HAL_I2C_IRQHandler(hi2c) | I2C中断总处理 |
| HAL_I2C_EV_IRQHandler(hi2c) | 事件中断处理(部分库) |
| HAL_I2C_ER_IRQHandler(hi2c) | 错误中断处理 |
| HAL_I2C_GetState(hi2c) | 获取状态 |
| HAL_I2C_GetError(hi2c) | 获取错误 |
7.6 回调函数
| 回调函数 | 触发时机 |
|---|---|
| HAL_I2C_MasterTxCpltCallback(hi2c) | 主机发送完成 |
| HAL_I2C_MasterRxCpltCallback(hi2c) | 主机接收完成 |
| HAL_I2C_SlaveTxCpltCallback(hi2c) | 从机发送完成 |
| HAL_I2C_SlaveRxCpltCallback(hi2c) | 从机接收完成 |
| HAL_I2C_MemTxCpltCallback(hi2c) | 存储器写入完成 |
| HAL_I2C_MemRxCpltCallback(hi2c) | 存储器读取完成 |
| HAL_I2C_ListenCpltCallback(hi2c) | 监听完成 |
| HAL_I2C_AddrCallback(hi2c, TransferDirection, SlaveMatchCode) | 从机地址匹配回调 |
| HAL_I2C_ErrorCallback(hi2c) | 错误回调 |
| HAL_I2C_AbortCpltCallback(hi2c) | 中止完成 |
八、CAN 控制器局域网
8.1 启动/停止与配置
| API 函数 | 简洁说明 |
|---|---|
| HAL_CAN_Start(hcan) | 启动CAN(从初始化模式进入正常模式) |
| HAL_CAN_Stop(hcan) | 停止CAN(回到初始化模式) |
| HAL_CAN_ConfigFilter(hcan, sFilterConfig) | 配置CAN滤波器(非常重要) |
8.2 中断使能
| API 函数 | 简洁说明 |
|---|---|
| HAL_CAN_ActivateNotification(hcan, ActiveITs) | 激活中断通知(如接收、发送、错误) |
| HAL_CAN_DeactivateNotification(hcan, InactiveITs) | 关闭中断通知 |
8.3 发送/接收
| API 函数 | 简洁说明 |
|---|---|
| HAL_CAN_AddTxMessage(hcan, pHeader, aData, pTxMailbox) | 添加消息到发送邮箱 |
| HAL_CAN_GetRxMessage(hcan, RxFifo, pHeader, aData) | 从接收FIFO取出消息 |
| HAL_CAN_GetTxMailboxesFreeLevel(hcan) | 获取空闲发送邮箱数 |
| HAL_CAN_IsTxMessagePending(hcan, TxMailboxes) | 是否有消息在等待发送 |
| HAL_CAN_GetRxFifoFillLevel(hcan, RxFifo) | 获取接收FIFO填充级别 |
8.4 状态与错误
| API 函数 | 简洁说明 |
|---|---|
| HAL_CAN_GetState(hcan) | 取得CAN状态 |
| HAL_CAN_GetError(hcan) | 取得错误码 |
| HAL_CAN_IRQHandler(hcan) | CAN中断总处理 |
8.5 回调函数
| 回调函数 | 触发时机 |
|---|---|
| HAL_CAN_TxMailbox0CompleteCallback(hcan) | 发送邮箱0发送完成 |
| HAL_CAN_TxMailbox1CompleteCallback(hcan) | 发送邮箱1发送完成 |
| HAL_CAN_TxMailbox2CompleteCallback(hcan) | 发送邮箱2发送完成 |
| HAL_CAN_RxFifo0MsgPendingCallback(hcan) | 接收FIFO0有新消息(常用) |
| HAL_CAN_RxFifo0FullCallback(hcan) | FIFO0满 |
| HAL_CAN_RxFifo1MsgPendingCallback(hcan) | 接收FIFO1有新消息 |
| HAL_CAN_RxFifo1FullCallback(hcan) | FIFO1满 |
| HAL_CAN_SleepCallback(hcan) | 进入睡眠 |
| HAL_CAN_WakeUpFromRxMsgCallback(hcan) | 从接收唤醒 |
| HAL_CAN_ErrorCallback(hcan) | 错误回调 |
九、RTC 实时时钟
9.1 时间/日期
| API 函数 | 简洁说明 |
|---|---|
| HAL_RTC_SetTime(hrtc, sTime, Format) | 设置时间(Format: RTC_FORMAT_BIN / RTC_FORMAT_BCD) |
| HAL_RTC_GetTime(hrtc, sTime, Format) | 获取时间 |
| HAL_RTC_SetDate(hrtc, sDate, Format) | 设置日期 |
| HAL_RTC_GetDate(hrtc, sDate, Format) | 获取日期 |
9.2 闹钟
| API 函数 | 简洁说明 |
|---|---|
| HAL_RTC_SetAlarm(hrtc, sAlarm, Format) | 设置闹钟(轮询) |
| HAL_RTC_SetAlarm_IT(hrtc, sAlarm, Format) | 设置闹钟(中断方式) |
| HAL_RTC_DeactivateAlarm(hrtc, Alarm) | 取消闹钟 |
| HAL_RTC_GetAlarm(hrtc, sAlarm, Format) | 获取当前闹钟配置 |
| HAL_RTC_AlarmIRQHandler(hrtc) | 闹钟中断处理 |
9.3 唤醒定时器
| API 函数 | 简洁说明 |
|---|---|
| HAL_RTCEx_SetWakeUpTimer_IT(hrtc, Counter, WakeUpClock) | 设置周期性唤醒定时器(中断) |
| HAL_RTCEx_DeactivateWakeUpTimer(hrtc) | 取消唤醒定时器 |
| HAL_RTC_WakeUpTimerIRQHandler(hrtc) | 唤醒定时器中断处理 |
9.4 备份寄存器
| API 函数 | 简洁说明 |
|---|---|
| HAL_RTCEx_BKUPWrite(hrtc, BackupRegister, Data) | 写备份寄存器 |
| HAL_RTCEx_BKUPRead(hrtc, BackupRegister) | 读备份寄存器 |
9.5 回调函数
| 回调函数 | 触发时机 |
|---|---|
| HAL_RTC_AlarmAEventCallback(hrtc) | 闹钟A触发 |
| HAL_RTCEx_AlarmBEventCallback(hrtc) | 闹钟B触发 |
| HAL_RTCEx_WakeUpTimerEventCallback(hrtc) | 唤醒定时器触发 |
| HAL_RTCEx_Tamper1EventCallback(hrtc) | 篡改事件1 |
| HAL_RTCEx_TimeStampEventCallback(hrtc) | 时间戳事件 |
十、WWDG 窗口看门狗
| API 函数 | 简洁说明 |
|---|---|
| HAL_WWDG_Init(hwwdg) | 初始化(CubeMX会生成) |
| HAL_WWDG_Refresh(hwwdg) | 喂狗(关键函数,周期内必须调用) |
| HAL_WWDG_IRQHandler(hwwdg) | WWDG中断处理 |
| HAL_WWDG_EarlyWakeupCallback(hwwdg) | 提前唤醒中断回调(接近超时前触发) |
注意:WWDG必须在窗口范围内喂狗(太早也会复位)。
十一、IWDG 独立看门狗
| API 函数 | 简洁说明 |
|---|---|
| HAL_IWDG_Init(hiwdg) | 初始化(CubeMX会生成) |
| HAL_IWDG_Refresh(hiwdg) | 喂狗(关键函数) |
注意:IWDG一旦启动就不能停止,直到芯片复位。
十二、FLASH 闪存
12.1 读写控制
| API 函数 | 简洁说明 |
|---|---|
| HAL_FLASH_Unlock(void) | 解锁FLASH(写入前必须) |
| HAL_FLASH_Lock(void) | 重新锁定FLASH |
| HAL_FLASH_Program(TypeProgram, Address, Data) | 编程写入(字节/半字/字/双字) |
| HAL_FLASH_Program_IT(TypeProgram, Address, Data) | 中断方式编程 |
| HAL_FLASH_IRQHandler(void) | FLASH中断总处理 |
| HAL_FLASH_GetError(void) | 获取FLASH错误 |
| FLASH_WaitForLastOperation(Timeout) | 等待上次操作完成 |
12.3 回调函数
| 回调函数 | 触发时机 |
|---|---|
| HAL_FLASH_EndOfOperationCallback(ReturnValue) | 编程/擦除完成(IT模式) |
| HAL_FLASH_OperationErrorCallback(ReturnValue) | FLASH操作错误 |
12.4 擦除(FLASHEx扩展函数,非常常用)
| API 函数 | 简洁说明 |
|---|---|
| HAL_FLASHEx_Erase(pEraseInit, SectorError) | 擦除指定扇区(pEraseInit指定类型/扇区数/并行位数) |
| HAL_FLASHEx_Erase_IT(pEraseInit) | 中断方式擦除 |
| HAL_FLASHEx_OBProgram(pOBInit) | 配置Option字节(读保护、写保护、BOOT位等) |
| HAL_FLASHEx_OBGetConfig(pOBInit) | 获取当前Option字节配置 |
十三、CRC 循环冗余校验
| API 函数 | 简洁说明 |
|---|---|
| HAL_CRC_Accumulate(hcrc, pBuffer, BufferLength) | 累加计算CRC(不重置初始值) |
| HAL_CRC_Calculate(hcrc, pBuffer, BufferLength) | 重新计算CRC(从默认初始值开始) |
十四、RNG 随机数发生器
| API 函数 | 简洁说明 |
|---|---|
| HAL_RNG_GetRandomNumber(hrng) | 获取32位随机数(阻塞) |
| HAL_RNG_GetRandomNumber_IT(hrng) | 中断方式获取随机数 |
| HAL_RNG_IRQHandler(hrng) | RNG中断处理 |
| HAL_RNG_ReadyDataCallback(hrng, random32bit) | 随机数就绪回调(需重写) |
| HAL_RNG_ErrorCallback(hrng) | 错误回调 |
十五、DMA 直接存储器访问
| API 函数 | 简洁说明 |
|---|---|
| HAL_DMA_Start(hdma, SrcAddress, DstAddress, DataLength) | 启动DMA传输(轮询方式,一般由外设API内部调用) |
| HAL_DMA_Start_IT(hdma, SrcAddress, DstAddress, DataLength) | 启动DMA(中断方式) |
| HAL_DMA_Abort(hdma) | 中止DMA |
| HAL_DMA_Abort_IT(hdma) | 中止DMA(中断方式) |
| HAL_DMA_PollForTransfer(hdma, CompleteLevel, Timeout) | 阻塞等待传输完成 |
| HAL_DMA_IRQHandler(hdma) | DMA中断总处理 |
| HAL_DMA_RegisterCallback(hdma, CallbackID, pCallback) | 注册回调 |
| HAL_DMA_GetState(hdma) | 获取DMA状态 |
| HAL_DMA_GetError(hdma) | 获取DMA错误 |
DMA的回调一般通过外设的回调(如UART/ADC的XferCpltCallback)间接触发,因此业务上通常不直接写DMA回调。
十六、PWR 电源管理
| API 函数 | 简洁说明 |
|---|---|
| HAL_PWR_EnableBkUpAccess(void) | 使能备份域访问(写RTC备份寄存器前必须) |
| HAL_PWR_DisableBkUpAccess(void) | 关闭备份域访问 |
| HAL_PWR_ConfigPVD(sConfigPVD) | 配置可编程电压检测 |
| HAL_PWR_EnablePVD(void) | 使能PVD |
| HAL_PWR_DisablePVD(void) | 关闭PVD |
| HAL_PWR_EnableWakeUpPin(WakeUpPinx) | 使能唤醒引脚(用于STOP模式唤醒) |
| HAL_PWR_DisableWakeUpPin(WakeUpPinx) | 关闭唤醒引脚 |
| HAL_PWR_EnterSTOPMode(Regulator, STOPEntry) | 进入STOP模式 |
| HAL_PWR_EnterSTANDBYMode(void) | 进入STANDBY模式 |
| HAL_PWR_EnterSLEEPMode(SLEEPEntry, Regulator) | 进入SLEEP模式 |
| HAL_PWR_PVD_IRQHandler(void) | PVD中断处理 |
| HAL_PWR_PVDCallback(void) | PVD中断回调(需重写) |
十七、SAI 串行音频接口
| API 函数 | 简洁说明 |
|---|---|
| HAL_SAI_Transmit(hsai, pData, Size, Timeout) | 阻塞发送音频数据 |
| HAL_SAI_Receive(hsai, pData, Size, Timeout) | 阻塞接收 |
| HAL_SAI_Transmit_IT(hsai, pData, Size) | 中断发送 |
| HAL_SAI_Receive_IT(hsai, pData, Size) | 中断接收 |
| HAL_SAI_Transmit_DMA(hsai, pData, Size) | DMA发送 |
| HAL_SAI_Receive_DMA(hsai, pData, Size) | DMA接收 |
| HAL_SAI_DMAPause(hsai) | 暂停DMA |
| HAL_SAI_DMAResume(hsai) | 恢复DMA |
| HAL_SAI_DMAStop(hsai) | 停止DMA |
| HAL_SAI_Abort(hsai) | 中止传输 |
| HAL_SAI_IRQHandler(hsai) | SAI中断处理 |
| HAL_SAI_TxCpltCallback(hsai) | 发送完成回调 |
| HAL_SAI_TxHalfCpltCallback(hsai) | 发送半完成 |
| HAL_SAI_RxCpltCallback(hsai) | 接收完成 |
| HAL_SAI_RxHalfCpltCallback(hsai) | 接收半完成 |
| HAL_SAI_ErrorCallback(hsai) | 错误回调 |
十八、SD 卡(SDIO接口)
| API 函数 | 简洁说明 |
|---|---|
| HAL_SD_InitCard(hsd) | 初始化SD卡(HAL_SD_Init后调用) |
| HAL_SD_ReadBlocks(hsd, pData, BlockAdd, NumberOfBlocks, Timeout) | 阻塞读块 |
| HAL_SD_WriteBlocks(hsd, pData, BlockAdd, NumberOfBlocks, Timeout) | 阻塞写块 |
| HAL_SD_Erase(hsd, BlockStartAdd, BlockEndAdd) | 擦除块范围 |
| HAL_SD_ReadBlocks_IT(hsd, pData, BlockAdd, NumberOfBlocks) | 中断方式读 |
| HAL_SD_WriteBlocks_IT(hsd, pData, BlockAdd, NumberOfBlocks) | 中断方式写 |
| HAL_SD_ReadBlocks_DMA(hsd, pData, BlockAdd, NumberOfBlocks) | DMA方式读 |
| HAL_SD_WriteBlocks_DMA(hsd, pData, BlockAdd, NumberOfBlocks) | DMA方式写 |
| HAL_SD_IRQHandler(hsd) | SDIO中断处理 |
| HAL_SD_GetCardState(hsd) | 获取卡状态 |
| HAL_SD_GetCardInfo(hsd, pCardInfo) | 获取卡信息(CID/CSD等) |
| HAL_SD_TxCpltCallback(hsd) | 写完成回调 |
| HAL_SD_RxCpltCallback(hsd) | 读完成回调 |
| HAL_SD_ErrorCallback(hsd) | 错误回调 |
| HAL_SD_AbortCallback(hsd) | 中止回调 |
十九、HAL通用/顶层API
| API 函数 | 简洁说明 |
|---|---|
| HAL_Init(void) | HAL库初始化(默认在main开头调用) |
| HAL_DeInit(void) | 反初始化HAL |
| HAL_InitTick(TickPriority) | 初始化SysTick(CubeMX在SystemClock_Config后调用) |
| HAL_IncTick(void) | 增加系统节拍计数(在SysTick_Handler中被调用) |
| HAL_GetTick(void) | 获取当前系统节拍(ms级延时函数基础) |
| HAL_Delay(Delay) | ms级阻塞延时 |
| HAL_SuspendTick(void) | 暂停SysTick(进入低功耗前调用) |
| HAL_ResumeTick(void) | 恢复SysTick |
| HAL_GetHalVersion(void) | 获取HAL版本 |
| HAL_GetREVID(void) | 获取芯片修订ID |
| HAL_GetDEVID(void) | 获取芯片设备ID |
| HAL_GetUIDw0/1/2(void) | 获取芯片唯一ID(UID) |
| HAL_NVIC_SetPriority(IRQn, PreemptPriority, SubPriority) | 设置中断优先级 |
| HAL_NVIC_EnableIRQ(IRQn) | 使能中断 |
| HAL_NVIC_DisableIRQ(IRQn) | 关闭中断 |
| HAL_NVIC_SystemReset(void) | 发起系统复位 |
| HAL_SYSTICK_Config(TicksNumb) | 配置SysTick(返回0为成功) |
本手册内容保持原始API与说明不变,仅对格式进行整理。