学习STM32的定时器和中断

【前言】 STM32是意法半导体(STMicroelectronics)推出的一款32位单片机系列,具有丰富的外设资源和强大的性能,广泛应用于工业控制、通信、医疗等领域。定时器(Timer)和中断(Interrupt)是STM32中常用的功能模块,本文将详细介绍STM32的定时器和中断的使用方法,并通过多个代码案例进行演示。

【目录】 一、定时器简介 1.1 STM32定时器分类 1.2 定时器的基本原理 1.3 定时器相关寄存器介绍

二、定时器的使用方法 2.1 定时器的初始化配置 2.2 定时器的启动和停止 2.3 定时器的计数值获取 2.4 定时器的中断配置

三、定时器中断的使用方法 3.1 中断优先级配置 3.2 中断服务函数编写 3.3 中断的使能和禁用

四、案例演示 案例一:使用定时器实现LED闪烁 案例二:使用定时器测量外部脉冲信号的频率 案例三:定时器中断处理PWM波形的输出

五、总结与展望

【正文】

一、定时器简介 1.1 STM32定时器分类 STM32的定时器包括通用定时器(General Purpose Timer)和高级定时器(Advanced Timer),其中通用定时器又分为基本定时器(Basic Timer)和通用定时器(General Purpose Timer)。基本定时器只能用于简单的定时和计数,而通用定时器则具有更多的功能和灵活性。 基本定时器和通用定时器的主要区别在于:

  • 基本定时器只有一个计数器,而通用定时器有多个计数器。
  • 基本定时器的计数值范围有限(根据具体型号而定),而通用定时器的计数值范围更广泛。
  • 通用定时器具有更多的输入捕获、输出比较、PWM等功能。

1.2 定时器的基本原理 定时器的基本原理是通过一个时钟源来驱动定时器的计数器,当计数器的值达到设定的目标值后,产生中断或触发其他相关事件。定时器的时钟源可以是内部时钟(如内部RC振荡器)或外部时钟(如外部晶振或外部信号)。

1.3 定时器相关寄存器介绍 STM32的定时器模块有多个相关寄存器,常用的有以下几个:

  • TIMx_CR1:定时器控制寄存器1,用于配置定时器的工作模式、计数模式、时钟源等。
  • TIMx_PSC:预分频器寄存器,用于设置定时器的时钟预分频系数。
  • TIMx_ARR:自动重装载寄存器,用于设置定时器的计数器自动重新加载的值。
  • TIMx_CCRx:比较寄存器,用于设置比较通道的比较值。
  • TIMx_CNT:计数器寄存器,用于读取或写入当前计数值。
  • TIMx_SR:状态寄存器,用于判断定时器中断标志等。
  • TIMx_DIER:中断使能寄存器,用于使能或禁用定时器中断。

二、定时器的使用方法 2.1 定时器的初始化配置 定时器的初始化配置主要包括以下几个方面:

  • 选择定时器模式(例如定时器模式、输入捕获模式、输出比较模式等)。
  • 配置定时器的工作模式(例如单脉冲模式、连续计数模式等)。
  • 配置定时器的计数方向(例如向上计数、向下计数等)。
  • 配置定时器的时钟源和时钟预分频系数。
  • 配置定时器的自动重装载值。

以下是一个通用定时器的初始化配置代码示例:

/* 选择定时器模式为定时器模式 */
TIMx->CR1 &= ~(TIM_CR1_CMS_Msk | TIM_CR1_DIR_Msk);
TIMx->CR1 |= TIM_CR1_CMS_0;  // 选择定时器模式

/* 配置定时器的工作模式为连续计数模式 */
TIMx->CR1 &= ~TIM_CR1_OPM_Msk;

/* 配置定时器的计数方向为向上计数 */
TIMx->CR1 &= ~TIM_CR1_DIR_Msk;

/* 配置定时器的时钟源和时钟预分频系数 */
TIMx->PSC = (uint16_t) (prescaler - 1);

/* 配置定时器的自动重装载值 */
TIMx->ARR = (uint16_t) (arr - 1);

/* 使能定时器 */
TIMx->CR1 |= TIM_CR1_CEN;

2.2 定时器的启动和停止 定时器的启动和停止可以使用控制寄存器(CR)中的相关位实现。启动定时器时,需要将相关位设置为1;停止定时器时,需要将相关位设置为0。

以下是一个通用定时器的启动和停止代码示例:

/* 启动定时器 */
TIMx->CR1 |= TIM_CR1_CEN;

/* 停止定时器 */
TIMx->CR1 &= ~TIM_CR1_CEN;

2.3 定时器的计数值获取 定时器的计数值可以通过计数器寄存器(CNT)进行读取或写入操作。

以下是一个通用定时器的计数值获取代码示例:

uint16_t count = TIMx->CNT;  // 读取计数值
TIMx->CNT = count;  // 写入计数值

2.4 定时器的中断配置 定时器的中断配置主要包括以下几个方面:

  • 配置中断使能寄存器(DIER)中相应的中断使能位,用于使能或禁用定时器中断。
  • 配置定时器中断优先级。
  • 编写中断服务函数(ISR)。

以下是一个通用定时器的中断配置代码示例:

/* 使能定时器中断 */
TIMx->DIER |= TIM_DIER_UIE;

/* 设置定时器中断优先级 */
NVIC_SetPriority(TIMx_IRQn, priority);
NVIC_EnableIRQ(TIMx_IRQn);

/* 定时器中断服务函数 */
void TIMx_IRQHandler(void)
{
  if (TIMx->SR & TIM_SR_UIF)
  {
    /* 处理定时器中断事件 */
    // 清除定时器中断标志
    TIMx->SR &= ~TIM_SR_UIF;
  }
}

三、定时器中断的使用方法 3.1 中断优先级配置 在使用定时器中断时,需要对中断优先级进行配置,以确保正确的中断处理顺序。中断优先级的配置可以通过中断控制器模块(NVIC)进行设置。常用的函数有NVIC_SetPriority()和NVIC_EnableIRQ()。

以下是一个配置中断优先级的代码示例:

/* 设置定时器中断优先级为最高优先级 */
NVIC_SetPriority(TIMx_IRQn, 0);

/* 使能定时器中断 */
NVIC_EnableIRQ(TIMx_IRQn);

3.2 中断服务函数编写 中断

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32定时器1中断是通过配置TIM1定时器的相关参数和中断优先级来实现的。首先,需要开启GPIO时钟和相应的GPIO外设。然后,选择时基单元的时钟源,对于定时中断,一般选择内部时钟源。接下来,配置时基单元,包括预分频器、自动重装器和计数器这三个寄存器。然后,配置输出中断控制,允许更新中断输出到NVIC。在NVIC中打开定时器中断的通道,并分配一个优先级。之后,运行控制,使能定时器并开启中断。最后,编写定时器中断服务程序,用于处理定时器中断事件。以上是使用STM32定时器1中断的一般步骤。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [STM32之基本定时器中断](https://blog.csdn.net/qq_44386182/article/details/129484153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [STM32定时器1中断配置](https://blog.csdn.net/u011895157/article/details/113625353)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大黄鸭duck.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值