目录

一、通用定时器是什么?

1.计数模式

2.工作过程​编辑

3.内部时钟选择

二、通用定时器HAL库函数流程

三、小实验程序要求

四、代码实现

1.TIM.h

2.TIM.c

3.main.c


一、通用定时器是什么?

通用定时器包含一个 16 位或 32 位自动重载计数器( CNT),该计数器由可编程预分频器( PSC) 驱动。 STM32F429 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 STM32F429 的每个通用定时器都是完全独立的,没有互相共享的任何资源。

1.计数模式

通用定时器可以向上计数,向下计数、向上向下双向计数模式。

①向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。

②向下计数模式:计数器从自动加载值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

③中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

2.工作过程

红色框作用就是产生CK_PSC时钟,之后经过CK_PSC预分频器,到CNT计数器,可以通过触发控制器里的从模式控制器来使CNT复位、使能、递增/递减等等。

四种来源产生CK_PSC时钟(计数器时钟可以由以下时钟源提供):

1.内部时钟(CK_INT);

2.TIMx_ETR(外部时钟来源);

3.ITR0-ITR4(定时器级联:输出的定时器可以作为输入)(内部触发输入口)经过选择器选择哪一路,一路到触发控制器;

4.通过外部通道引脚TIMx_CH1和TIMx_CH2,经过Tl1FP1和Tl2FP2选择器到达触发控制器。

3.内部时钟选择

如果APB1分频系数是1,则CK_INT就是×1倍,就该是多是是多少;如果APB1分频系数是2或者4或者其他的系数,则CK_INT就得×2倍。

对于F407,配置系统时钟为:

SYSCLK = 168M;        AHB时钟 = 168M;        APB1时钟 = 42M;

APB1分频系数 = AHB / APB1 = 4,所以通用定时器CK_INT = 2 * 42M = 48

二、通用定时器HAL库函数流程

        1.TIMx时钟使能(x:2~5)        拿TIM3为例

        HAL_RCC_TIM3_CLK_ENABLE();        // 使能TIM3时钟

        2.初始化定时器参数,设置自动重装值,分频系数,计数方式等

        HAL_TIM_Base_Init();

        3.使能定时器更新中断,使能定时器

        HAL_TIM_Base_Start_IT;        // 使能句柄指定的定时器更新中断

        HAL_TIM_Base_Start;           // 使能句柄指定的定时器

        4.TIM3中断优先级设置

        HAL_NVIC_SetPriority(TIM3_IRQn, x, x);

        HAL_NVIC_EnableIRQ(TIM3_IRQn);

       

        5.编写中断服务函数(也要编写中断回调函数)

        void HAL_TIM_IRQHandler();        // 中断服务函数

        HAL_TIM_IRQHandler();                // 中断处理入口函数

void HAL_TIM_PeriodElapseCallback();        // 定时器更新中断回调函数

三、小实验程序要求

通过定时器中断配置,每500ms中断一次,然后中断服务函数中控制LED1实现LED1状态取反。LED0在主函数利用delay_ms实现1s一次反转。

                                公式:Tout(溢出时间) = (ARR + 1)(PSC + 1) / Tclk

例如500ms:

ARR + 1 = 5000        PSC + 1 = 9000        Tclk = 90M(STM32F429)

Tout = 500ms

四、代码实现

1.TIM.h

#ifndef __TIM3_H
#define __TIM3_H#include "sys.h"void TIM3_Init(void);
#endif

2.TIM.c

#include "TIM3.h"
#include "led.h"TIM_HandleTypeDef TIM3_Handler;                         // TIM句柄void TIM3_Init(void)
{TIM3_Handler.Instance = TIM3;TIM3_Handler.Init.Period = 4999;                    // 自动装载值,公式中会自动加1                         TIM3_Handler.Init.Prescaler = 8999;                 // 预分频器,公式中会自动加1                     TIM3_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;HAL_TIM_Base_Init(&TIM3_Handler);                   // TIM初始化HAL_TIM_Base_Start_IT(&TIM3_Handler);               // 使能定时器3,并且开启更新中断}void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)      // Init回调函数
{if (htim->Instance == TIM3)                          // 定时器中得判断是否为TIM3,也可也用else if来判断其他的定时器{__HAL_RCC_TIM3_CLK_ENABLE();                    // 时钟使能HAL_NVIC_EnableIRQ(TIM3_IRQn);                      // 使能TIM3中断HAL_NVIC_SetPriority(TIM3_IRQn, 2, 3);              // 中断优先级}}void TIM3_IRQHandler(void)         // 中断服务函数
{HAL_TIM_IRQHandler(&TIM3_Handler);                  // 中断处理入口函数}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)     // 中断回调函数
{if (htim->Instance == TIM3)                         {LED1 = !LED1;                                       // LED1反转}}

3.main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "TIM3.h"int main()
{HAL_Init();Stm32_Clock_Init(360, 25, 2, 8);delay_init(180);uart_init(115200);led_Init();  TIM3_Init();while (1){LED0 = !LED0;delay_ms(1000);}}

STM32F429通用定时器(TIM)相关推荐

  1. stm32常见定时器---TIM定时及PWM输出

    STM32 常见定时器资源: 系统滴答定时器SysTick----提供时钟节拍做时间基准 看门狗定时器WatchDog----防止程序跑飞 实时时钟RTC 基本定时器:TIM7.TIM6 通用定时器: ...

  2. STM32F407ZG TIM通用定时器

    STM32F407ZG开发板学习(6) 通用定时器简介 TIM2~TIM5 TIM9~TIM14 原理 TIMx控制寄存器1(TIMx_CR1) DMA/中断使能寄存器(TIMx_DIER) 预分频寄 ...

  3. STM32F4 定时器TIM(1)定时器控制输出【使用库函数】

    高级时钟控制定时器TIM1&TIM8简介: STM32F4的高级控制定时器包含一个自动重装载计数器,计数器的输入是一个被预分频的系统时钟. 这个定时器有多种用途,包括车辆输入信号长度(输入捕获 ...

  4. STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...

  5. STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值

    参考:stm32定时器与定时器中断 作者:打酱油的 发布时间: 2021-04-11 01:04:09 网址:https://blog.csdn.net/weixin_46098612/article ...

  6. STM32通用定时器输出PWM

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

  7. tsm2812通用定时器中断_通用定时器中断(TIM2)

    //-------------------TIM2.c------------------------// #include "timer.h" #include "le ...

  8. DSP之时钟与定时器之二通用定时器

    C55x DSP片内有两个2通用定时器,利用定时器可向CPU产生周期性中断或向DSP片外的器件提供周期信号.其中TMS320VC5503/5507/5509/5510 DSP提供的是2个20位通用定时 ...

  9. 通用定时器产生PWM

    一.STM32F103 PWM介绍 STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生PWM输出:其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,而 ...

最新文章

  1. 怎么去掉 IDEA 中 XML 显示的屎黄色
  2. 基于深度学习的医学图像配准综述
  3. mysql简拼_mysql实现汉字换拼音,及汉字转简拼
  4. 他2年拿下博士学位,发表11篇顶会论文!浙大校友李旻辰斩获SIGGRAPH最佳博士论文奖...
  5. tensorflow随笔-二分法求解一元方程
  6. linux mpeg4ip 编译,CentOS6.2下编译mpeg4ip
  7. Sentinel降级简介_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0038
  8. python笔记05_多线程
  9. ROS下载Gazebo模型到本地
  10. 2021-08-21 mvc架构
  11. php怎么把时间精确到毫秒,如何使用php获取当前时间戳、日期并精确到毫秒
  12. Java内存解析 程序的执行过程
  13. SAS Planet软件使用教程及下载Googlemap地图
  14. vc2010解决方案项目编译顺序_安装及配置 VC2010 的详细步骤
  15. 博途V15添加GSD文件
  16. elasticsearch中forcemerge清除文件占用的磁盘空间
  17. 二维矩形件排样算法之最低水平线算法实现
  18. linux美元符号含义
  19. 微博模拟登陆之验证码的解决方法
  20. Windows Server 2008 R2下安装卸载Oracle 11g

热门文章

  1. ln火线零线_LN哪个代表零线哪个代表火线?
  2. 手机+笔记本(台式机)无线上网全攻略
  3. 电商行业转化率到底如何计算?
  4. 忘记电脑密码 ,修改开机密码
  5. java实操项目:悦读FM总结
  6. SDN学习之路——第四天
  7. Windows 10系统Internet Explorer无法显示该网页怎么办?
  8. Java字节输入流的读方法(两种read方法)
  9. matlab不定积分曲线族画图,求函数 的不定积分得到一族积分曲线,有关这族积分曲线描述错误的是/ananas/latex/p/21...
  10. Nuance 发布中文版 Power PDF 3,以卓越的用户体验、强大的文档转换功能以及出色的编辑准确性全面提升工作效率