首页 >> 知识 >> STM32HAL库常用函数速查手册

STM32HAL库常用函数速查手册

STM32HAL库常用函数速查手册(V1.0.0.20231019_BETA)前言

写程序时想不起来函数很麻烦,于是做了这么一个手册,常用的一些部分都加了注释标注了中文,搜集资料主要来源于CSDN和官方手册,主要用于速查常用函数以及一些常用代码。关于使用STM32CubeMX配置相关步骤以及各种外设寄存器请查阅其他教程及官方资料。

​---张百川 2023.10.19

目录0x01 GPIO

GPIO定义的全部函数

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

GPIO_InitTypeDef结构体定义

typedef struct{ uint32_t Pin; /*!< 选择引脚 */ uint32_t Mode; /*!< 设置引脚模式 */ uint32_t Pull; /*!< 引脚是否上拉或下拉 */ uint32_t Speed; /*!< 设置引脚速度 */} GPIO_InitTypeDef;1.HAL_GPIO_Initvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

功能: GPIO初始化

实例:

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);2.HAL_GPIO_DeInitvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

功能:在函数初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值

实例:

HAL_GPIO_Init(GPIOC, GPIO_PIN_4);3.HAL_GPIO_ReadPinGPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:读取引脚的电平状态、函数返回值为0或1

实例:

HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4);4.HAL_GPIO_WritePinvoid HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

功能:引脚写0或1

实例:

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4,0);5.HAL_GPIO_TogglePinvoid HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

翻转引脚的电平状态

实例:

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); //常用在LED上6.HAL_GPIO_LockPinHAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:锁住引脚电平,比如说一个管脚的当前状态是1,当这个管脚电平变化时保持锁定时的值。

实例:

HAL_GPIO_LockPin(GPIOC, GPIO_PIN_4); 7.HAL_GPIO_EXTI_IRQHandlervoid HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);

功能: 外部中断服务函数,清除中断标志位

实例:

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); 8.HAL_GPIO_EXTI_Callbackvoid HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

功能: 中断回调函数,可以理解为中断函数具体要响应的动作。

实例:

HAL_GPIO_EXTI_Callback(GPIO_PIN_4); 0x02 UART

UART结构体定义

typedef struct __UART_HandleTypeDef{ USART_TypeDef *Instance; /*!< UART 寄存器地址 */ UART_InitTypeDef Init; /*!< UART 通信参数 */ UART_AdvFeatureInitTypeDef AdvancedInit; /*!< UART高级功能初始化参数 */ uint8_t *pTxBuffPtr; /*!< 指向UART Tx传输缓冲区的指针 */ uint16_t TxXferSize; /*!< UART Tx传输大小 */ __IO uint16_t TxXferCount; /*!< UART Tx传输计数器 */ uint8_t *pRxBuffPtr; /*!< 指向UART Rx传输缓冲区的指针 */ uint16_t RxXferSize; /*!< UART Rx传输大小 */ __IO uint16_t RxXferCount; /*!< UART Rx传输计数器 */ uint16_t Mask; /*!< UART Rx RDR register mask */ uint32_t FifoMode; /*!< Specifies if the FIFO mode is being used. This parameter can be a value of @ref UARTEx_FIFO_mode. */ uint16_t NbRxDataToProcess; /*!< Number of data to process during RX ISR execution */ uint16_t NbTxDataToProcess; /*!< Number of data to process during TX ISR execution */ __IO HAL_UART_RxTypeTypeDef ReceptionType; /*!< Type of ongoing reception */ void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */ void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */ DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA句柄参数 */ DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA句柄参数 */ HAL_LockTypeDef Lock; /*!< 锁定对象(项目) */ __IO HAL_UART_StateTypeDef gState; /*!< 与全局句柄管理相关的UART状态信息,也与Tx操作相关。这个参数可以是@ref HAL_UART_StateTypeDef */ __IO HAL_UART_StateTypeDef RxState; /*!< 与Rx操作相关的UART状态信息。这参数可以是@ref HAL_UART_StateTypeDef的值 */ __IO uint32_t ErrorCode; /*!< UART Error code */} UART_HandleTypeDef;1.串口发送/接收函数HAL_UART_Transmit();//串口发送数据,使用超时管理机制 HAL_UART_Receive();//串口接收数据,使用超时管理机制HAL_UART_Transmit_IT();//串口中断模式发送 HAL_UART_Receive_IT();//串口中断模式接收HAL_UART_Transmit_DMA();//串口DMA模式发送HAL_UART_Transmit_DMA();//串口DMA模式接收

这几个函数的参数基本一致

串口发送数据:

HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

功能:串口发送指定长度的数据。如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。

参数:

UART_HandleTypeDef *huart UATR的别名 如 : UART_HandleTypeDef huart1; 别名就是huart1 *pData 需要发送的数据 Size 发送的字节数Timeout 最大发送时间,发送数据超过该时间退出发送

举例:

HAL_UART_Transmit(&huart1, (uint8_t *)ZZX, 3, 0xffff); //串口发送三个字节数据,最大传输时间0xffff

中断接收数据:

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

功能:串口中断接收,以中断方式接收指定长度数据。大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。接收到数据时,会触发串口中断。再然后,串口中断函数处理,直到接收到指定长度数据,而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)

参数:

UART_HandleTypeDef *huart UATR的别名 如 : UART_HandleTypeDef huart1; 别名就是huart1 *pData 接收到的数据存放地址Size 接收的字节数

举例:

HAL_UART_Receive_IT(&huart1,(uint8_t *)&value,1); //中断接收一个字符,存储到value中2.串口中断函数HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //串口发送中断回调函数HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口发送一半中断回调函数(用的较少)HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //串口接收中断回调函数HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//串口接收一半回调函数(用的较少)HAL_UART_ErrorCallback();//串口接收错误函数

串口接收中断回调函数:

HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

功能:HAL库的中断进行完之后,并不会直接退出,而是会进入中断回调函数中,用户可以在其中设置代码,

串口中断接收完成之后,会进入该函数,该函数为空函数,用户需自行修改

参数:

UART_HandleTypeDef *huart //UATR的别名 如 : UART_HandleTypeDef huart1; 别名就是huart1

举例:

HAL_UART_RxCpltCallback(&huart1){ //用户设定的代码 }

串口中断处理函数:

HAL_UART_IRQHandler(UART_HandleTypeDef *huart);

功能:对接收到的数据进行判断和处理 判断是发送中断还是接收中断,然后进行数据的发送和接收,在中断服务函数中使用

如果接收数据,则会进行接收中断处理函数

/* UART in mode Receiver ---------------------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { UART_Receive_IT(huart); }

如果发送数据,则会进行发送中断处理函数

/* UART in mode Transmitter ------------------------------------------------*/ if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) { UART_Transmit_IT(huart); return; }3.串口查询函数HAL_UART_GetState(); //判断UART的接收是否结束,或者发送数据是否忙碌

举例:

while(HAL_UART_GetState(&huart4) == HAL_UART_STATE_BUSY_TX) //检测UART发送结束4.重新定向printf函数&scanf函数(已测试✓)1. 打开或创建工程

打开或者创建自己要用到的工程,配置串口相关的GPIO、时钟、波特率等,本次使用STM32CubeMX创建工程,打开串口1,配置波特率为115200,数据位为8,停止位为1,无奇偶校验,这里不添加相关配置图片

2.CORE(记得添加MicroLib!)

记得添加MICROLib!!!!!---在KEIL勾选USE MicroLib

2.1 添加新文件Bsp_usart_fputc.c//添加新文件Bsp_usart_fputc.c#include "Bsp_usart_fputc.h"extern UART_HandleTypeDef huart1;/** * @brief重写这个函数,重定向printf函数到串口 * * @paramNone * @retvalNone * * @attentionNone * */int fputc(int ch, FILE * f){#ifdef HAL_USARTHAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);///
网站地图