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口电平状况
本文介绍了STM32中使用HAL库进行TIM定时器配置,包括PWM输出、占空比调整、频率修改以及编码器模式。同时涵盖了GPIO操作,如设置电平、读取电平和电平反转,以及非阻塞模式下的回调函数和相关参数说明。
5330

被折叠的 条评论
为什么被折叠?



