STM32(TIM定时器中断)

 理论知识

 

 

定时器定时中断

接线图

定时器工作配置步骤

 定时中断和内外时钟源选择

 

 

 

 定时器中需要使用的函数

程序实现效果:

void TIM_DeInit(TIM_TypeDef* TIMx); **// 恢复定时器的缺省配置**void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct); // 时基单元初始化配置时基单元------>第一个参数表示的是选择某个定时器,第二个结构体包含配置时基单元的一些参数**void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);**// 给结构体变量赋一个默认的值**void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); **// 使能计数器,第一个参数表示选择计数器,第二个参数表示新的状态,也就是使能还是失能**void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); **// 使能中断输出信号,中断输出控制,参数第一个为选择定时器,第二个选择要配置哪一个中断输出,第三个新的状态表示使能还是失能**以下的6个函数分别对应时基单元的时钟选择部分,可以选择RCC内部时钟,ETR外部时钟,TRX,其它定时器,TIX捕获通道,void TIM_InternalClockConfig(TIM_TypeDef* TIMx); **// 选择内部时钟**
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); **// 选择其它定时器的时钟,第一个参数表示要配置的定时器,第二个参数为选择要接入那个其它的定时器**
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);**// 选择TIX捕获通道的时钟,选择需要配置的定时器,第二个参数选择TIX具体需要配置的引脚,最后的两个参数表示的是输入的级性和滤波器**
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);**//选择ETR通过外部模式1输入的函数,第一个参数表示外部触发预蜂鸣器,级性和滤**波器void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);// 选择ETR通过外部时钟模式2输入的时钟,第一个参数和上面的一个函数是一样的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);// 这个函数是用于单独配置ETR引脚的预分频器,极性,滤波器这些参数void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);//void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);uint16_t TIM_GetCounter(TIM_TypeDef* TIMx); // 获取当前计数器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); //获取当前预分频器的值// 以下的4个函数是用来获取标志位和清除标志位的函数FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

定时器配置

#include "stm32f10x.h"                  // Device header/*定时器中断的初始化代码
*/
void Timer_Init(void)
{// 开启时钟,这里TIM2是通用寄存器RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);// 选择时基单元的时钟,选择内部时钟的模式,定时器默认使用的是内部单元的时钟TIM_InternalClockConfig(TIM2);// 配置时基单元,初始化结构体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自动重装器的值,这两个参数的取值都要在0-65535之间TIM_TimeBaseInitStructure.TIM_Prescaler = 7200-1;              // PSC预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;           // 重复计数器的值// 初始化结构体并将结构体的地址放置在init函数中TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);// TIM_ClearFlag(TIM2,TIM_FLAG_Update);手动清除更新中断标志位避免刚初始化玩就进中断标志位的问题TIM_ClearFlag(TIM2,TIM_FLAG_Update);// 选择中断模式为更新中断,配置使能,开启更新中断到nvic的通路TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);// 配置nvic,配置nvic优先级分组,选择分组2的方式NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//初始化nvic的结构体 NVIC_InitTypeDef NVIC_InitStruct;// 配置nvic结构体模式NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;           // 表示中断通道,表示定时器2在nvic中的通道NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;           // 编写为使能ENABLENVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; // 抢占式优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority =1 ;        // 响应式优先级NVIC_Init(&NVIC_InitStruct);// 启动定时器TIM_Cmd(TIM2, ENABLE);}
/*// 编写定时器2的初始化函数
void TIM2_IRQHandler(void){// 当定时器产生更新中断时这个函数会被执行TIM_GetITStatusif(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){     // 判断中断标志位,如果中断的标志位等于SET就执行用户代码// 清除中断标志位TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}}
*/

定时器头文件

主函数文件

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"uint16_t Num;int main(void)
{// 初始化oledOLED_Init();// 初始化定时器Timer_Init();// 使用OLED显示字符串OLED_ShowString(1,1,"Num:");while (1){OLED_ShowNum(1, 5, Num, 5);OLED_ShowNum(2, 5, TIM_GetCounter(TIM2), 5);}
}
void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){Num++;TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}

接线图2:

 第二个程序效果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/544210.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL语法分类 DQL(3)排序查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

Tiktok在线网页版和Tiktok安卓解锁版教程(Tiktok免登录国内直接看)

TikTok和抖音作为众所周知的一对兄弟,所开创的市场前景不可估量。它们不仅颠覆了很多传统认知,也直接让更多人接受了这些新奇事物。然而,TikTok的版本受限于国外,需要特定网络环境,一旦识别为国内,将无法使…

Mock.js了解(Mock就是模拟一个后端,Postman模拟前端)

JSON5 Node.js Vue CLI与Mock.js Jquery与Mock.js Mock与分页

桌面待办,电脑桌面怎么设置待办事项

在忙碌的工作生活中,我们经常会有许多事情需要处理,为了提高工作效率和管理时间,很多人都有一套自己的桌面待办事项管理方法。那么,如何利用电脑桌面待办事项来提高工作效率,电脑桌面怎么设置待办事项呢? …

C语言例:设 int a=11; 则表达式 a+=a-=a*a 的值

注&#xff1a;软件为VC6.0 代码如下&#xff1a; #include<stdio.h> int main(void) {int a11, b;b (aa-a*a); //a*a121 -->a-121结果为a-110 -->a-110结果为a-220printf("表达式aa-a*a 的值为&#xff1a; %d\n",b);return 0; } //优先级&#x…

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎&#xff0c;专注于提供自然语言处理&#xff08;NLP&#xff09;、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大&#xff0c;支持本地化部署&#xff0c;并鼓励用户体验和开发者共同完善&#xf…

复习 --- windows 上安装 git,使用相关命令

文章目录 很少使用windows的git工具&#xff0c;这次借助这个任务&#xff0c;记录下使用过程&#xff0c;其他的等有空在整理。 其中&#xff0c;还使用了浏览器的AI小助手&#xff0c;复习了git相关的命令&#xff1a;图片放最后

扩展坞:连接未来的桥梁

在科技日新月异的今天&#xff0c;扩展坞作为一种能够将手机、电脑或其他设备连接起来的配件&#xff0c;正逐渐走进我们的日常生活&#xff0c;并深刻改变着我们的工作与生活方式。它以其强大的扩展功能&#xff0c;让我们能够更高效地利用手中的设备&#xff0c;实现更多可能…

在tomcat中手动发布一个应用

在webapps中创建一个目录&#xff0c;这就代表一个应用&#xff0c;我这里名称为test 在test中创建一个html文件&#xff0c;文件里我就输出了HelloWorld 启动Tomcat服务器 Tomcat会自动检测webapps目录下的war包&#xff0c;并将其解压到对应的目录中。 通过访问http://local…

C语言中,基本数据类型介绍

C语言当中各种数据类型的大小&#xff0c;首先要了解有哪些数据类型。 一 字符型&#xff1a; 整数&#xff08;字符&#xff09;类型存储大小值范围char1 字节-128 到 127 或 0 到 255&#xff08;2的8次方&#xff09;unsigned char1 字节0 到 255&#xff08;&#xff09;s…

【Web】记录CISCN2023国赛初赛DeserBug题目复现

目录 前言 分析 step0 step1 step2 EXP 总结 前言 Hessian的链子审得有点疲劳&#xff0c;不如做做题吧&#xff0c;挑了国赛入手&#xff0c;整体做下来感觉十分丝滑&水到渠成&#xff0c;自然&通透。 仅仅是记录一下菜鸡做题的感受&#xff0c;不会往深入了…

基于springboot实现房源出租信息系统项目【项目源码+论文说明】

基于springboot实现房源出租信息系统演示 摘要 近些年来在一线城市的房子需求量在逐步递增&#xff0c;其中租房子和出租房子的需求业务不断增加。那么租房对于我们一线二线城市来说是一个非常大&#xff0c;而且具有经济提升能力的业务场景。那么信息技术在此行业的加持早已是…