STM32L431RCT6定时器的使用以及微秒级延时的实现

STM32L431xx 系列有 1 个高级定时器(TIM1), 3 个通用定时器(TIM2、TIM15、TIM16),两个基本定时器(TIM6、TIM7),还有两个低功耗定时器(LPTIM1、LPTIM2)。基本、高级、通用定时器间的区别可以参考此博文:http://t.csdn.cn/HUkkR。下面TIM2为例实现us级的延时。

     1、设置TMI2参数:参照数据手册中的RCC时钟树,TIM2内部时钟来源是ABP1= 80Mhz ,这个速率对定时器而言太快,且我们的目的是每秒钟产生1M次中断,因此需要对其进行一个预分频处理:

                计算器的时钟频率CK_CNT=fck_psc/(PSC+1)=80Mhz/(80-1+1)=1Mhz。因此所以预分频系数设置为80-1,自动重载值为1,得到的计时器更新中断频率即为80Mhz/80/1=1MHz(1Hz即1us)。为了防止中断频繁打断正常程序的执行,因此这里进行设置时不采用中断。

               

                         

在tim.c中添加相应的代码:

void user_delaynus_tim(uint32_t nus)
{
//防止计数器增加到最大计数之后重新开始计数,将计数范围设置为60000
 uint16_t  differ = 60000-nus;

  __HAL_TIM_SetCounter(&htim2,differ);
 
  HAL_TIM_Base_Start(&htim2);

  while( differ<60000)
 {
  differ = __HAL_TIM_GetCounter(&htim2);
 };

  HAL_TIM_Base_Stop(&htim2);
}

补充说明: 

__HAL_TIM_SetCounter()函数

__HAL_TIM_SetCounter是HAL提供的一个宏定义,类似于函数,功能是通过宏来直接修改寄存器的值。其函数原型为:

#define __HAL_TIM_SetCounter            __HAL_TIM_SET_COUNTER

#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)  ((__HANDLE__)->Instance->CNT = (__COUNTER__))  //在运行时设置TIM计数器寄存器值。

  注意:请检查CNT寄存器的第31位是否用作UIF副本,如果是32位计数器TIM实例,这可能会影响计数器范围。CNT的位31可以使用__HAL_TIM_UIFREMAP_ENABLE

函数参数:__HANDLE__是需要操作的定时器

函数参数: __COUNTER__是指定计数器寄存器的新值。

HAL_TIM_Base_Start()函数

  这个函数仅仅是启动定时器而已,不会开启中断。使用这个函数的典型应用场景是需要精确地延时或查询计数器的值来判断时间。例如,我们可以设置定时器的计数周期为1微秒,然后通过查询计数器的值来实现1微秒精度的延时操作。
使用步骤如下:
    配置定时器的参数,比如时钟源、预分频系数、计数器周期等。
    通过HAL_TIM_Base_Start函数启动定时器。
    使用__HAL_TIM_GET_COUNTER函数查询计数器的值,并根据需要进行延时或者时间判断等操作。

HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)

函数参数:htim是指需要启动的定时器

返回值:HAL状态  

__HAL_TIM_GetCounter()函数

__HAL_TIM_GET_COUNTER也是HAL提供的一个宏定义,类似于函数,功能获取当前计数值。其函数原型为:

#define __HAL_TIM_GetCounter            __HAL_TIM_GET_COUNTER

#define __HAL_TIM_GET_COUNTER(__HANDLE__)  ((__HANDLE__)->Instance->CNT)

函数参数:__HANDLE__是需要获取当前计数值的定时器

返回值:定时器计数器寄存器的16位或32位值

HAL_TIM_Base_Stop()函数

这个函数的功能是停止计时器。

HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim)

函数参数:htim是指需要关闭的定时器

返回值:HAL状态

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32L431RCT6是意法半导体(STMicroelectronics)推出的一款低功耗微控制器,它基于ARM Cortex-M4内核,并且具有丰富的外设和功能。其中包括定时器模块,用于实现各种计时和定时任务。 在STM32L431RCT6中,有多个定时器模块可供使用,包括通用定时器(TIM)和基本定时器(BASIC TIM)。这些定时器模块具有不同的特性和功能,可以满足不同的应用需求。 通用定时器模块(TIM)主要用于精确的计时和周期性触发事件。它们具有多个计数器和通道,可以配置为不同的工作模式,例如定时器模式、输入捕获模式和输出比较模式。通用定时器还支持硬件定时器触发、PWM生成、编码器接口等功能。 基本定时器(BASIC TIM)是一个简化版本的通用定时器,它通常用于较简单的计时任务。基本定时器只有一个计数器和一个通道,可以配置为定时器模式或单脉冲模式。 在使用这些定时器模块时,你可以通过编程配置其工作模式、预分频因子、计数模式等参数。通过读取计数器的值,你可以获取定时器的当前计数值,从而实现精确的计时功能。同时,你还可以配置定时器的中断使能,当计数器到达设定值时,触发中断并执行相应的中断服务程序。 总之,STM32L431RCT6的定时器模块提供了丰富的功能和灵活性,可以用于各种计时和定时任务的应用场景。通过合理配置和使用这些定时器,你可以实现精确的计时控制和时间触发功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值