STM32f103入门(5)定时器中断

这篇具有很好参考价值的文章主要介绍了STM32f103入门(5)定时器中断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32f103入门(5)定时器中断,stm32,嵌入式硬件,单片机

STM32 TIM(定时器/计数器)模块的中断流程如下:
配置TIM寄存器:首先,通过配置TIM相关的寄存器来设置计时器的基本参数,例如预分频系数、计数模式、计数器周期等。
使能TIM中断:使用TIM_ITConfig函数或者直接操作TIM的相关寄存器,将所需的中断使能位置1。可以选择使能不同类型的中断,如更新中断、比较中断等。
配置NVIC中断:通过配置NVIC(Nested Vectored Interrupt Controller)的相关寄存器,设置中断优先级和中断向量。可以使用NVIC_Init函数或者直接操作NVIC相关寄存器来完成配置。
编写中断服务程序(ISR):在中断发生时,处理器会跳转到相应的中断服务程序。在中断服务程序中,根据需要进行相应的处理操作,例如读取标志位、清除中断标志、处理中断逻辑等。
中断结束与返回:在中断服务程序的最后,使用return指令退出中断服务程序,并将控制权返回到主程序。
接下来是时基单元的各个部分的作用:
预分频器(Prescaler):预分频器用于控制计数器的时钟频率。通过设置预分频系数,可以将外部时钟频率分频得到内部时钟频率供计数器使用。
计数器(Counter):计数器是TIM模块中的关键部分,用于记录计时或计数的值。根据不同的计数模式,计数器可以向上、向下或双向计数。
自动重载寄存器(Auto-reload Register):自动重载寄存器确定了计数器溢出的点,也即计数器的周期值。当计数器达到自动重载寄存器的值时,计数器会重新从0开始计数。
比较寄存器(Compare Register):比较寄存器用于与计数器的值进行比较。可以设置一个或多个比较值,并在计数器的值与某个比较值相等时触发中断或产生某个特定的事件。
控制寄存器(Control Register):控制寄存器用于配置和控制TIM模块的工作方式,如使能或禁止计时器、选择计时器的工作模式、使能或禁止中断等。
中断与事件(Interrupts and Events):TIM模块支持多种中断和事件,如更新中断(计数器溢出时触发)、比较中断(计数器与比较值相等时触发)等。可以根据需要选择使能或禁止相应的中断或事件,以实现特定的功能。
时基单元通过预分频器、计数器和自动重载寄存器的组合,实现了定时或计数的功能。通过与比较寄存器的结合,可以产生不同的中断或事件,实现更加灵活和高级的定时和计数功能。

函数解析

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)是一个函数调用,用于使能TIM2外设的时钟。它的作用是将控制寄存器中的时钟使能位设置为1,以启用TIM2外设的时钟。

TIM_InternalClockConfig(TIM2)是另一个函数调用,用于将TIM2的时钟源配置为内部时钟。这意味着TIM2将使用内部时钟作为其时钟源。

接下来是对TIM2进行基本时间基准的初始化:

首先创建一个名为TIM_TimeBaseInitStructure的结构体变量,用于配置TIM2的基本参数。

TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_ClockDivision是时钟分频系数,这里设置为TIM_CKD_DIV1,表示不分频。
TIM_CounterMode是计数模式,这里设置为TIM_CounterMode_Up,表示向上计数。
TIM_Period是计数器的周期值,即计数器溢出前的总数。这里设置为10000-1,所以计数器将在10000个时钟周期后溢出。
TIM_Prescaler是预分频系数,用于控制计数器的时钟频率。这里设置为7200-1,所以计数器的时钟频率为72MHz / (7200-1+1) = 10kHz。
TIM_RepetitionCounter是重复计数器的值,用于产生重复计数器更新事件。这里设置为0,表示不使用重复计数器。
接下来是使能TIM2的更新中断:

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
这个函数调用将TIM2的更新中断使能位置为1,允许产生更新中断。

然后是配置NVIC中断优先级分组:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
这个函数调用将NVIC中断优先级分组设置为2,意味着优先级分为4位抢占优先级和0位子优先级。

接下来是对NVIC中断进行初始化配置:

首先创建一个名为NVIC_InitStructure的NVIC_InitTypeDef结构体变量,用于配置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);
NVIC_IRQChannel是指定要配置的中断通道,这里设置为TIM2_IRQn,表示要配置TIM2的中断。
NVIC_IRQChannelCmd是中断使能控制位,这里设置为ENABLE,表示使能TIM2的中断。
NVIC_IRQChannelPreemptionPriority是抢占优先级,这里设置为2。
NVIC_IRQChannelSubPriority是子优先级,这里设置为1。
最后是使能TIM2外设:

TIM_Cmd(TIM2, ENABLE);
这个函数调用将TIM2的使能位设置为1,以使TIM2外设开始工作。

中断函数

void TIM2_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{
		Num ++;
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	}
}


STM32f103入门(5)定时器中断,stm32,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-681488.html

到了这里,关于STM32f103入门(5)定时器中断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103RCT6——定时器简单用法

    STM32F10xx参考手册英文和中文版 百度网盘:https://pan.baidu.com/s/1Z2nB0WVJIxvm3VOI9MQiiw 提取码:lxlx STM32F103RCT6数据手册 链接:https://pan.baidu.com/s/1tRchgf-5C1MN4W58vQ9zPg 提取码:lxlx STM32F103RCT6包括,高级控制定时器TIM1和TIM8,通用定时器TIM2-5,基本定时器TIM6和TIM7. 高级控制定时器TIM1,TI

    2024年02月08日
    浏览(54)
  • STM32F103:ADC采样——定时器触发+DMA传输

    实现ADC多通道采样,采用DMA传输,采样由定时器触发 初始化代码:

    2024年02月14日
    浏览(41)
  • STM32F103定时器引脚重定义功能问题处理

    1、概要 在一个项目中,使用STM32F103RCT6单片机,定时器引脚使用的PC6,PC6默认复用定时器为TIM8_CH1,但是由于其他原因,不能使用TIM8_CH1,因此需要使用其重定义功能TIM3_CH1,本文分享了本人在该项目中定时器TIM3引脚复用功能重定义的一些问题及解决过程,希望对大家能有帮助

    2024年02月10日
    浏览(40)
  • STM32 F103C8T6学习笔记4:时钟树、滴答计时器、定时器定时中断

    今日理解一下STM32F103 C8T6的时钟与时钟系统、滴答计时器、定时器计时中断的配置,文章提供原理,代码,测试工程下载。 目录 时钟树与时钟系统: 滴答计时器: 定时器计时中断: 测试结果: 测试工程下载: 该系统介绍在 STM32F10x-中文参考手册 P56页开始 微控制器的时钟系

    2024年02月13日
    浏览(43)
  • 基于stm32f103c8t6的定时器详解(持续更新)

    先声明:stm32f103c8t6中没有基本定时器、只有TIM1-TIM4:分别是高级定时器和通用定时器(对照下图请自行阅读stm32f103x的datasheet) 1、定时器功能:定时、输出比较、输入捕获、互补输出,其中基本定时器只有定时功能、通用定时器只没有互补输出功能、高级定时器具有所有功能

    2023年04月24日
    浏览(65)
  • 【单片机】STM32单片机,定时器的输入捕获,基于捕获的频率计,STM32F103

    下面的定时器都具有输入捕获能力: 查看另一篇文章:https://qq742971636.blog.csdn.net/article/details/131471539 外部计数频率计的缺点:需要两个定时器配合,最高能测量的频率是否有限制我没具体尝试。 基于捕获的频率计的缺点:最高能测量的频率有限制。 TIM3_CH1 PWM PA6 10KHZ。 输入

    2024年02月14日
    浏览(52)
  • 基于STM32F103C8T6的端口重映射及定时器输出PWM控制

    #一、端口重映射原理及部分/完全重映射 #二、端口重映射的配置 #三、PWM控制 ##1、通用定时器输出PWM ##2、PWM的工作原理 ##3、PWM的内部运作机制 ##4、PWM的模式 ##5、自动加载的预载寄存器 #四、定时器输出PWM结构体及库函数的配置 #五、项目硬件 #六、项目代码 一、端口重映射

    2024年02月13日
    浏览(48)
  • 基于STM32F103C8T6单片机的1秒定时器设计与应用

    标题:基于STM32F103C8T6单片机的1秒定时器设计与应用 摘要: 本文主要探讨了如何在STM32F103C8T6微控制器上利用内部定时器实现精确的1秒钟定时功能,并通过实际项目实施,验证其稳定性和可靠性。首先介绍了STM32F103C8T6单片机的特性及其定时器资源,然后详细阐述了基于TIMx(

    2024年01月18日
    浏览(59)
  • GD32F103x 定时器

    STM32的定时器主要分为三种: 高级定时器、通用定时器、基本定时器 。 即:高级定时器具有捕获/比较通道和互补输出,死区时间,通用定时器只有捕获/比较通道,基本定时器没有以上两者。  1. 基本定时器 1.时钟源 时钟源来自RCC的CK_TIMER,就是内部时钟(CK_INT)直接经过控

    2024年02月07日
    浏览(40)
  • STM32F103C8T6定时器实现led的周期闪烁及PWM实现流水灯

    通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。 使用TIM3和TIM4,分别输

    2024年01月23日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包