STM32 定时器产生定周期方法

news/2025/2/20 14:35:20

目录

背景

程序

第一步、使能PCLK1外设时钟​编辑

第二步、时基单元配置

第三步、配置NVIC(设置定时中断优先级)​编辑

第四步、使能溢出中断

第五步、使能定时器

第六步、填写中断处理函数(ISR)


背景

单片机开发当中,我们可以经常看到定周期函数。这些定周期函数都是通过定时器最基本定时中断功能。如果学习前面的PWM。会更快的了解相关概念。

时基单元
可编程通用定时器的主要部分是一个 16 位计数器和与其相关的自动装载寄存器。这个计数器可
以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。
计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。
时基单元包含:
● 计数器寄存器 (TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)
● 自动装载寄存器 (TIMx_ARR)
自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在
TIMx_CR1 寄存器中的自动装载预装载使能位 (ARPE) 的设置,预装载寄存器的内容被立即或在
每次的更新事件 UEV 时传送到影子寄存器。当计数器达到溢出条件 ( 向下计数时的下溢条件 ) 并当
TIMx_CR1 寄存器中的 UDIS 位等于 ’0’ 时,产生更新事件。更新事件也可以由软件产生。随后会
详细描述每一种配置下更新事件的产生。

程序

//定时器时间计算公式Tout = ((重装载值+1)*(预分频系数+1))/时钟频率;
//例如:1秒定时,重装载值=9999,预分频系数=7199

void TIM3_Init(u16 arr,u16 psc){  //TIM3 初始化 arr重装载值 psc预分频系数
    TIM_TimeBaseInitTypeDef     TIM_TimeBaseInitStrue;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3
   
	      
    TIM_TimeBaseInitStrue.TIM_Period=arr; //设置自动重装载值
    TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //预分频系数
    TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //计数器向上溢出
    TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; //时钟的分频因子,起到了一点点的延时作用,一般设为TIM_CKD_DIV1
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); //TIM3初始化设置
    TIM3_NVIC_Init (); //开启TIM3中断向量
    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//使能TIM3中断    
    TIM_Cmd(TIM3,ENABLE); //使能TIM3
}


void TIM3_NVIC_Init (void){ //开启TIM3中断向量
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;	
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x3;	//设置抢占和子优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x3;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}

第一步、使能PCLK1外设时钟

第二步、时基单元配置

输入到计数器的时钟为      72 000 000 /(7199 +1) = 1 000HZ

计数器溢出时长生Update中断频率: 10000HZ /(9999+1) =1HZ

为何+1有在PWM中介绍。

第三步、配置NVIC(设置定时中断优先级)

第四步、使能溢出中断

计数器溢出的中断就是update中断

第五步、使能定时器

第六步、填写中断处理函数(ISR)

void TIM3_IRQHandler(void){ //TIM3中断处理函数
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){	//判断是否是TIM3中断
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

        //此处写入用户自己的处理程序
		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1
    }
}


http://www.niftyadmin.cn/n/5858135.html

相关文章

[AI相关]Unity的C#代码如何简写

是一个某培训机构的飞行棋教学源码 不知道,是否有人想知道怎么可以简写 (这个问AI,DeepSeek也应该找不到答案的) 静态变量 属性引用 单例 注入 一些UnityEvent特性就不说了。。。 IL 注入 运算符号改写

Linux第一章 环境搭建

文章目录 环境搭建安装wsl安装GUI可视化界面 常用命令基础常识命令解析器查看shell操作系统结构目录结构主要目录介绍 路径结构绝对路径相对路径 命令提示符文件属性 包管理命令sudo apt-get 文件和目录操作treelscdpwdwhichtouchmkdirrmdirrmcpmvcatmorestatlnwcwhoami 用户权…

STM32的HAL库开发---单通道ADC采集实验

一、实验简要 1、功能描述 通过ADC1通道1(PA1)采集电位器的电压,并显示ADC转换的数字量及换算后的电压值 2、确定最小刻度 VREF 3.3V ---》 0V ≤ VIN ≤ 3.3V ---》最小刻度 3.3 / 4096 ,F1的分辨率是12位的,也…

cmake:定位Qt的ui文件

如题。在工程中,将h,cpp,ui文件放置到不同文件夹下,会存在cmake找不到ui文件,导致编译报错情况。 cmake通过指定文件路径,确保工程找到ui文件。 标识1:ui文件保存路径。 标识2:添加…

网站搭建基本流程

需求分析: 实现网站搭建的过程:首先进行网站的需求性分析 网站可分为前台系统和后台系统,由不同的功能拆分为不同的模块 如下是一个电商网站可以拆分出的模块: 在编写代码前,我们要先对网站进行架构,通过…

Spring Boot 开发入门

文章来源:开发您的第一个 Spring Boot 应用程序 (Developing Your First Spring Boot Application) _ Spring Boot3.4.0中文文档(官方文档中文翻译)|Spring 教程 —— CADN开发者文档中心 本节介绍如何开发一个小型的 “Hello World!” Web 应用程序&…

MVTEC数据集笔记

前言 网上的博客只有从论文里摘出的介绍,没有数据集文件详细的样子,下载数据集之后,对数据集具体的构成做一个补充的笔记。 下载链接:https://ai-studio-online.bj.bcebos.com/v1/7d4a3cf558254bbaaf4778ea336cb14ed8bbb96a7f2a…

Pycharm打开的jupyter notebook无法在pycharm中关闭怎么解决

首先你可以先看一下你的pycharm的jupyter界面的输出: 可以看到第一行有个启动命令 找到这个–port的端口号,现在我们可以走下面的步骤,假设你找到的是–port47187 : 步骤 1:定位占用端口的进程(Linux/Mac…