STM32 配置TIM定时中断常用库函数

单片机学习!


目录

​编辑

[1. 函数TIM_DeInit](#1. 函数TIM_DeInit)

[2. 函数TIM_TimeBaseInit 配置时基单元](#2. 函数TIM_TimeBaseInit 配置时基单元)

[3. 函数TIM_TimeBaseStructInit](#3. 函数TIM_TimeBaseStructInit)

[4. 函数TIM_Cmd 运行控制](#4. 函数TIM_Cmd 运行控制)

[5. 函数TIM_ITConfig 中断输出控制](#5. 函数TIM_ITConfig 中断输出控制)

[6. 时基单元的时钟选择函数](#6. 时基单元的时钟选择函数)

[6.1 函数TIM_InternalClockConfig](#6.1 函数TIM_InternalClockConfig)

[6.2 函数 TIM_ITRxExternalClockConfig](#6.2 函数 TIM_ITRxExternalClockConfig)

[6.3 函数 TIM_TIxExternalClockConfig](#6.3 函数 TIM_TIxExternalClockConfig)

[6.4 函数 TIM_ETRClockMode1Config](#6.4 函数 TIM_ETRClockMode1Config)

[6.5 函数 TIM_ETRClockMode2Config](#6.5 函数 TIM_ETRClockMode2Config)

[6.6 函数 TIM_ETRConfig](#6.6 函数 TIM_ETRConfig)

7.单独更改参数的函数

[7.1 函数 TIM_PrescalerConfig](#7.1 函数 TIM_PrescalerConfig)

[7.2 函数 TIM_CounterModeConfig](#7.2 函数 TIM_CounterModeConfig)

[7.3 函数 TIM_ARRPreloadConfig](#7.3 函数 TIM_ARRPreloadConfig)

[7.4 函数 TIM_SetCounter](#7.4 函数 TIM_SetCounter)

[7.5 函数 TIM_SetAutoreload](#7.5 函数 TIM_SetAutoreload)

[8.函数 TIM_GetCounter](#8.函数 TIM_GetCounter)

[9.函数 TIM_GetPrescaler](#9.函数 TIM_GetPrescaler)

10.用来获取标志位和清除标志位的函数

[10.1 函数 TIM_GetFlagStatus](#10.1 函数 TIM_GetFlagStatus)

[10.2 函数 TIM_ClearFlag](#10.2 函数 TIM_ClearFlag)

[10.3 函数 TIM_GetITStatus](#10.3 函数 TIM_GetITStatus)

[10.4 函数 TIM_ClearITPendingBit](#10.4 函数 TIM_ClearITPendingBit)


1. 函数TIM_DeInit

函数用于恢复缺省配置。

2. 函数TIM_TimeBaseInit 配置时基单元

函数用于时基单元初始化。

两个参数:

  1. TIMx选择某个定时器。
  2. 结构体,里面包含了配置时基单元的一些参数。

TIM_Period 设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在 0x0000 和 0xFFFF 之间。

TIM_Prescaler 设置了用来作为 TIMx 时钟频率除数的预分频值。它的取值必须在 0x0000 和 0xFFFF 之间。

TIM_ClockDivision 设置了时钟分割。该参数取值见下表。

TIM_CounterMode 选择了计数器模式。该参数取值见下表。

代码示例:

cpp 复制代码
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision= TIM_CKD_DIV1;//指定时钟分频
	TIM_TimeBaseInitStructure.TIM_CounterMode= TIM_CounterMode_Up;//计数器模式
	TIM_TimeBaseInitStructure.TIM_Period= 10000-1;//ARR自动重装器的值,决定定时时间
	TIM_TimeBaseInitStructure.TIM_Prescaler= 7200-1;//PSC预分频器的值,决定定时时间,
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter= 0;//重复计数器的值。
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);

定时时间可用计数器溢出频率公式计算,定时频率=72M/(PSC+1)/(ARR+1)

对应图中配置时基单元的部分:

3. 函数TIM_TimeBaseStructInit

函数把结构体变量赋一个默认值。

下表给出了TIM_TimeBaseInitStruct各个成员的缺省值:

4. 函数TIM_Cmd 运行控制

函数用于使能计数器。

两个参数:

  1. TIMx选择某个定时器。
  2. NewState新的状态,也就是使能还是失能,使能计数器可以运行;失能计数器不运行。

对应图中运行控制的位置:

代码示例:

cpp 复制代码
	TIM_Cmd(TIM2,ENABLE);	

5. 函数TIM_ITConfig 中断输出控制

函数用于使能中断输出信号。

三个参数:

  1. TIMx选择某个定时器。
  2. TIM_IT选择要配置哪个中断输出。
  3. NewState新的状态,使能还是失能。

输入参数 TIM_IT 使能或者失能 TIM 的中断。可以取下表的一个或者多个取值的组合作为该参数的值。

对应图中中断输出控制的位置,用于使能外设的中断输出。

代码示例:

cpp 复制代码
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

6. 时基单元的时钟选择函数

可以选择RCC内部时钟、ETR外部时钟、ITRx其他定时器、TIx捕获通道。

对应图中时基单元的时钟选择部分

6.1 函数TIM_InternalClockConfig

函数用于选择内部时钟,参数只有一个TIMx。

对应图中选择:

代码示例:

cpp 复制代码
TIM_InternalClockConfig(TIM2);

6.2 函数 TIM_ITRxExternalClockConfig

函数用于选择ITRx其他定时器的时钟。

两个参数:

  1. TIMx,选择要配置的定时器。
  2. TIM_InputTriggerSource,选择要接入哪个其他定时器。

TIM_InputTriggerSource 选择 TIM 输入触发。

对应图中选择:

6.3 函数 TIM_TIxExternalClockConfig

函数用于选择TIx捕获通道的时钟。

四个参数:

  1. TIMx,选择要配置的定时器。
  2. TIM_TIxExternalCLKSource选择TIx具体的某个引脚。
  3. TIM_ICPolarity,输入的极性。
  4. ICFilter,输入滤波器。

对于外部引脚的波形,一般都会有极性选择和滤波器,这样更灵活一些

TIM_TIxExternalCLKSource选择TIMx外部时钟源。

对应图中选择:

6.4 函数 TIM_ETRClockMode1Config

函数用于选择ETR通过外部时钟模式1输入的时钟。

四个参数:

  1. TIMx,选择要配置的定时器。
  2. TIM_ExtTRGPrescaler外部触发预分频器,这里可以对ETR的外部时钟再提前做一个分频。
  3. TIM_ExtTRGPolarity,输入的极性。
  4. ExtTRGFilter,输入滤波器。

TIM_ExtTRGPrescaler设置TIMx外部触发预分频。

TIM_ExtTRGPolarity设置TIMx外部触发极性。

对应图中选择:

6.5 函数 TIM_ETRClockMode2Config

函数用于选择ETR通过外部时钟模式2输入的时钟。

  1. TIMx,选择要配置的定时器。
  2. TIM_ExtTRGPrescaler外部触发预分频器,这里可以对ETR的外部时钟再提前做一个分频。
  3. TIM_ExtTRGPolarity,输入的极性。
  4. ExtTRGFilter,输入滤波器。

对应图中选择:


总结:

对于ETR输入的外部时钟而言,函数 TIM_ETRClockMode1Config和函数TIM_ETRClockMode2Config是等效的,函数参数也是一样的,如果不需要触发输入的功能,那两个函数可以互换。


6.6 函数 TIM_ETRConfig

函数用来单独用来配置ETR引脚的预分频器、极性、滤波器这些参数的。

7.单独更改参数的函数

在初始化结构体里有很多关键的参数,如自动重装器的目标值和预分频值等,这些参数可能会在初始化之后还需要更改,以下函数可以方便更改这些关键参数。

7.1 函数 TIM_PrescalerConfig

函数用来单独写预分频值。

两个参数:

  1. Prescaler就是要写入的预分频值。
  2. TIM_PSCReloadMode写入的模式。

预分频器有一个缓冲器,写入的值是在更新事件发生后才有效的。所以这里有个写入模式,可以选择是听从安排在更新事件生效,或者是再写入后手动产生一个更新事件,让这个值立刻生效。

TIM_PSCReloadMode选择预分频重载模式。

7.2 函数 TIM_CounterModeConfig

函数用来改变计数器的计数模式。

两个参数:

  1. TIMx,选择要配置的定时器。
  2. TIM_CounterMode,选择新的计数器模式。

7.3 函数 TIM_ARRPreloadConfig

自动重装寄存器预装功能配置。计数器的预装功能可以根据需要选择配置,调用这个函数,参数选择使能还是失能来控制计数器预装功能。

7.4 函数 TIM_SetCounter

给计数器写入一个值,调用这个函数可以手动给一个计数值。

7.5 函数 TIM_SetAutoreload

给自动重装寄存器写入一个目标值,调用这个函数可以手动给一个目标值。

8.函数 TIM_GetCounter

获取当前计数器的值,调用这个函数可以查看当前计数器记到哪里了,返回值就是当前计数器的值。

9.函数 TIM_GetPrescaler

获取当前预分频器的值,调用这个函数可以查看预分频值。

10.用来获取标志位和清除标志位的函数

10.1 函数 TIM_GetFlagStatus

TIM_FLAG 待检查的标志位,下表给出了所有可以被函数TIM_ GetFlagStatus检查的标志位列表。

10.2 函数 TIM_ClearFlag

10.3 函数 TIM_GetITStatus

10.4 函数 TIM_ClearITPendingBit

相关推荐
夜月yeyue17 小时前
Linux内高端内存
linux·运维·单片机·嵌入式硬件·ci/cd·硬件架构
沉在嵌入式的鱼21 小时前
linux串口对0X0D、0X0A等特殊字符的处理
linux·stm32·单片机·特殊字符·串口配置
学习路上_write21 小时前
AD5293驱动学习
c语言·单片机·嵌入式硬件·学习
影阴21 小时前
存储器和寄存器
stm32·单片机·嵌入式硬件
吃西瓜的年年1 天前
3. C语言核心语法2
c语言·嵌入式硬件·改行学it
李洛克071 天前
RDMA CM UDP 通信完整指南
单片机·网络协议·udp
思茂信息1 天前
CST电动车EMC仿真——电机控制器MCU滤波仿真
javascript·单片机·嵌入式硬件·cst·电磁仿真
小曹要微笑1 天前
I2C总线技术解析(纯文字版)
单片机·嵌入式硬件·esp32·iic
我送炭你添花1 天前
可编程逻辑器件(PLD)的发展历程、原理、开发与应用详解
嵌入式硬件·fpga开发
袖手蹲1 天前
Arduino UNO Q 从 Arduino Cloud 远程控制闪烁 LED
人工智能·单片机·嵌入式硬件·电脑