首页 > 其他分享 >STM32 HAL常用库函数

STM32 HAL常用库函数

时间:2023-09-06 20:36:38浏览次数:45  
标签:HAL 函数 PIN STM32 TIM 参数 GPIO 库函数

1.设置GPIO引脚函数
函数名称:void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,
GPIO_PinState PinState);
第一个参数:GPIOA,B,C,D…(取决于单片机型号)
第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15
第三个参数:GPIO_PIN_SET(置高电平),GPIO_PIN_RESET(置低电平)
例:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);//将PA0置高电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);//将PA0置低电平


2.读取GPIO引脚函数
函数名称:GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t
GPIO_Pin);
第一个参数:GPIOA,B,C,D…(取决于单片机型号)
第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15
返回值:返回"0",对应引脚为低电平,返回"1",对应引脚为高电平。
例:

uint8_t pinstate = 0;
pinstate = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);


3.GPIO引脚翻转函数
函数名称:void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
函数功能:若引脚为低电平,则变为高电平;若为高电平,则变为低电平。
第一个参数:GPIOA,B,C,D…(取决于单片机型号)
第二个参数:可以取GPIO_PIN_0~GPIO_PIN_15
4.串口发送函数
函数名称:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size, uint32_t Timeout);
函数功能:向串口发送数据(字符串)
第一个参数:哪一个串口
第二个参数:数据指针,指针类型为uint8_t *
第三个参数:数据长度
第四个参数:超时时间,单位是ms
2/4
返回值:HAL状态。有四种状态,分别是HAL_OK,HAL_ERROR,HAL_BUSY,
HAL_TIMEOUT。
例:

HAL_UART_Transmit(&huart1, "Hello World!!", 13, 100);//向串口1发送Hello World!!


5.printf串口发送函数(重写fputc)
我用过两个版本的fputc,分别对应不同的stm32单片机型号,因为它们的USART寄存器不
一样。
版本一:

int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (uint8_t) ch;
return ch;
}


版本二:

int fputc(int ch,FILE *f)
{
while(!((USART1->ISR)&(1<<7)));
USART1->TDR = ch;
return ch;
}


6.延时函数
函数名称:void HAL_Delay(uint32_t Delay);
函数功能:毫秒延时函数
参数:延时时间,单位ms

HAL_Delay( time );


7.定时器中断函数
需要重写HAL_TIM_PeriodElapsedCallback函数,直接看例子:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static unsigned char ledState = 0;
if (htim == (&htim2))//TIM2的中断服务函数
{
if (ledState == 0)
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);
ledState = !ledState;
}
}


若使用定时器中断,还需先打开定时器中断,相关函数如下:

HAL_TIM_Base_Start_IT(&htim2);//开定时器中断函数
HAL_TIM_Base_Stop_IT(&htim2);//关闭时器中断函数



8.PWM相关函数
函数名称:HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim,
uint32_t Channel);
第一个参数:哪个定时器
第二个参数:哪个通道
返回值:HAL状态,与第四个串口发送函数返回只相同。
例:

HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2);//开启定时器5,第二个通道的PWM


pwm修改占空比:__HAL_TIM_SetCompare

__HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_2, 100);//即TIM5,第二个通道的比较值改为100,


通过修改比较值修改占空比
也可以使用寄存器修改,同样很方便:

TIM5->CCR2 = 100;

 

9.获取当前毫秒数

#include "stm32fxxx_hal.h"

int main(void)
{
    HAL_Init();

    while (1)
    {
        uint32_t currentTick = HAL_GetTick();
        // 在这里使用 currentTick 进行所需的操作
    }
}

 

标签:HAL,函数,PIN,STM32,TIM,参数,GPIO,库函数
From: https://www.cnblogs.com/aker-whale/p/17683286.html

相关文章

  • 基于高性能Cortex®-M33内核STM32H562RIV6、STM32H562RIT6、STM32H562RGV6 32-bit ARM
    简介STM32H562xx器件是基于高性能ARM®Cortex®-M3332位RISC内核的高性能微控制器系列(STM32H5系列)。它们的工作频率高达250MHz。Cortex®-M33内核具有单精度浮点单元(FPU)、支持所有ARM®单精度数据处理指令和所有数据类型。该系列微控制器具有1至2MB的Flash存储器、640KB的SRA......
  • 探索STM32F030的低功耗特性及应用场景
    TM32F030是意法半导体推出的一款低功耗微控制器,它采用ARMCortex-M0内核,带有丰富的外设和高度灵活的可编程性,适用于多种应用场景。本文将探索STM32F030的低功耗特性及其应用场景。STM32F030参数详情。一、STM32F030的低功耗特性1.低功耗模式STM32F030可以进入多种低功耗模式,包......
  • A Challenge Dataset and Effective Models for Aspect-Based Sentiment Analysis
    摘要基于方面的情感分析(ABSA)由于其广泛的应用,近年来受到了越来越多的关注。在现有的ABSA数据集中,大多数句子只包含一个或多个具有相同情感极性的方面,这使得ABSA任务退化为句子级情感分析。在本文中,我们提出了一个新的大规模多方面多情感(MAMS)数据集,其中每个句子至少包含两个具有不......
  • STM32深入学习4:标准库
    掌握的标准:1.搞清楚库对STM32硬件的封装和表达方式2.彻底理解苦衷使用的结构体式访问硬件寄存器的方式3.初步建立起面向对象式编程的概念4.以模块为单位去研究模块的库函数,并且用库函数编程,实验结果,分析代码,从而熟悉库函数的使用方法5.思维能够穿透库函数直达内部对寄存器的......
  • challenge1-MFQ
    #challenge1-MFQlab4环境调度部分的challenge:多级反馈队列(MFQ)调度算法chellenge原文:向内核添加一个不那么简单的调度策略,例如一个固定优先级的调度器,使每个环境都有一个优先级,确保优先选择优先级高的环境,而不是优先级低的环境。如果你喜欢冒险,可以尝试实现unix风格的可调......
  • STM32深入学习3:GPIO模块控制LED(寄存器版)
    GPIO模块数据手册详解:GPIO:通用输入/输出AFIO:备用输入/输出GPIOx_CRL和GPIOx_CRH:配置寄存器GPIOx_IDR和GPIOx_ODR:数据寄存器GPIOx_BSRR:置位/复位寄存器GPIOx_BRR:复位寄存器GPIOx_LCKR:锁定寄存器,锁定GPIO的数值GPIO模式:1.输入浮动:完全由外部决定2.输入上拉和输入下拉:存在......
  • STM32基础(一)
    1.Keil5MDK下载。  2.自己画板子,需了解封装。51单片机是5V供电,USB输出电压也是5V。STM32单片机不能5V直接供电,需要加稳压芯片,把电压降到3.3V。USB输出电压也是5V。 3.片上资源(外设) ......
  • 基于qsot库函数进行排序
    #include<stdio.h>#include<stdlib.h>intcmp_int(constvoid*e1,constvoid*e2){//进行比较return(int)e1-(int)e2;}intcmp_f(constvoid*e1,constvoid*e2){if((float)e1>(float)e2){return1;}elseif((float)e1==(float)e2){retu......
  • stm32在oled上实现多级菜单(基于链表)
    为了提高OLED显示多级菜单的易用性,手搓了基于链表的多级菜单的代码。主要有如下特点:1:需要配置地方少,后续新加菜单只需在初始化的时候添加,以及自己实现按键事件的回调函数即可。2:事件驱动,按键事件通过队列接收。因此,整个过程中,重写按键程序,消息队列,以及多级菜单框架。复习下双......
  • hal库中串口常用函数介绍
    串口常用函数介绍串口发送**/****接收函数:**HAL_UART_Transmit();串口发送数据,使用超时管理机制HAL_UART_Receive();串口接收数据,使用超时管理机制HAL_UART_Transmit_IT();串口中断模式发送HAL_UART_Receive_IT();串口中断模式接收HAL_StatusTypeDefHAL_UART_Transmit(UART_Ha......