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

HAL库常用函数

一、通用函数

  • 系统初始化:

HAL_Init(): 初始化HAL库和系统时钟(调用前需配置系统时钟源)。
HAL_Delay(uint32_t Delay): 毫秒级阻塞延时(基于SysTick定时器)。
HAL_GetTick(): 获取系统运行时间(毫秒计数器)。

  • 中断管理:

HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority): 设置中断优先级。
HAL_NVIC_EnableIRQ(IRQn_Type IRQn): 使能指定中断。
HAL_NVIC_DisableIRQ(IRQn_Type IRQn): 禁用指定中断。

二、GPIO控制

  • 基本操作:

HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init): 初始化GPIO引脚模式(输入/输出/复用等)。
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState): 设置引脚电平(高/低)。
HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin): 读取引脚电平。
HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin): 翻转引脚电平。

  • 中断相关:

HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin): EXTI中断服务函数中调用,处理引脚中断事件。
HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin): 用户需重写的EXTI中断回调函数。

三、 定时器(TIM)

  • 基础模式:

HAL_TIM_Base_Init(TIM_HandleTypeDef *htim): 初始化定时器基本模式。
HAL_TIM_Base_Start(TIM_HandleTypeDef *htim): 启动定时器(无中断)。
HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim): 启动定时器并开启中断。

  • PWM模式:

HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel): 启动PWM输出。
HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel): 停止PWM输出。
__HAL_TIM_SET_COMPARE(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t Compare): 动态修改PWM占空比。

  • 中断回调:

HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim): 定时器溢出中断回调函数(需用户实现)。

四、 串口通信(UART)

  • 阻塞模式:

HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout): 阻塞发送数据。
HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout): 阻塞接收数据。

  • 中断模式:

HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size): 中断发送数据。
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size): 中断接收数据。

  • DMA模式:

HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size): DMA发送数据。
HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size): DMA接收数据。

  • 回调函数:

HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart): 发送完成回调函数。
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart): 接收完成回调函数。

五、ADC模数转换

  • 单次转换:

HAL_ADC_Start(ADC_HandleTypeDef *hadc): 启动ADC转换。
HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout): 等待转换完成。
HAL_ADC_GetValue(ADC_HandleTypeDef *hadc): 获取转换结果。

  • 连续扫描模式:

HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc): 启动ADC连续转换(中断模式)。
HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc): 转换完成回调函数。

六、DMA直接内存访问

  • 数据传输:

HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength): 启动DMA传输。
HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t Timeout): 阻塞等待DMA完成。

  • 回调函数:

HAL_DMA_TransferCpltCallback(DMA_HandleTypeDef *hdma): DMA传输完成回调函数。

七、I2C通信

  • 主模式操作:

HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout): 主设备发送数据。
HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout): 主设备接收数据。

  • 中断/DMA模式:

HAL_I2C_Master_Transmit_IT() / HAL_I2C_Master_Transmit_DMA(): 中断或DMA发送。
HAL_I2C_Master_Receive_IT() / HAL_I2C_Master_Receive_DMA(): 中断或DMA接收。

八、SPI通信

  • 主从通信:

HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout): 阻塞发送数据。
HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout): 阻塞接收数据。
HAL_SPI_TransmitReceive(): 同时发送和接收数据。

  • 中断/DMA模式:

HAL_SPI_Transmit_IT() / HAL_SPI_Transmit_DMA(): 中断或DMA发送。

九、 系统时钟(RCC)

  • 时钟配置:
    HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency): 配置系统时钟源和分频。
    HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct): 配置振荡器(HSE/HSI/PLL等)。

十、 看门狗(WWDG/IWDG)

  • 独立看门狗(IWDG):
    HAL_IWDG_Start(IWDG_HandleTypeDef *hiwdg): 启动看门狗。
    HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg): 喂狗操作。

http://www.kler.cn/a/580102.html

相关文章:

  • 基于Asp.net的高校迎新管理系统
  • Linux Bash 单命令行解释 | 文件操作 / 字符串操作 / 重定向
  • 《云原生技术:DeepSeek分布式推理的效能倍增器》
  • 探索AI对冲基金:开源自动化交易系统的革新之路
  • 2025 ubuntu24系统宿主机上在线安装mysql数据库完整演示
  • docker无法pull镜像问题解决for win10
  • hcia华为路由器静态路由实验配置
  • 再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特别之处,还有发展方向
  • 2025年渗透测试面试题总结-快某手-安全实习生(一面、二面)(题目+回答)
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-5.3.1GeoPoint与GeoShape的选型
  • FX-继承访问权限问题
  • 小程序 wxml 语法 —— 35 wxml 语法 -声明和绑定数据
  • nnMamba:基于状态空间模型的3D生物医学图像分割、分类和地标检测
  • chebykan与代码3
  • 重估首程控股:一只产业生态完整的“机器人ETF”
  • 基于DeepSeek的智慧医药系统(源码+部署教程)
  • 【redis】pipeline管道
  • Java的缓存
  • 学习笔记12——并发编程之线程之间协作方式
  • 『VUE』QL面试真题2025.02(详细图文注释)