蓝桥杯嵌入式学习笔记——定时器

本文详细介绍了STM32G431RB处理器上不同类型的定时器(高级、通用和普通)的使用,包括定时中断配置、输入捕获功能以及PWM输出的设置。通过STM32CubeMX进行配置并提供中断回调函数示例。
摘要由CSDN通过智能技术生成

前言

STM32G431RB共有10个定时器;

高级定时器:TIM1、TIM8

通用定时器:TIM2-5、TIM15-17

普通定时器:TIM6-7

一、首先是定时器的基础应用定时中断,这里配置定时器6产生10ms中断为例。

STM32CubeMX配置

配置完参数后使能中断,点击“GENERATE COOE”等待软件更新工程配置。

keil

//初始化定时器需要调用,参数为定时器编号
HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);//启动定时器
//需要停止定时器调用,参数为定时器编号
HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);//停止定时器
//中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);


//定时器6定时中断示例
HAL_TIM_Base_Start_IT(&htim6);//启动定时器

//定时器中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM6)//判断是否是TIM6的中断
	{
      /*
          需要定时的执行代码
      */	
	}
}

二、定时器的输入捕获

STM32CubeMX配置

配置完参数后使能中断,点击“GENERATE COOE”等待软件更新工程配置。

keil

//开启定时器输入捕获初始化时调用
//参数1:定时器编号
//参数2:定时器通道
HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
//中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);




//定时器2通道1输入捕获示例
unsigned int ccr_val=0,frq=0;

HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_1);//启动定时器捕获

//中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM2)
	{
		ccr_val = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);//读取计时值
		
		frq = 1000000/ccr_val;//计算频率
		
		__HAL_TIM_SetCounter(htim,0);//清除计时值
		
		//HAL_TIM_IC_Start_IT(htim,TIM_CHANNEL_1);//重启定时器
	}
}

三、定时器的输出pwm

STM32CubeMX配置

配置完参数后使能中断,点击“GENERATE COOE”等待软件更新工程配置。

keil

修改pwm的占空比、频率,方法1
//pwm输出初始化调用
HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);




/* 
   功 能:修改占空比

   参数1:定时器编号
   参数2:通道
   参数3:比较值(占空比)
*/
__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__);





//修改预分频值
//参数1:定时器编号
//参数2:分频值
__HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__);

//修改重装载值
//参数1:定时器编号
//参数2:重装载值
__HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__)


//修改预分频值或重装载值后需要调用
//参数1:定时器编号
//参数2:指定事件源 (计时器更新事件源: TIM_EVENTSOURCE_UPDATE)
HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);





修改pwm的占空比、频率,方法2

/*
  直接操作寄存器
  决定输出pwm占空比的比较值寄存器是  CCRx
  定时器的重装载值 ARR
*/


//用定时器17的通道1举例

//假设初始化时配置的参数为预分频值为 8-1 ,重装载值 1500-1 ,占空比为150-1
//那么输出的pwm为4khz,占空比为10%


//修改占空比为50%,只需修改比较值
TIM17->CCR1 = TIM17->ARR/2;


//修改pwm频率为8k
TIM17->ARR= 750 - 1;

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值