STM32 HAL库常用函数(早期学习备份版)

这篇具有很好参考价值的文章主要介绍了STM32 HAL库常用函数(早期学习备份版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

GPIO

 读取电平

 电平设置

翻转IO口电平

NVIC

 中断回调函数

 switch选择中断线

定时器中断回调函数

UART中断回调函数

Timers

定时器开关函数

开启定时器及中断

关闭定时器及中断

开启定时器

关闭定时器

PWM开启定时器

PWM关闭定时器

读写定时器相关值的函数

设置比较值

获取当前比较值

设置重载数值

获取重载数值

设置计数值

获取计数值

微秒级延时函数(放在tim.c中)

开启定时器,并修改htimx

UART

 串口发送数据函数

printf格式化输出

 改写printf调用的fputc函数(放在main函数前)

调用printf

串口接收数据函数

scanf接收数据

 改写scanf调用的fgetc函数(放在main函数前)

调用scanf

利用中断的串口发送数据函数

利用中断的串口接收数据函数(使用数组应用全局变量)

ADC

 ADC启动函数

 ADC关闭函数

ADC启动函数并打开中断

 ADC关闭函数并关闭中断

 查询ADC转化完成标志(等待转换)

获取ADC数值

使用DMA获取ADC数值(创建volatile uint16_t adc_value[4];数组)

RTC

 读取系统时间(时分秒)

  读取系统日期(年月日)

获取日期时间结构体声明

 打印范例

 掉电恢复解决方案


GPIO

 写入电平

  • void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
  •  例如:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

 读取电平

  •  HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
  •  例如:HAL_GPIO_ReadPin(GPIOH, GPIO_PIN_2);

 电平设置

  •  GPIO_PIN_RESET          0
  •  GPIO_PIN_SET               1

翻转IO口电平

  •  void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
  •  例如:HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);

NVIC

 中断回调函数

  •  void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)  {}

 switch选择中断线

switch(GPIO_Pin)

{

case GPIO_PIN_2:

//内容1

break;

case GPIO_PIN_3:

//内容2

break;

case GPIO_PIN_13:

//内容3

break;

}

定时器中断回调函数

  •  void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)   {}

UART中断回调函数

发送中断回调

  • void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)   {}

接收中断回调

  • void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)   {}

ADC中断回调函数

  •  void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)   {}

Timers

定时器开关函数

开启定时器及中断

  •  HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  • 例如:HAL_TIM_Base_Start_IT(&htim2);

关闭定时器及中断

  •  HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)
  •  例如:HAL_TIM_Base_Stop_IT(&htim2);

开启定时

  •  HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
  •  例如:HAL_TIM_Base_Start(&htim2);

关闭定时

  •  HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim)
  •  例如:HAL_TIM_Base_Stop(&htim2);

PWM开启定时

  •  HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
  •  例如:HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);

PWM关闭定时

  •  HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
  •  例如:HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);

读写定时器相关值的函数

设置比较值

  •  __HAL_TIM_SetCompare (__HANDLE__, __CHANNEL__, __COMPARE__)
  • 例如:__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,1000);

获取当前比较值

  •  __HAL_TIM_GetCompare (__HANDLE__, __CHANNEL__)
  • 例如:__HAL_TIM_GetCompare(&htim3,TIM_CHANNEL_3);

设置重载数值

  •  __HAL_TIM_SetAutoreload (__HANDLE__, __AUTORELOAD__)
  • 例如:__HAL_TIM_SetAutoreload(&htim3,1000);

获取重载数值

  •  __HAL_TIM_GetAutoreload (__HANDLE__)
  • 例如:__HAL_TIM_GetAutoreload(&htim3);

设置计数值

  •  __HAL_TIM_SetCounter (__HANDLE__,__COUNTER__)
  • 例如:__HAL_TIM_SetCounter(&htim3,1000);

获取计数值

  •  __HAL_TIM_GetCounter (__HANDLE__)
  • 例如:__HAL_TIM_GetCounter(&htim3);

微秒级延时函数(放在tim.c中)

开启定时器,并修改htimx

 void delay_us(uint16_t us)

{

uint16_t differ = 0xffff-us-5;

__HAL_TIM_SET_COUNTER(&htim7,differ); //设定TIM7计数器起始值

HAL_TIM_Base_Start(&htim7); //启动定时器

while(differ < 0xffff-5)

{ //判断

differ = __HAL_TIM_GET_COUNTER(&htim7); //查询计数器的计数值

}

HAL_TIM_Base_Stop(&htim7);

}

UART

 串口发送数据函数

  •  HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size,uint32_t Timeout)
  • 例如:HAL_UART_Transmit(&huart1,(uint8_t*)"wangzenb",8,0xFFFFF);

printf格式化输出

 改写printf调用的fputc函数(放在main函数前)

int fputc(int c,FILE *stream)

{

uint8_t ch[1]={c};

HAL_UART_Transmit(&huart1,ch,1,0xFFFFF);

return c;

}

调用printf

  • 例如:printf("wangzenb%d\n\r",123);

串口接收数据函数

  •  HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
  • 例如:HAL_UART_Receive(&huart1,buf,3,0xFFFF);

scanf接收数据

 改写scanf调用的fgetc函数(放在main函数前)

int fgetc(FILE *stream)

{

uint8_t ch[1];

HAL_UART_Receive(&huart1,ch,1,0xFFFF);

return ch[0];

} 

调用scanf

  • 例如:scanf("%d",&val);

利用中断的串口发送数据函数

  •  HAL_UART_Transmit_IT(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size)
  • 例如:HAL_UART_Transmit_IT(&huart1,(uint8_t*)"wangzenb",8);

利用中断的串口接收数据函数(使用数组用全局变量)

  •  HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  • 例如:HAL_UART_Receive_IT(&huart1,buf,3);

ADC

 ADC启动函数

  •  HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)
  •  例如:HAL_ADC_Start(&hadc1);

 ADC关闭函数

  •  HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc)
  •  例如:HAL_ADC_Stop(&hadc1);

ADC启动函数并打开中断

  •  HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc)
  •  例如:HAL_ADC_Start_IT(&hadc1);

 ADC关闭函数并关闭中断

  •  HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc)
  •  例如:HAL_ADC_Stop_IT(&hadc1);

 查询ADC转化完成标志(等待转换)

  •  HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc,uint32_t Timeout)
  •  HAL_ADC_PollForConversion(&hadc1,50);

获取ADC数值

  •  uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)
  •  例如:HAL_ADC_GetValue(&hadc1);

使用DMA获取ADC数值(创建volatile uint16_t adc_value[4];数组)

  •  HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
  •  例如:HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adc_value,8);

RTC

 读取系统时间(时分秒)

  •  HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
  •  例如:HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);

  读取系统日期(年月日)

  •  HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
  •  例如:HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);

获取日期时间结构体声明

  • RTC_DateTypeDef GetData;  //获取日期结构体
  • RTC_TimeTypeDef GetTime;  //获取时间结构体

 打印范例

  • printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);
  • printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds); 

 掉电恢复解决方案

rtc.c中声明函数

  • void user_CheckRtcBkup()
  •    {
  •      HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 1);
  • } 

修改void MX_RTC_Init(void)函数文章来源地址https://www.toymoban.com/news/detail-833838.html

  •  /* USER CODE BEGIN Check_RTC_BKUP */
  •          if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1)==1)
  •       {
  •                return;
  •           }
  •      /* USER CODE END Check_RTC_BKUP */

到了这里,关于STM32 HAL库常用函数(早期学习备份版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32 hal库 GPIO初始化函数MX_GPIO_Init()梳理分析、初步细致学习(二)

    目录 一、GPIO外设时钟初始化 二、配置GPIO 2.1 配置 GPIO_InitTypeDef结构体成员变量  2.2 把参数写到对应寄存器 2.2.1 io口的配置 2.2.2 外部中断的配置 三、相关知识分析 3.1 hal_gpio其他函数简单分析 3.1.1 HAL_GPIO_DeInit(); 3.1.2  HAL_GPIO_ReadPin(); 3.1.3  HAL_GPIO_WritePin(); 3.1.4  HAL_GPIO_Togg

    2024年02月04日
    浏览(78)
  • STM32 HAL库函数——HAL_UART_RxCpltCallback()详解

    HAL_UART_RxCpltCallback 是一个回调函数,用于在使用 HAL 库进行串口接收时处理接收完成事件。当使用 HAL_UART_Receive_IT 函数启动串口接收并且接收到指定数量的数据后,HAL 库会自动调用 HAL_UART_RxCpltCallback 函数。 回调函数是一种特殊的函数,它在特定事件发生时由系统或库调用,

    2024年02月13日
    浏览(38)
  • # HAL库STM32常用外设教程(四)—— 基础定时器

    1、STM32F407ZGT6 2、STM32CubeMx软件 3、keil5 内容简述: 通篇文章将涉及以下内容,如有错误,欢迎指出 : 1、基础定时器特性 2、基础定时器的结构和功能 3、基础定时器HAL库驱动程序 (1)CubeMx配置 (2)TIM驱动程序   STM32F407有2个高级控制定时器(TIM1、TIM8)、8个通用定时器和

    2024年02月04日
    浏览(55)
  • STM32_HAL库串口接收相关函数分析

    串口接收的程序整体分为三个部分:初始化部分,开启中断部分,中断函数部分: 初始化部分: 该部分主要完成相关引脚的初始化,串口的初始化(设置波特率,校验位,字长等),为了逻辑清晰,把初始化相关代码放在本文的最后。 开启中断部分: 调用HAL_UART_Receive_IT函数

    2024年02月16日
    浏览(41)
  • STM32的HAL库开发各函数意义、笔记

    快速查阅相关函数,请从目录查找 在STM32F103中, GPIOB-BSRR |= GPIO_PIN_7  的作用是将GPIOB的第7位引脚设置为高电平(将引脚置1),而 GPIOB-BRR |= GPIO_PIN_7  的作用是将GPIOB的第7位引脚设置为低电平(将引脚置0)。下面是对这两个语句的详细说明: GPIOB-BSRR |= GPIO_PIN_7 : GPIOB 是ST

    2024年02月05日
    浏览(44)
  • STM32cubeIDE HAL库中断服务函数解读

    以stm32f103为例 在开启一个中断后,首先会在stm32f1xx_it.c找到自动生成的中断处理函数,这里是TIM1产生的定时器中断:  这个函数又调用了 stm32f1xx_hal_tim.c 中的 HAL_TIM_IRQHandler(htim1),这个htim1是通用定时器的结构体,其定义为 这个结构体的意义可以参考第25章 STM32F429的TIM定时器

    2024年02月02日
    浏览(68)
  • STM32 HAL库的串口中断服务函数详解

    最近在实现利用上位机通过串口发送指令给下位机执行操作的实验,在之前学习串口的过程中我就一直有一个疑惑,那就是为什么在串口中断回调函数内除了要加上自己的操作以外还要在末尾再执行一次 接收中断 ,在查阅了一些资料后我才发现原来和 中断服务函数 有关 我

    2024年02月10日
    浏览(43)
  • STM32 HAL库函数——HAL_UART_Transmit_IT()详解

    HAL_UART_Transmit_IT 函数的用法如下: 输入参数: huart :指向UART句柄结构体的指针,用于指定要使用的UART外设。 pData :指向要发送数据缓冲区的指针,可以是 uint8_t 类型或 uint16_t 类型的数据。 Size :要发送的数据大小,以数据元素( uint8_t 或 uint16_t )的数量表示。 返回值:

    2024年02月08日
    浏览(37)
  • STM32 HAL库函数——HAL_UART_Receive_IT()详解

    huart :UART句柄,指向要使用的UART外设。 pData :指向数据缓冲区的指针,用于存储接收到的数据。 Size :要接收的数据元素(u8或u16)的数量。 返回值类型为 HAL_StatusTypeDef ,表示函数执行的状态。可能的返回值有: HAL_OK :函数执行成功。 HAL_ERROR :函数执行过程中发生错误

    2024年02月08日
    浏览(42)
  • STM32 HAL库 中断处理中使用延时函数(HAL_Delay)

    今天在学习STM32 HAL库外部中断,使用的是按键触发外部中断,想在外部中断里面写一个按键消抖,也就是在HAL库外部中断处理函数中使用了HAL_Delay() 函数,后来经过实验,在外部中断处理函数(void EXTI1_IRQHandler(void))和中断回调函数(void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin))里面都

    2024年03月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包