STM32定时中断具体配置讲解(定时1s触发中断为例)(有待更新)

这篇具有很好参考价值的文章主要介绍了STM32定时中断具体配置讲解(定时1s触发中断为例)(有待更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        这里介绍一下STM32定时中断。

        有时候我们需要用到定时或者计数功能,这时候就需要用到定时器了,通俗地讲就是我们可以通过调节它的本身主频率来得到我们需要的频率大小,进而设定时间,也可以配置外部计数的模式使用外部计数。

        这里以STM32F103C8T6为例,该单片机拥有四个定时器,其中包括一个高级定时器TIM1,通用定时器TIM2,TIM3,TIM4,我们用TIM2进行代码编写。

        首先进行定时器的初始化配置,具体配置见下面所附代码,讲解一下部分比较难懂的地方,这里说明一下TIM2是APB1总线外设,所以开启APB1,其余定时器的总线查看以下数据手册。STM32定时中断具体配置讲解(定时1s触发中断为例)(有待更新),stm32,嵌入式硬件,单片机

        配置基本按照如下代码就行,其中TIM_Period为计数周期ARR的值,TIM_Prescaler即预分频PSC的值,这里用到一个计算公式算得自己想要的时间,公式为(TIM_Prescaler+1)/72MHz=计数时钟周期再乘以计数周期TIM_Period,假设需要一个1s的定时,则设定TIM_Prescaler为7200+1,公式得到为0.1ms,再乘以一个10000的计数周期则为1s的定时了。

        TIM_ClearFlag清除定时器更新标志位,以防代码开始运行的初始值不为0。后面通过TIM_ITConfig开启更新时钟中断,后面就需要配置NVIC了,其中主要是涉及到抢占优先级和中断优先级分组,其余配置仿制就行,由于代码较为简单,所以优先级分组多少无所谓,最后别忘了TIM_Cmd使能开始运行。

#include "stm32f10x.h"                  // Device header

void Timer_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//tim2是APB1外设总线的
	
	TIM_InternalClockConfig(TIM2);//YIM2的时基单元由内部时钟控制
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_Period=10000-1;//周期值定时1秒
	TIM_TimeBaseInitStruct.TIM_Prescaler=7200-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的通路
	
	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=1;
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_Cmd(TIM2,ENABLE);
	
}

        向上面这样,定时1s的中断就已经弄好了,接下来我们在主函数里调用就行。

        这里我们定义一个无符号的数uint16_t Num,记得初始化时钟,定义一个函数void TIM2_IRQHandler(void),在里面我们需要用到TIM_GetITStatus这个函数,获取判断是否是更新事件触发的中断,如果是,那么进入if,执行num++,即每过1s,num加1,最后别忘了用TIM_ClearITPendingBit清除TIM2更新事件的中断标志位,否则会导致程序卡死。这样就配置好了整个的定时器定时1s触发中断执行num数值加1的操作,如果想形象的展示num值加1的操作可以配置OLED显示屏的相关代码,本文就不再说明了。文章来源地址https://www.toymoban.com/news/detail-767493.html

#include "stm32f10x.h"                  // Device header
#include "Timer.h"
uint16_t Num;

int main (void)
{
	Timer_Init();

	while(1)
	{
	}
	
}
void TIM2_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
	{
		Num++;
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除标志位
	}
}

到了这里,关于STM32定时中断具体配置讲解(定时1s触发中断为例)(有待更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32F103利用CubeMX配置开启定时中断

    1、外部晶振8MHz,下载方式SWD模式,需求配置定时器1,产生每100ms一次中断 新建工程、配置晶振、选择下载方式等略 2、查阅资料,STM32F103的时钟树分配  3、配置CubeMX的时钟树  4、配置定时器-开启定时中断  5、配置定时时间 ( 定时周期 = (Prescaler + 1) × (Period + 1) ÷ 时钟频率

    2024年02月15日
    浏览(42)
  • 【STM32】定时器1触发ADC多(规则)通道采样+DMA(CUBEMX配置)

    在用单片机做电源控制时不得不提ADC采集,离散系统是有固定的执行周期的,所以我们采样也是要固定时间去采样。然后就是我希望pwm波(定时器1产出)的频率与采样频率一致。 我下面演示的是G431CBU6,当然其他芯片也大差不差了。 说一下大致流程,TIM1触发ADC采样,然后

    2024年02月01日
    浏览(46)
  • 【STM32】中断与NVIC以外部中断为例

    在stm32中姑且可以认为,异常就是中断 单片机上电之后,首先执行启动文件,开辟堆栈之后,开始初始化中断向量表。 NVIC NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是 内核 里面的一个外设。 ####三个寄存器 ISER 、 ICER 和 IP NVIC 结构体

    2024年02月10日
    浏览(34)
  • STM32——定时器——定时中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本节先只讲解定时器的定时中断,内外中断源选择。 TIM(Timer)定时器 定时器可以 对输入的时钟进行计数 ,并在计数值达到设定值时触发中断。 16位计数器、预分频器、自动重装寄存器的时基单元 ,

    2024年04月10日
    浏览(45)
  • STM-32:TIM定时中断—定时器定时中断/定时器外部时钟

    定时器可以对输入的时钟进行计数,并在达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等

    2024年02月09日
    浏览(54)
  • stm32 定时器部分(定时中断)

    一.定时中断(概念部分) 定时中断主要包含两种中断一种是更新中断还有一种是输入捕获中断 更新中断 :更新中断通常用于定时器的基本定时功能。当定时器计数器溢出并重新从零开始计数时,会触发更新中断。你可以配置定时器的计数周期和预分频器来控制定时器的计时

    2024年03月15日
    浏览(56)
  • 【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中断服务函数 参考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定时器定时中断.rar 10-定时器外部时钟.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年02月03日
    浏览(51)
  • 【STM32】STM32学习笔记-TIM定时中断(13)

    TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码

    2024年01月17日
    浏览(44)
  • 定时器中断实验(stm32)

    计算公式: Tout= ((arr+1)*(psc+1))/Tclk 其中: Tclk:TIM3 的输入时钟频率(单位为 Mhz)。 Tout:TIM3 溢出时间(单位为 us) Tout= ((4999+1)*( 7199+1))/72=500000us=500ms

    2024年02月13日
    浏览(47)
  • STM32基本定时器中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 定时器有什么用?精准延时,PWM,做一个时钟:年月日,时分秒。时钟最基本的就是1s怎么来? 提示:以下是本篇文章正文内容,下面案例可供参考 1.1如何实

    2024年02月06日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包