HAL库各外设常用函数

本文介绍了STM32中使用HAL库进行TIM定时器配置,包括PWM输出、占空比调整、频率修改以及编码器模式。同时涵盖了GPIO操作,如设置电平、读取电平和电平反转,以及非阻塞模式下的回调函数和相关参数说明。
摘要由CSDN通过智能技术生成

1、TIM定时器

(1)PWM输出

HAL_TIM_PWM_Start(&htimx, TIM_CHANNEL_x);

(2)占空比修改

TIMx->CCRx=xxx;

(3)频率修改

TIM9->PSC=26680;

(4)编码器模式

HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);      //开启编码器定时器

__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE);           //开启编码器定时器更新中断,防溢出处理

(5)基础定时器中断

HAL_TIM_Base_Start_IT(&htim6);

HAL库配置PWM函数

/* Blocking mode: Polling */

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);

/* Non-Blocking mode: Interrupt */

HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

/* Non-Blocking mode: DMA */

HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);

HAL_StatusTypeDef HAL_TIM_PWM _Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);

回调函数声明

/* Callback in non blocking modes (Interrupt and DMA) *************************/

__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

   

@brief  Period elapsed callback in non-blocking mode

 在非阻塞模式下定时器超时的回调函数

__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim)

@brief  Period elapsed half complete callback in non-blocking mode

在非阻塞模式下定时器计数超过一半的回调函数

 

 __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)

@brief  Output Compare callback in non-blocking mode

在非阻塞模式下输出比较回调函数

__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

@brief  Input Capture callback in non-blocking mode

在非阻塞模式下输入捕获回调函数

__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim)

@brief  Input Capture half complete callback in non-blocking mode

在非阻塞模式下的输入捕获一半回调函数

__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)

@brief  PWM Pulse finished callback in non-blocking mode

在非阻塞模式下的PWM脉冲结束回调函数

__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim)

@brief  PWM Pulse finished half complete callback in non-blocking mode

如上一半

__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)

@brief  Hall Trigger detection callback in non-blocking mode

在非阻塞模式下的hall触发回调函数,这里可能是计数器启动、停止、初始化或者由内部/外部触发计数

__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim)

@brief  Hall Trigger detection half complete callback in non-blocking mode

如上一半

定时器初始化中的几个参数

#define TIM_CHANNEL_1                      0x00000000U                          /*!< Capture/compare channel 1 identifier      */

#define TIM_CHANNEL_2                      0x00000004U                          /*!< Capture/compare channel 2 identifier      */

#define TIM_CHANNEL_3                      0x00000008U                          /*!< Capture/compare channel 3 identifier      */

#define TIM_CHANNEL_4                      0x0000000CU                          /*!< Capture/compare channel 4 identifier      */

#define TIM_CHANNEL_ALL                    0x0000003CU                          /*!< Global Capture/compare channel identifier  */

 

2、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置低电平

 

读取电平函数

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint8_t pinstate = 0;

pinstate = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

 

电平反转函数

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

(2)寄存器操作

GPIOx->ODR |= GPIO_PIN_x                 //GPIO口设置高

GPIOx->ODR &= ~GPIO_PIN_x             //GPIO口设置低

GPIOx->ODR ^= GPIO_PIN_x               //IO口电平反转

pinstate = GPIOx->IDR&GPIO_PIN_x     //读取GPIO口电平状况

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值