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

    文章

    3882

    浏览量

    61310
  • HAL
    HAL
    +关注

    关注

    2

    文章

    68

    浏览量

    12475
  • 系统
    +关注

    关注

    1

    文章

    981

    浏览量

    21036
收藏 人收藏

    评论

    相关推荐

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

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

    IAP升级,boot和app分别是用标准HAL写的,跳转不成功是怎么回事?

    哪里? 是不是不能混着用?我在qq群里问了下,有的朋友回复说这样用过,能行。 另在hal库里设置中断向量表,到底应该在哪个位置?看原子的标准教程,是在main函数一开始就设。 而看hal
    发表于 04-24 07:56

    STM32做IIC读写程序,利用HAL对IIC读写遇到的疑问求解

    最近在做IIC读写程序,用到HAL,发现利用HAL 对IIC读写问题,求助一下! 在HA对IIC读写操作的2个库
    发表于 04-24 06:27

    关于HALF4 V1.23下HAL_CAN_GetRxMessage接收函数的疑问求解

    最近升级到F4 V1.23的版本,发现CAN接收函数变了,非接收中断下 HAL_CAN_GetRxMessage函数只能接收到SID和数据长度 ,但是数据居然接收不到 而用接收中断时,才能正常接收
    发表于 04-19 07:52

    求助,关于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

    使用HAL提供的接口函数HAL_UART_Transmit_DMA来发送数据,全速运行时串口助手接收的数据全是0x00的原因?

    单片机使用HAL提供的接口函数HAL_UART_Transmit_DMA来发送数据,串口助手来接收数据,但是奇怪的是,当我全速运行时候,串口助手接收到的数据全部是0x00,在打断点调
    发表于 03-12 06:34

    STM32 HAL库串口同时收发,接收卡死?

    HAL库是针对STM32系列单片机的一套常用的高级抽象层库。在HAL库中,串口通信是通过针对USART外设的封装实现的。HAL库中提供了一些函数
    的头像 发表于 10-26 17:42 2439次阅读

    STM32 HAL库I2C读写操作笔记

    I2C写数据时用HAL_I2C_Master_Transmit 函数函数参数信息如下
    的头像 发表于 10-26 11:05 1138次阅读
    STM32 <b class='flag-5'>HAL</b>库I2C读写操作笔记

    请问标准外设HAL的区别是什么?

    标准外设HAL的区别是什么?
    发表于 10-23 08:01

    STC15系列常用寄存器汇总

    STC15系列常用寄存器汇总
    发表于 10-21 11:18 6次下载

    ST的LL函数接口是和HAL兼容的吗?

    ST 的LL函数接口是和HAL兼容的吗
    发表于 10-11 06:45

    ST的LLHAL可以混合使用吗?

    ST的LLHAL可以混合使用吗
    发表于 10-09 07:59

    综合布线常用公式汇总-科兰

    在做综合布线施工的时候,常常会遇到许多问题,除了施工事项之外,还有就是常常会遗忘公式。比如说如何算信息模块的需求量呢?公式是什么?下面就为大家汇总了一份综合布线常用公式。 综合布线常用公式汇总
    的头像 发表于 05-11 10:22 952次阅读