零基础入门STM32编程(七)——定时器中断点灯(CUBEMX)

  • 一 前言

上一篇介绍了高级定时器,本篇将讲授如何使用普通定时器,通过定时器中断的方式实现点灯。基本思路如下:使用定时器中断方式控制LED等的亮灭,即每隔一秒产生一次中断,在中断服务函数中写入控制芯片引脚输出电平的指令。

二 初识普通定时器

2.1 概述

本篇涉及到的知识点主要有:

  • 定时器时钟源
  • 定时器时钟总线
  • 定时器配置
  • 定时器中断
  • 中断服务函数

2.2 定时器时钟源

定时器的时钟既可以使用内部时钟,也可以使用外部时钟源,在本篇我们使用内部时钟源,如下图所示。

2.3 定时器时钟总线

对于STM32F103R6的单片机而言,其定时器2(TIM2)挂载在APB1总线上,该总线的最高时钟频率为36MHz,如下图所示。

因此,STM32的时钟使能步骤如下:

  • 首先需要使能即将要使用的芯片引脚所挂载的时钟总线;
  • 接着配置该引脚;
  • 使能定时器所挂载的时钟总线;
  • 配置该定时器。

2.4 配置定时器TIM2

配置定时器的参数,主要包括了分频系数(Prescaler)、计数模式(CounterMode)、自动装载值(arr)。

定时器定时时间计算公式如下: Tout = ((arr+1)*(Prescaler+1))/Tclk ; 

  • 分频系数(Prescaler)

  Prescaler的取值范围为0·65535。

  • 自动装载值(arr)

arr的取值范围为0·65535。

2.4 开启定时器TIM2

完成定时器的配置后,开启定时器,进行定时。

三 项目实战

3.1操作流程

 使用定时器的操作流程如图所示。

3.2新建CUBEMX工程

打开CUBEMX软件,点击“file”选择“new project”,如下图所示。

 在弹出的界面中的左侧选择“STM32F103R6”,接着在右侧列表框中选择LQFP64封装类型的芯片,如下图所示。

 接着让我们继续完成工程的配置,如下图所示。

  • 首先点击软件界面中的“PINOUT&Configuration” ,此时界面的右侧展示了STM32F103R6单片机的引脚示意图。用户点击对应的芯片管脚进行配置,这里我们选择PA1管脚,单击该管脚在弹出的选项中,选择GPIO_OUTPUT设定该引脚为输出模式。

  • 配置GPIO。点击左侧栏中的GPIO,如下图所示,选择界面中间部分的PA1信息展示行,此时会在界面底部显示出该管脚的配置信息,这里完成如下配置信息:默认输出电平幅度、输出模式和管脚别名。

  •  完成GPIO的配置后,接着需要配置NVIC即嵌套向量中断控制器确定该中断的优先级。选中界面左侧的“NVIC”,使能TIM2的中断。

  •  配置定时器。点击TIM2,进入定时器的配置界面,确定定时器的时钟源为内部时钟,接着设置定时器的分频系数(Prescaler)、计数模式(CounterMode)、自动装载值(arr)以及计数模式,这里要是实现定时器每隔1s点亮一次LED灯。由公式可知, Tout = ((arr+1)*(Prescaler+1))/Tclk ;Tout=1s,这里时钟源为8MHz,arr配置为1000,Prescaler配置为8000。

  •  确定时钟源频率。点击上方的“clock configuration”,界面展示出单片机的时钟树,如下图所示,内部时钟源的频率8MHz,最终APB总线的时钟频率为8MHz。

  • 生成code。完成上述配置后,点击下图所示按钮生成 keil工程代码。

3.3 打开keil工程

  • 找到生成的代码,按照下图所示,找到“MDK-ARM”文件夹,双击打开keil工程。

  •  在main.c文件中添加代码。在main.c文件中添加如下代码实现每隔1s点亮一次LED灯。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{
		HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
	}
		
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值