定时中断基本结构

news/2024/10/19 0:23:31

image

打开时钟-->配置 时钟源-->配置 时基单元-->配置 中断输出-->配置 NVIC-->启动 定时器

程序

void Timer_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);/*配置时钟*/TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//CK_CNT_OV=CK_PSC/(PSC+1)/(ARR+1)TIM_TimeBaseInitStruct.TIM_Period=7200*5-1;//2000 HzTIM_TimeBaseInitStruct.TIM_Prescaler=2000*3-1;TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);//为更新预分频器和重复计数器的值,该函数会直接进入一次中断TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除标志位TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中断,当计数达到设定值时,触发中断处理程序。/*配置中断*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM2,ENABLE);//启动定时器,定时器开始计数。
}void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){/*中断代码*/TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}
}

要点/问题


  • 定时频率的设置
TIM_TimeBaseInitStruct.TIM_Prescaler//预分频值PSC
TIM_TimeBaseInitStruct.TIM_Period//重装载值ARR

公式:CK_CNT_OV=CK_PSC/(PSC+1)/(ARR+1)

  • CK_CNT_OV:定时器的溢出频率或计数周期的频率,单位为 Hz。
  • CK_PSC:输入时钟频率(例如,72 MHz(72 000 000 Hz))。
  • PSC:预分频器的值,分频系数为 PSC + 1
  • ARR:自动重装载值,定时器计数到 ARR + 1 次时触发溢出或更新事件。

  • 解释 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE)
  1. 作用
  • 当定时器 TIM2 发生更新事件(例如计数器从 ARR 计数回到 0,即溢出)时,触发中断。
  • 使用 ENABLE 参数,激活这个更新中断,使定时器溢出时产生中断请求。
  • 在定时器中断服务函数(TIM2_IRQHandler)中可以处理这个中断。
  1. TIM_IT_Update:表示选择的中断类型是更新中断(也就是定时器溢出时的中断)。

  • 定时器在初始化时会直接运行中断函数
  1. 原因
    TIM_TimeBaseInit 定义中的一条
/* Generate an update event to reload the Prescaler and the Repetition counter values immediately */
// 生成更新事件 以立即重新加载 预分频器和重复计数器 的值
TIMx->EGR = TIM_PSCReloadMode_Immediate;  

及 为更新预分频器和重复计数器的值,该函数会直接进入一次中断

  1. 解决
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除标志位

  • TIM_ClearFlag 和 TIM_ClearITPendingBit 的区别
  • TIM_ClearFlag(TIM2, TIM_FLAG_Update):用于清除定时器的更新事件标志位,更新事件可能是由定时器溢出、更新触发等原因引起的。这个标志位可以用于查询更新事件的发生,而不依赖中断。
  • TIM_ClearITPendingBit(TIM2, TIM_IT_Update):用于清除定时器的中断挂起标志位。当中断使能时,更新事件发生后定时器会触发中断,并且中断挂起标志位会被置位。调用该函数可以清除该中断挂起标志位。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

定时器-输出比较PWM

打开时钟-->配置 时钟源-->配置 时基单元-->配置 输出比较单元-->配置 GPIO口 代码 void PWM_Init(void) {RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/*配置 时钟*/TIM_InternalClockConfig(TIM2…

专题二:操作系统基本原理

1. 操作系统概述 操作系统:管理系统的硬件、软件、数据资源 控制程序运行 人机之间的接口 应用软件与硬件之间的接口进程管理 存储管理 文件管理 作业管理 设备管理 2. 进程管理 2.1. 进程状态(三态模型、五态模型) 2.2. ★★★信号量与PV操作★★★ 2.2.1. 前趋图 2.2.2.…

乘风破浪,扬帆出海,专门为英语学习者设计的在线学习平台之English Pod

什么是English Podhttps://learnenglishpod.comEnglish Pod是一个专门为英语学习者设计的在线学习平台,提供各种各样的英语学习播客(pod cast)和教学资源。其目标是帮助不同水平的学习者通过日常对话和实用内容提高英语听力、口语、词汇和语法能力。EnglishPod的课程通常包括对…

C++内存模型实践探索

C++对象模型是个常见、且复杂的话题,本文基于Itanium C++ ABI通过程序实践介绍了几种 简单C++继承 场景下对象模型,尤其是存在虚函数的场景,并通过图的方式直观表达内存布局。前言 C++对象模型是个常见、且复杂的话题,本文基于Itanium C++ ABI通过程序实践介绍了几种 简单C…

课堂练习

Complex.h中的代码:#include <iostream> #pragma once class Complex { public:Complex(double x=0, double y=0);Complex(const Complex& p);~Complex();void add(const Complex& p);double get_real() const;double get_imag() const;friend Complex add(cons…

乘风破浪,乘风出海,学习英语之English Pod

什么是English Podhttps://learnenglishpod.comEnglish Pod是一个专门为英语学习者设计的在线学习平台,提供各种各样的英语学习播客(podcast)和教学资源。其目标是帮助不同水平的学习者通过日常对话和实用内容提高英语听力、口语、词汇和语法能力。EnglishPod的课程通常包括对…

20222306 2024-2025-1 《网络与系统攻防技术》实验二实验报告

1.实验内容 1.1 实践目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其他软件)生成可执行文件,利…

transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(文末免费送书)

本文详细讲解 transformers 推理大语言模型的初始化过程,包括 Python 包搜索、LazyModule 延迟模块、模块搜索和 Python 包 API 设计美学……上周收到一位网友的私信,希望老牛同学写一篇有关使用 transformers 框架推理大模型的技术细节的文章。 老牛同学刚开始以为这类的文章…