stm32 TIM定时器中断

news/2025/1/12 4:02:18/

一、TIM(Timer)定时器
定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断;
16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时;
不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能;
根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。
二、定时器类型
在这里插入图片描述STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4,一个高级定时器,三个通用定时器。
基本定时器介绍:
在这里插入图片描述 自动重装载寄存器,预分频器和CNT计数器组成时基单元,完成计数计时的功能。预分频器之前,连接的是基准计数时钟的输入,由于基本定时器只能选择内部时钟,所以可以看做内部时钟(CK INT)直接连接的是预分频器,来自RCC的TINxCLK一般都是72MHZ;实际分频系数=预分频器值+1,预分频器是16位的,可以写65535,因此最大分频系数为65536。计数器是对分频后的时钟进行计数,每来一个上升沿,计数器值+1,计数器是16位的,因此最大计数值的范围是0-65535;当计数器的值等于自动重装载寄存器的值时,产生一次中断信号,并且计数器的值清零,图中向上的箭头表示更新中断,向下的箭头表示更新事件,CPU响应更新中断,定时器中断的任务就完成了。
**

- 通用定时器框图

  • 在这里插入图片描述
    高级定时器框图
    在这里插入图片描述定时中断的基本结构
    在这里插入图片描述使用定时器定时中断的步骤:

    1.开启时钟。每个程序都必须的第一步,打开内部时钟源,GPIO外设。
    2.选择时基单元的时钟源。定时器定时中断选择内部时钟源。
    3.配置时基单元。配置预分频器,自动重装器和计数器这三个寄存器。
    4.配置输出中断控制,允许更新中断输出到NVIC.
    5.配置NVIC,在NVIC 中打开定时器中断的通道,并分配一个优先级。
    6.运行控制。
    7.使能定时器。开中断。
    8.写定时器中断服务程序。
    定时器中断实现没秒加1程序
    定时器初始化和中断服务程序:
#include "stm32f10x.h"                  // Device headervoid timer_Init(void)
{NVIC_InitTypeDef NVIC_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//1.开启时钟,TIM2是APB1总线的外设RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//2.配置时钟单元TIM_InternalClockConfig(TIM2);   //选择内部时钟驱动TIM2的时基单元TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;  //选择时钟分频TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数器模式选择//定时时间的公式:CK_CNT_OV = CK_PSC / (PSC + 1) / (ARR + 1),定时1s,也就是1HZ;//预分频器和计数器有一个数的偏差,因此要减1,PSC和ARR的取值0~65535;TIM_TimeBaseInitStructure.TIM_Period = 10000-1;  //自动重装器的值TIM_TimeBaseInitStructure.TIM_Prescaler = 7200-1;  //预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;  //重复计数器的值,基本定时器用不到TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);TIM_ClearFlag(TIM2,TIM_FLAG_Update);  //手动清除中断标志位,避免刚初始化完就进入中断//3.使能中断TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);  //打开更新中断到NVIC的通道。//4.配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //NVIC优先级分组NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //选择中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //通道使能NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //响应优先级NVIC_Init(&NVIC_InitStructure);//5.启动定时器TIM_Cmd(TIM2,ENABLE);
}
/*
void TIM2_IRQHandler(void)  //中断函数
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){   //中断标志位判断,确认进入中断TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位}
}*/

main:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"
uint16_t Num;
int main(void)
{OLED_SPI_Init();OLED_Init();timer_Init();OLED_ShowString(1,1,"Num:");while(1){OLED_ShowNum(1,5,Num,5);}
}
void TIM2_IRQHandler(void)  //中断函数
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){   //中断标志位判断,确认进入中断Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位}
}

**


http://www.ppmy.cn/news/724286.html

相关文章

STM32—ADC详解

文章目录 一.ADC简介二.ADC功能框图讲解1.电压输入范围2.输入通道3.转换顺序4.触发源5.转换时间6.数据寄存器7.中断8.电压转换 三.初始化结构体四.单通道电压采集1.头文件2.引脚配置函数3.NVIC配置函数4.ADC配置函数5.中断函数6.主函数 一.ADC简介 STM32f103系列有3个ADC&…

STM32CUBEMX配置教程(十一)STM32的ADC轮询模式扫描多个通道

STM32CUBEMX配置教程(十一)STM32的ADC轮询模式扫描多个通道 基于STM32H743VI 使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以…

stm32用tft-lcd 显示自定义大小的字体

笔者用的开发环境是正点原子的stm32 mini 版本,其中需要用到lcd显示中文,正点原子的例程上的字体显示得太小了,于是自己根据例程来写一个可以显示大点字体的函数。 1、首先打开取模软件pctolcd2002,选好字体并做相应设置,笔者想显…

广州大彩串口屏与STM32F407通讯

目录 广州大彩串口屏与STM32F407通讯一、大彩串口屏介绍二、硬件连接三、程序移植四、触摸屏组态及函数调用五、最终效果结语 广州大彩串口屏与STM32F407通讯 之前一直用正点原子的LCD屏,但是占用太多GPIO引脚,所以打算换一块串口屏,某宝上看…

STM32-GPIO介绍

目录 1.概述 2.GPIO工作原理 2.1 保护二极管及上下拉电阻 2.2 GPIO工作模式 2.2.1 浮空输入模式 2.2.2 上拉输入模式 2.2.3 下拉输入模式 2.2.4 模拟输入模式 2.2.5 开漏输出模式 2.2.6 开漏复用输出模式 2.2.7 推挽输出模式 2.2.8 推挽复用输出模式 2.3 注意事项 …

stm32的DMA+ADC多通道数据采集

1前言 硬件:stm32f103rct6,输入大容量产品。 软件:keil MDK5.0 固件库:stm32f1标准外设库。 调试软件:友善串口助手 stm32有多达16个通道,常用的采样方法有两种,一是分时采集每个通道的数据&am…

STM32F407多路串口通信进行数据收发

一直被说是就不能把几个串口放在一起,写个标准例程直接用,非要每次用哪个串口才现场改程序,被迫把usart1,usart2,usart3进行了资源整合,挂在这以备不时之需。 功能简述: 串口1,串口2,串口3串口…

乐鑫Esp32学习之旅 20 一篇好文,开发过程中编译esp32固件太大,无法正常启动?教你如何自定义分区表partitions.csv。

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。…