Stm32CubeMx基本定时器

Stm32CubeMx基本定时器

  • 基本定时器概念
  • Stm32CubeMx 配置
    • 基本配置
      • 配置LED灯
      • 配置晶振时钟
      • 配置串口
      • 时钟数配置
    • TIM6定时器配置
      • 设置TIM6定时器
      • 设置TIM6定时器中断
  • 编写代码

基本定时器概念

在stm32f103中,共有八个定时器:TIM1~TIM8。其中TIM6和TIM7是基本定时器

基本定时器相较于其他定时器只有基本的定时功能和驱动数模转换器(Digital to Analog Converter, DAC)的功能,不具备外部通道

简单来说,就是实现一些简单的定时任务的时候使用基本定时器

Stm32CubeMx 配置

我们这里使用定时器驱动一个流水灯定时亮灭。

和上一章类似,我的开发板PE6连接着LED2,这里就配置LED2闪烁。不同的是我们不用HAL_Delay()函数,而是使用定时器来使LED灯闪烁

基本配置

配置LED灯

Stm32CubeMx基本定时器_第1张图片

配置晶振时钟

Stm32CubeMx基本定时器_第2张图片

配置串口

Stm32CubeMx基本定时器_第3张图片

时钟数配置

Stm32CubeMx基本定时器_第4张图片

TIM6定时器配置

设置TIM6定时器

Stm32CubeMx基本定时器_第5张图片
这里重点说一下第4和第5步
这两部分别是配置分频系数和定时器周期的
由上面的时钟数可以看到我们配置的时钟频率是72Mhz,也就是72000000hz。
这个时候我们的分频系数配置为7199(其实就是7200,至于为什么一会我会讲到),也就相当于告诉CPU:将原来7200个频率脉冲看成一个频率脉冲。这样的话,分频后定时器 6 的时钟频率为 72000000/7200=10000hz,也就是它每1/10000秒会来一个脉冲。
然后我们将定时器周期设置为9999(其实就是10000,至于为什么一会我会讲到),这样的话,定时器6就会检测到每过10000个脉冲的话就会触发定时器中断。结合上面定时器每1/10000秒会来一个脉冲就可以得到:每过10000*(1/10000)=1s就会触发一次定时器中断
至于为什么要将分频系数和定时器周期设置为7199和9999而不是7200和10000呢,原因是Stm32的寄存器是从0开始计数的,即0~7199正好是7200个。定时器周期同理

如果觉得上面的解释太枯燥的话,可以记忆下面这个公式:
(分频系数/时钟频率)*定时器周期 = 需要的时间
以1s为例:1s = (7199+1)/72000000*(9999+1)
以0.5s为例:0.5s = (7199+1)/72000000*(4999+1)
当然,分频系数、时钟频率、定时器周期 可以根据实际情况设置,不一定仅局限于某个数,比如0.5s也可以这么计算:0.5s = (3599+1)/72000000*(9999+1)

时钟频率是我们在时钟数里面设置的,就是这货~
Stm32CubeMx基本定时器_第6张图片

设置TIM6定时器中断

Stm32CubeMx基本定时器_第7张图片
将抢占优先级设置为2,响应优先级设置为0
在Stm32中,优先级号越小,优先级越高。当抢占优先级相同时,判断响应优先级

编写代码

Stm32CubeMx基本定时器_第8张图片
编写 TIM6 更新中断服务程序
Stm32CubeMx基本定时器_第9张图片

大功告成

但是如果在某一些不能查阅资料的情况下(比如考试)怎么快速找到这一些函数呢?
这里我提供一个方法,如果不想背下来的话,可以参考下图
Stm32CubeMx基本定时器_第10张图片
Stm32CubeMx基本定时器_第11张图片
Stm32CubeMx基本定时器_第12张图片
在这里插入图片描述
复制这一行就可以了(注意:不要复制__weak)

你可能感兴趣的:(stm32)