0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HAL库常用函数汇总

撞上电子 2023-11-29 08:00 次阅读


1,系统函数

HAL_Delay

原型:void HAL_Delay(uint32_t Delay);

作用:利用滴答定时器生成的系统延迟函数

参数

Delay:延迟时间,单位是ms

返回值:无

示例代码:

HAL_Delay(50);//延迟50ms

2,GPIO函数

HAL_GPIO_WritePin

原型:void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

作用:使得某一个GPIO的Pin的状态变成高电平或者低电平

参数:

GPIOx:引脚选择

GPIO_Pin:引脚编号选择

PinState:引脚状态设置

返回值:无

示例代码:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);//设置PB15引脚为高电平HAL_Delay(500);//延时500msHAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);//设置PB15引脚为低电平HAL_Delay(500);//延时500ms

HAL_GPIO_TogglePin

原型:void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

作用:使得某一个GPIO的Pin的状态翻转

参数:

GPIOx:引脚选择

GPIO_Pin:引脚编号选择

返回值:无

示例代码:

HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15);//设置PB15引脚翻转,如果原先是低电平,现在就是高电平;如果原先是高电平,现在就是低电平。

HAL_GPIO_ReadPin

原型:GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

作用:读取某一个GPIO的Pin的状态翻转

参数:

GPIOx:引脚选择

GPIO_Pin:引脚编号选择

返回值:某一个GPIO的Pin的状态。

GPIO_PIN_SET:当前状态为高电平

GPIO_PIN_RESET:当前状态为低电平

示例代码:

if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==GPIO_PIN_RESET)//判断PB15为低电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);//设置PB14引脚为高电平

3,UART函数

printf重定向

原型:int fputc(int c,FILE *stream);

作用:printf重定向

参数:系统参数,无需关心

返回值:系统参数,无需关心

示例代码:

int fputc(int c,FILE *stream)//需要引用头文件:stdio.h{ HAL_UART_Transmit(&huart1,(uint8_t *)&c,1,100);//注意,这里重定向是串口1 return c;}

HAL_UART_Transmit

原型:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size,uint32_t Timeout);

作用:串口以阻塞式发送数据

参数:

huart:串口号选择

pData:发送的数据

Size:发送数据的长度

Timeout:超时时间,代表执行函数时,最多占用串口的时间,单位是毫秒

返回值:无

示例代码:

unsigned char str[]={"hello world"};//需要发送的数据HAL_UART_Transmit(&huart1,str,sizeof(str),100);//串口1在100ms以内发送数据

HAL_UART_Receive_IT

原型:HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size);

作用:串口以中断方式接收数据

参数:

huart:串口号选择

pData:发送的数据

Size:发送数据的长度

返回值:无

示例代码:

unsigned char str[1];//接收数据存放位置HAL_UART_Receive_IT(&huart1,str,1);//串口接收数据 //串口接收完成的中断回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(str[0]==0x80)//判断接收的数据是否为0x80 HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);//翻转PB5电平}

HAL_UART_RxCpltCallback

原型:__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

作用:串口接收完成的中断回调函数

参数:系统参数,无需关心

返回值:无

示例代码:

unsigned char str[1];//接收数据存放位置HAL_UART_Receive_IT(&huart1,str,1);//串口接收一个数据 //串口接收完成的中断回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(str[0]==0x80)//判断接收的数据是否为0x80 HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);//翻转PB5电平}

3,IIC函数

HAL_I2C_Master_Transmit

原型:HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);

作用:IIC以主机模式发送数据

参数:

hi2c:IIC编号

DevAddress:写入的地址

pData:写入的数据

Size:写入数据的字节数

Timeout 最大传输时间,超过传输时间将自动退出传输函数

返回值:无

示例代码:

uint16_t Address=0x1234;uint8_t TxData[2]={0x11,0x22}; //在100ms以内,使用IIC1,采用主机模式,向地址0x1234写入数据0x11和0x22 HAL_I2C_Master_Transmit(&hi2c1,I2C1_WRITE_ADDRESS,(uint8_t*)TxData,2,100);

4,SPI函数


HAL_SPI_TransmitReceive

原型:HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);

作用:SPI以阻塞模式发送数据并接收返回值

参数:

hspi:SPI编号

pTxData:写入的数据

pRxData:读取的数据

Size:写入数据的字节数

Timeout:最大传输时间,超过传输时间将自动退出函数

返回值:无

示例代码:

uint8_t TxData[2]={0x11,0x22};uint8_t RxData[2]; //在100ms以内,使用SPI1,写入0x11和0x22,并等待接收的返回值HAL_SPI_TransmitReceive(&spi1,(uint8_t*)TxData,(uint8_t*)TxData,2,100);

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4350

    浏览量

    63052
  • HAL
    HAL
    +关注

    关注

    2

    文章

    71

    浏览量

    12702
  • 系统
    +关注

    关注

    1

    文章

    1020

    浏览量

    21447
收藏 人收藏

    评论

    相关推荐

    HAL在Arduino平台上的使用

    HAL在Arduino平台上的使用 Arduino平台是一个开源的电子原型平台,它包括硬件(基于微控制器的电路板)和软件(Arduino IDE)。Arduino平台因其简单易用而受到广泛欢迎
    的头像 发表于 12-02 14:04 534次阅读

    HAL和标准的区别 HAL与CMSIS的关系

    在嵌入式系统开发中,HAL(硬件抽象层)和标准是两种常用的软件,它们在功能和使用场景上有所不同。 1. 标准
    的头像 发表于 12-02 14:02 1414次阅读

    HAL函数调用示例

    HAL(Hardware Abstraction Layer,硬件抽象层)是STM32等微控制器中常用,它为开发者提供了访问和控制硬件设备的接口。以下是一些
    的头像 发表于 12-02 14:01 704次阅读

    HAL在STM32开发中的重要性

    开发过程 HAL提供了一套完整的函数接口,用于操作STM32微控制器的各种外设和功能模块。这些函数接口封装了底层硬件的复杂性,使得开发者无需深入了解硬件细节即可实现功能。因此,
    的头像 发表于 12-02 13:35 625次阅读

    如何快速入门HAL编程 HAL与裸机编程的比较

    如何快速入门HAL编程 要快速入门HAL编程,可以遵循以下步骤: 了解基础知识 : 掌握C语言编程基础,包括变量、数据类型、函数、指针等
    的头像 发表于 12-02 11:39 495次阅读

    HAL在嵌入式系统中的应用

    HAL(Hardware Abstraction Layer Library,硬件抽象层)在嵌入式系统中扮演着至关重要的角色。以下是HAL
    的头像 发表于 12-02 11:32 992次阅读

    常用SQL函数及其用法

    SQL(Structured Query Language)是一种用于管理和操作关系数据的编程语言。SQL 提供了丰富的函数库,用于数据检索、数据更新、数据删除以及数据聚合等操作。以下是一些常用
    的头像 发表于 11-19 10:18 503次阅读

    labview常用的基本函数

    电子发烧友网站提供《labview常用的基本函数.pdf》资料免费下载
    发表于 10-15 17:29 7次下载

    手把手带你移植HAL函数

    开发者更高效地进行嵌入式开发。手把手带你移植HAL函数HAL提供了一套抽象接口,使开发者无需直接操作底层硬件寄存器,就能实现对硬件的控制。这种抽象使得代码能够更
    的头像 发表于 05-18 08:04 2194次阅读
    手把手带你移植<b class='flag-5'>HAL</b>库<b class='flag-5'>函数</b>

    老版本的TIM_SetCompare2(TIM2, TIMCompare2);函数,在HAL里面对应的是那个函数

    老版本的TIM_SetCompare2(TIM2, TIMCompare2);函数,在HAL里面对应的是那个函数? 老版本的TIM_Se
    发表于 05-15 06:09

    HAL的串口收发函数HAL的串口DMA方式下不能实现独立的全双工通信吗?

    昨天看HAL的串口收发函数,DMA方式,发现函数里竟然有收发同步的操作,但不太确定,莫非HAL的串口DMA方式下不能实现独立的全双工通信么
    发表于 05-14 06:17

    使用HALSPI读不到数据的原因?

    一直是locked 不知道为什么会出现lock之后没有unlock的情况 因为程序同时只会有一个地方调用SPI函数,所以我在每次发送前将state和lock的值修改了 这样修改之后就没有再出问题了 HAL研究不深,不知道这是B
    发表于 04-26 07:41

    求助,关于HALHAL_UART_Receive使用问题求解

    各位好,我在使用HALHAL_UART_Receive()函数时遇到了这样的问题,在第一次使用HAL_UART_Receive()进行接
    发表于 04-10 07:25

    函数硬件nss有使能spi函数SPI_Cmd(),但是HAL没有找到,怎么使用硬件NSS呢?

    函数硬件nss有使能spi函数SPI_Cmd(),但是HAL没有找到,怎么使用硬件NSS呢? 以及主机选择硬件nss怎么片选从机?是直接发送不用管嘛? 从机选择硬件nss怎么接收数
    发表于 03-28 10:01

    STM32G HALHAL_init()代码中,为什么SysTick_Config函数不调用?

    STM32G HALHAL_init()代码中,为什么SysTick_Config函数不调用?
    发表于 03-12 07:46