stm32定时器时间计算

发布者:晴天7777最新更新时间:2023-08-23 来源: elecfans关键字:stm32  定时器  时间计算 手机看文章 扫描二维码
随时随地手机看文章

  STM32定时器的工作原理

  STM32之所以能够实现定时,是单片机内部在计数脉冲(来自晶振)

  T=1/F (F为频率)


  例如:我们以51单片机举例,假设单片机搭配12MHz的晶振,由于51单片机是12分频(即1个机器周期有12个时钟周期),则单片机的最小定时时间为

  1 2 MHz / 2 = 1 MHz

  Tt = 1 / 1 MHz = 1 us

  最小定时时间T=1/1MHz=1us

  51单片机定时器:

  方式0 13位最大定时时间间隔2^13=8.192ms

  方式1 16位最大定时时间间隔2^16=65.536ms

  方式2 8位最大定时时间间隔2^8=256us

  由此我们知道对于一个定时器而言要做到精确定时需要关注2个内容

  1、分频器(分频比)

  2、定时计数器的值

  STM32定时器的时钟

  CK_CNT表示定时器工作频率

  TIMX_PSC表示分频系数

  则定时器的工作频率计算公式为

  CK_CNT=定时器时钟/( TIMx_PSC+1)

  由此我们可得到STM32单片机1个时钟周期

  为:T=1/ CK_CNT

  例如普通定时器模块的时钟为72MH2,分频比位7199,那么我们想要得到一个1秒钟的定时,定时计数器的值需要设定为 》 timx arr = 1 0 0 0 0

  因为72000000/7200=10KHz时钟周期T=1/10KHz=100us100us×10000=1S

  结论:分频比7199定时计数器的值10000

  注意两点:

  (1)TIMx(1-8),在库设置默认的情况下,都是72M的时钟;

  (2)TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

  是重复计数,就是重复溢出多少次才给你来一个溢出中断,

  它对应的寄存器叫TIM1 RCR.

  如果这个值不配置,上电的时候寄存器值可能随机的,本来1秒中断一次,可能变成N 秒中断一次,让计算量变大。

  stm32定时器时间计算

  系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到

  关键是设定 时钟预分频数,自动重装载寄存器周期的值

  /*每1秒发生一次更新事件(进入中断服务程序)。RCC_Configuration()的SystemInit()的

  RCC-》CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2表明TIM3CLK为72MHz。因此,每次进入中

  断服务程序间隔时间为

  ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒 */

  定时器的基本设置

  1、 TIM_TimeBaseStructure.TIM_Prescaler = 7199;//时钟预分频数 例如 :时钟频率=72/(时钟预分频+1)

  2、TIM_TimeBaseStructure.TIM_Period = 9999; // 自动重装载寄存器周期的值(定时时间) 累计 0xFFFF个频率后产生个更新或者中断(也是说定时时间到)

  3、 TIM_TimeBaseStructure.TIM_CounterMode = TIM1_CounterMode_Up; //定时器模式 向上计数

  4、 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值

  5、 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//初始化定时器2

  6、 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断 溢出中断

  7、 TIM_Cmd(TIM2, ENABLE);//打开定时器

  或者:

  TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频35999 72M/

  (35999+1)/2=1Hz 1秒中断溢出一次

  TIM_TimeBaseStructure.TIM_Period = 2000; //计数值2000

  ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1秒 */


关键字:stm32  定时器  时间计算 引用地址:stm32定时器时间计算

上一篇:STM32的ADC转换最常见的方式
下一篇:如何实现一种基于STM32单片机的智能浴室水温调控仪设计

推荐阅读最新更新时间:2024-11-13 11:19

stm32中的串口通信你了解多少
  在基础实验成功的基础上,对串口的调试方法进行实践。硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中。   b) 初始化函数定义:   void USART_Configuration(void); //定义串口初始化函数   c) 初始化函数调用:   void UART_Configuration(void); //串口初始化函数调用   初始化代码:   void USART_Configuration(void) //串口初始化函数   {   //串口参数初始化   USART_InitTypeDef USART_InitStructure; //串口设置恢复默认参数   //
[单片机]
STM32的GPIO在实际开发设计的使用配置和技巧
一、前言 本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。 了解过STM32的GPIO相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特点,应用起来会更加的得心应手。 后续将从以下图1中所示的几个方面对GPIO应用设计中的步骤展开介绍。本篇先介绍GPIO的基本API函数定义,配置初始化的流程,以及使用技巧;针对将GPIO的引脚用于外部中断的功能将作为单独的一篇进行详细的讨论介绍。 图1 GPIO应用设计 二、API函数 STM32有多种类型的库,本节所介绍的STM32的GPIO函数接口是ST
[单片机]
<font color='red'>STM32</font>的GPIO在实际开发设计的使用配置和技巧
STM32 JTAG接口PB3PB4配置为IO口使用问题
因为IO口紧张,在原理绘制期间就利用了PB3和PB4,但是在调试程序的时候才发现,PB3和PB4控制不了。 查看了一下芯片手册,发现芯片在上电后,居然默认是JTAG接口,怪自己粗心了。 JTAG和SWD接口对照如下图。 我们可以看到PB3,PB4,PA15都被利用为JTAG接口中,SWD接口只要PA13,PA14。 所以为了重新使用PB3,PB4,我关闭JTAG功能, RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //开启AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //禁止JTAG功
[单片机]
<font color='red'>STM32</font> JTAG接口PB3PB4配置为IO口使用问题
STM32输入AB相脉冲的编码器程序
// STM32输入AB相脉冲的编码器程序 // 程序中使用TIM5计数器计数AB相脉冲,如果将TIM5修改成其他定时器也能适用。 // PA0和PA1分别作为A、B相脉冲输入 // 可以另外再使用一个定时器,定时读出脉冲数TIM5- CNT // 作者: bjtea // http://blog.csdn.net/bjtea/article/details/8528389 // 以下程序摘自本人做的一个项目,因此可以放心代码的使用 #include stm32f10x_tim.h void T5_Encoder_Configration(void) { GPIO_InitTypeDef GPIO_InitStructu
[单片机]
STM32开发笔记30:STM32L0低功耗设计-STOP_RTC模式下的休眠时间
单片机型号:STM32L053R8T6 本文介绍STOP_RTC模式下,设置进入低功耗休眠时间的方法。 低功耗的休眠时间的设置首先需要确定RTC的基准时间,我们一般将其设置为1秒,这在《STM32L0低功耗设计4: RTC模块1秒时钟的产生方法》中已经介绍过,大家看一下就好。 接下来,就需要对HAL_RTCEx_SetWakeUpTimer_IT函数的第2个参数进行设置了。 具体计算公式:数值 = 定时时间(秒)*(RTC时钟)/16,其中16为该参数的第2个参数,RTC时钟要看具体的时钟源,在我设计的项目中,使用的是LSI,则为37000。 进一步计算:数值 = 定时时间(秒) * 370
[单片机]
stm32烧录的程序为什么会丢失呢
第一次用stm32烧录程序的时候还是很正常的,但没过多久,我又按照以前的步骤再去烧录程序,发现stm32一但按复位,就会莫名其妙的消失,这是怎么回事啊? 小编最近看到有网友在疑惑stm32烧录的程序为什么会丢失呢?在此,小编将给大家分析一下stm32烧录程序丢失的原因。 首先,你要弄清楚自己的在线烧录是通过什么方法烧录的,只有先搞明白这个问题,你才好对症下药。 1、检查一下是不是光盘的质量或者是刻录软件出了问题。毕竟这个问题说大不大,说小不小,还是会影响到stm32烧录程序的。质量好一点的光盘是能够保证程序的稳定运行的。 2、如果你的程序烧写在flash中,那么stm32烧录的程序遇到复位或者掉电是都不会消失的。 3、stm3
[单片机]
STM32 RCC实验MCO脚输出时钟波形
一:rcc设置使用内部HSI时钟,SYSclk 64M MCO输出32M 1: void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; /* RCC system reset(for debug purpose) */ RCC_DeInit(); //??RCC????? ? ????? ???? /* Enable HSE */ //RCC_HSEConfig(RCC_HSE_ON); //? ??????????? ?? RCC_HSEConfig(RCC_HSE_OFF); RCC_HSICmd(ENABLE);
[单片机]
STM32-使用函数指针时莫名复位问题原因
程序莫名复位,经检查是如下原因引起,访问了未知的空间! 这个1不应该加,改正后就没有复位了,所以在编程和测试中,一定要注意边界条件。
[单片机]
STM32-使用函数指针时莫名复位问题原因
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved