• 编译工具:MDK5
  • 举例芯片:STM32F103RC
  • 问题疑点:计算中断发生周期是使用72MHz还是36MHz

1.先看看计算公式:

定时中断发生的时间T:
T = (arr+1)*(psc+1)/72M
当设置arr=  999,psc  = 71999,T=1s

参考定时器3的配置函数,如下:

void time3_Init(u16  arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;  //声明一个结构体变量NVIC_InitTypeDef NVIC_InitStructure;/* 开启定时器3时钟 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源TIM_TimeBaseInitStructure.TIM_Period = arr;//设置自动重装载寄存器周期的值TIM_TimeBaseInitStructure.TIM_Prescaler = psc;//设置用来作为TIMx时钟频率预分频值TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分频系数TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);TIM_Cmd(TIM3,ENABLE); //使能TIMx外设/* 设置中断参数,并打开中断 */TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );   //使能或者失能指定的TIM中断/* 设置NVIC参数中断 */NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //打开TIM3_IRQn的全局中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;   //抢占优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;  //响应优先级为1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //使能NVIC_Init(&NVIC_InitStructure);
}

可能有朋友存在疑问,为什么计算的时候使用的是72M,TIM3定时器挂载在APB1上,而APB1的时钟是系统时钟HCLK的二分频,系统时钟是72MHz,也就是说APB1的时钟就是36MHz,先看看下图吧

虽然二分频之后APB1外设时钟是36MHz,但是定时器的时钟在二分频之后再次进行二倍频,同时,我们在配置TIM3时,设置的TIM分频系数为1TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; 所以我们在使用上面公式的时候就得使用72MHz进行计算了

另附上定时中断函数:

void TIM3_IRQHandler(void)           //TIM3 1s
{if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TM3更新中断与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清楚中断标志..................用户书写需要执行的相关代码区域.........................}
}

本人菜鸟一枚,以上是个人见解,如有不足望留言!

STM32 定时器中断周期计算相关推荐

  1. 关于stm32定时器定时周期计算

    1.TIMx(1-8),在库设置默认的情况下,都是72M的时钟: 名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在 APB1总线上.其中TIM1&TI ...

  2. stm32定时器中断的配置步骤

    stm32定时器中断的配置步骤 1>TIM3 时钟使能 位于低速的APB1总线上(注意:高级定时器是在高速的APB2总线上): RCC_APB1PeriphClockCmd(RCC_APB1Pe ...

  3. stm32定时器中断配置及使用

    stm32定时器中断配置及使用 定时器中断就是:可以周期性的执行某些功能,而不受main函数的影响. 我们以通用定时器time3为例说明 1.首先配置时钟源为内部时钟,分频和充装载值根据自己需要填入, ...

  4. STM32定时器中断

    目录 一.关于STM32定时器中断 1.定时器分类 2.通用定时器的功能特点 3.定时器中断的触发 4.定时时钟计算方法 二.CubeMX初始化配置 1.芯片选型(我们这里运用的STM32F103C8 ...

  5. 7. STM32——定时器中断(1秒闪烁灯)

    STM32--定时器中断(1秒闪烁灯) 基本框架 1. 配置定时器时钟 在 stm32f10x_rcc.h 头文件中查找相关函数函数 2. 配置定时器结构体 在 stm32f10x_tim.h 头文件 ...

  6. STM32定时器中断显示时间

    前言 利用STM32的定时器中断,实现时间的显示.我们知道利用定时器中断只能进行tick的计算,然而用来显示时间我们应该怎么办呢?经过项目的实际运用,我发现利用定时器中断配合串口通讯也能实现时间显示. ...

  7. 【CubeMX配置stm32定时器中断】

    CubeMX配置stm32定时器中断 一.使用CubeMX对STM32进行基础的配置 1.选择需要使用的定时器 选择TIM2和TIM3示例, 注意: TIM2和其它定时器选择时钟的方法不同,TIM3等 ...

  8. STM32 定时器及PWM计算占空比计算周期

    文使用Cubemx+MDK5开发方式(纯新手向 记录一下) 定时器时间计算 两步 (特别特别特别注意单位换算 简单无脑) 1MHZ = 1000KHZ 1KHZ = 1000HZ 1HZ 的周期是1秒 ...

  9. stm32定时器中断_stm32F4之定时器的基本使用

    概述 上一篇说了stm32F4GPIO的使用,这篇说说定时器的使用 一. stm32F407的定时器资源介绍: ​ STM32F407有14个定时器,其中有12个16位的定时器,2个32位的定时器 这 ...

最新文章

  1. 溢出内容菜单_停止过度使用溢出菜单
  2. Java 程序员薪资这么高,取决于什么?
  3. Spring Cloud入门教程-Hystrix断路器实现容错和降级
  4. 《是男人就下100层》真的有隐藏剧情!B站up主数月破解,原作者点赞致谢
  5. IntelliJ IDEA 常用设置
  6. JavaScript教程之快速入门
  7. Coolite Toolkit入门指南
  8. ASP.NET MVC Music Store教程(2):控制器
  9. 为何要搞 10 年?方舟编译器专家首次回应
  10. java 标识符_java标识符的基础知识
  11. 一道不起眼的面试题,但被头条面试官玩出了花,48张图,2个动画,带你还原面试现场
  12. memcached安装部署及启动错误排查
  13. bat脚本实现一键IP切换
  14. 什么是Hash(哈希)?
  15. 彼得德鲁克管理理念摘写
  16. HTML将某几个文字添加下划线 并标红
  17. Oracle笔记_日期相关
  18. 主机连接服务器的过程
  19. mysql 交集,并集,差集
  20. js获取用户选择的文件路径[曲线救国]

热门文章

  1. Window Server2012 安装ASPupload记录
  2. 【Android】Mac M1 Android开发环境搭建(Android Studio和JDK安装)
  3. Twaver-HTML5基础学习(6)告警元素(Alarm)闪烁效果
  4. 乐优商城笔记-商城系统功能编写
  5. 多目标跟踪数据关联算法
  6. Interview之NLP:人工智能领域求职岗位—自然语言处理NLP算法工程师职位的简介、薪资介绍、知识结构之详细攻略
  7. java mina http_mina的HTTP性能测试
  8. 请求消息详解(请求头、get、post、请求体)
  9. MATLAB 一二三维矩阵之间转换
  10. 【面试大全-缓存】-Redis有哪些适合的场景