STM32F103单片机中定时器分为3种,高级定时器、通用定时器、基本定时器。

  基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。这2个定时器是互相独立的,不共享任何资源。

TIM6和TIM7定时器的主要功能包括:

  • 16位自动重装载累加计数器
  • 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频
  • 触发DAC的同步电路
  • 在更新事件(计数器溢出)时产生中断/DMA请求

  这个可编程定时器的主要部分是一个带有自动重装载的16位累加计数器,计数器的时钟通过一个预分频器得到。软件可以读写计数器、自动重装载寄存器和预分频寄存器,即使计数器运行时也可以操作。

  通过上面的介绍可以看出,基本定时器的功能很简单,就只是提供一个简单的定时功能。下面通过代码演示基本定时器的定时功能:

// 中断优先级配置
static void TIM6_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);           // 设置中断组为0      NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn ;       // 设置中断来源       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   // 设置主优先级为 0     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;       // 设置抢占优先级为3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}
/** 注意:TIM_TimeBaseInitTypeDef结构体里面有5个成员,TIM6和TIM7的寄存器里面只有* TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的时候只需初始化这两个成员即可,* 另外三个成员是通用定时器和高级定时器才有.*-----------------------------------------------------------------------------*typedef struct*{ TIM_Prescaler            都有*   TIM_CounterMode              TIMx,x[6,7]没有,其他都有*  TIM_Period               都有*  TIM_ClockDivision        TIMx,x[6,7]没有,其他都有*  TIM_RepetitionCounter    TIMx,x[1,8,15,16,17]才有*}TIM_TimeBaseInitTypeDef; *-----------------------------------------------------------------------------*/
static void TIM6_Mode_Config(u16 arr, u16 psc)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); // 开启定时器时钟,即内部时钟CK_INT=72M        TIM_TimeBaseStructure.TIM_Period = arr;    // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断    TIM_TimeBaseStructure.TIM_Prescaler= psc;   // 时钟预分频数为       //TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        // 时钟分频因子 ,基本定时器没有,不用管        //TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;    // 计数器计数模式,基本定时器只能向上计数,没有计数模式的设置      //TIM_TimeBaseStructure.TIM_RepetitionCounter=0;   // 重复计数器的值,基本定时器没有,不用管      TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);   // 初始化定时器       TIM_ClearFlag(TIM6, TIM_FLAG_Update);           // 清除计数器中断标志位       TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);     // 开启计数器中断     TIM_Cmd(TIM6, ENABLE);                                 // 使能计数器
}void TIM6_Init(void)
{TIM6_NVIC_Config();TIM6_Mode_Config(10-1,72-1);
}void  TIM6_IRQHandler ( void )
{if ( TIM_GetITStatus( TIM6, TIM_IT_Update ) != RESET ){LED0=!LED0;TIM_ClearITPendingBit( TIM6, TIM_FLAG_Update );}
}

  基本定时器的初始化高级定时器和通用定时器简单很多,只需要设置定时器的周期值和时钟分频系数就可以了。如果要使用中断功能时,需要设置NVIC寄存器,这个寄存器主要是用来设置中断优先级。

int main(void)
{u8 key = 0;delay_init();       //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init();KEY_Init();  TIM6_Init();          while(1){      }
}

  在主函数中调用定时器初始化函数后,定时器就开始工作了。定时器时间计算公式为(arr+1)*(psc+1)/72MHz,将参数9、71带入公式后,计算出定时器的定时周期值为10us。

STM32F103基本定时器使用相关推荐

  1. STM32F103通用定时器使用

      STM32F103单片机中定时器分为3种,高级定时器.通用定时器.基本定时器.   通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成.它适用于多种场合,包括测量输入信号的脉冲长度( ...

  2. STM32F103高级定时器使用

      STM32F103单片机中定时器分为3种,高级定时器.通用定时器.基本定时器.   高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动.它适合多种用 ...

  3. STM32F103利用定时器编程实现输出一路PWM波形

    目录 一.PWM简介 二.STM32F1 PWM介绍 三.PWM输出配置步骤 四.实现代码 五.实现效果 六.参考资料 一.PWM简介 PWM是 Pulse Width Modulation 的缩写, ...

  4. STM32F103 - CubeMX 的使用实例详细(04.5)- STM32F103的 - 定时器设定详细解释 - 定时器相关的HAL接口函数 - 定时器的中断

    前言:本文介绍STM32 定时器中断控制的HAL 接口定义: 1 该驱动接口能实现的主要功能: 1.1 有哪些驱动 /**   ************************************ ...

  5. STM32 - CubeMX 的使用实例详细(04.1)- STM32F103的 - 定时器设定详细解释 - PWM波的产生 - 频率占空比的设定 - 软件代码分析

    前言:本文详细条例STM32 103定时器的设定 1 定时器简介 中等容量的STM32F103xx增强型系列产品包含1个高级控制定时器.3个普通定时器,以及2个看门 狗定时器和1个系统嘀嗒定时器. 下 ...

  6. STM32F103 TIM4定时器

    1.通用定时器(TIM) 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成. 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM). 使用定时 ...

  7. STM32F103高级定时器死区时间计算

    官方数据手册的说明不容易看懂,举的例子与我的应用场合也不一致,我使用的是72MHz的晶振,讲一讲我的死区时间是怎么算出来的. DT死区时间: TDTS为系统时钟周期时长: TDTG为系统周期时长乘以倍 ...

  8. STM32F103高级定时器死区时间的计算

    看了一些网上讲死区时间计算的教程,觉得讲述的不是很清楚,所以在此用我自己理解的方式讲述一遍,如有错误,请读者赐教. 死区时间的设置:由寄存器"TIM1和TIM8刹车和死区寄存器TIMX_BD ...

  9. STM32F103 基本定时器 (P2MDA-KM4)

    27 基本定时器 27.1 定时器分类 STM32F1 系列中,除了互联型的产品,共有8 个定时器,分为基本定时器,通用定时器和高级定时器. 基本定时器:TIM6 和TIM7 是一个16 位的只能向上 ...

最新文章

  1. iframe,window,滚动栏的一些问题
  2. php中public放什么,PHP中常用关键字public, private, protected, static...
  3. java fastjson_java操作json数据之fastjson
  4. C#类型反射、晚期绑定、特性编程的使用背景与分析
  5. N小时改变一次url时间戳的方法
  6. 数学--数论--HDU1825(积性函数性质+和函数公式+快速模幂+非互质求逆元)
  7. Windows Mobile下使用CppUnitLite输出测试结果
  8. 什么时候对象可以被收回?
  9. 使用mptt在easyui中显示树形结构
  10. Foobar2000是一款完全可定制的音乐播放器
  11. VS Code:4个中文乱码问题及解决方法
  12. 计算机组装故障排除方法,计算机组装 常见的硬件故障及排除方法
  13. 人行地区代码一览表_全国行政区划与银行地区代码对应关系一览表模板
  14. Java微信小微商户进件,已经解决接口暂无权限,稍后再试的问题
  15. ftp上传工具 免安装,3款最好用的ftp上传工具 免安装
  16. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计
  17. (附源码)springboot家庭财务分析系统 毕业设计 641323
  18. 苹果平板电脑服务器已停止响应,苹果平板电脑ipad完全死机怎么办【解决方法】...
  19. 物联网毕设分享 STM32 wifi照明控制系统 - 智能路灯(毕设分享)
  20. SAP 选择屏幕下拉框实现

热门文章

  1. sql2012 数据库连接错误
  2. Linux下修改时间时区
  3. linux sudo使用和sudoers配置详解
  4. Windows Server 2008 故障转移群集简介
  5. xadmin与admin设置
  6. iOS 数据库操作(使用FMDB)
  7. Android开发之广播
  8. 使用命名空间别名限定符 ::
  9. JMeter中使用“用户自定义变量”实现参数化
  10. 软件测试用例设计方法之边界值分析法