STM32F429通用定时器(TIM)
目录
一、通用定时器是什么?
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)相关推荐
- stm32常见定时器---TIM定时及PWM输出
STM32 常见定时器资源: 系统滴答定时器SysTick----提供时钟节拍做时间基准 看门狗定时器WatchDog----防止程序跑飞 实时时钟RTC 基本定时器:TIM7.TIM6 通用定时器: ...
- STM32F407ZG TIM通用定时器
STM32F407ZG开发板学习(6) 通用定时器简介 TIM2~TIM5 TIM9~TIM14 原理 TIMx控制寄存器1(TIMx_CR1) DMA/中断使能寄存器(TIMx_DIER) 预分频寄 ...
- STM32F4 定时器TIM(1)定时器控制输出【使用库函数】
高级时钟控制定时器TIM1&TIM8简介: STM32F4的高级控制定时器包含一个自动重装载计数器,计数器的输入是一个被预分频的系统时钟. 这个定时器有多种用途,包括车辆输入信号长度(输入捕获 ...
- STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值
参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...
- STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值
参考:stm32定时器与定时器中断 作者:打酱油的 发布时间: 2021-04-11 01:04:09 网址:https://blog.csdn.net/weixin_46098612/article ...
- STM32通用定时器输出PWM
1 .TIMx简介 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成. 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM). 使用定时器预分 ...
- tsm2812通用定时器中断_通用定时器中断(TIM2)
//-------------------TIM2.c------------------------// #include "timer.h" #include "le ...
- DSP之时钟与定时器之二通用定时器
C55x DSP片内有两个2通用定时器,利用定时器可向CPU产生周期性中断或向DSP片外的器件提供周期信号.其中TMS320VC5503/5507/5509/5510 DSP提供的是2个20位通用定时 ...
- 通用定时器产生PWM
一.STM32F103 PWM介绍 STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生PWM输出:其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,而 ...
最新文章
- 怎么去掉 IDEA 中 XML 显示的屎黄色
- 基于深度学习的医学图像配准综述
- mysql简拼_mysql实现汉字换拼音,及汉字转简拼
- 他2年拿下博士学位,发表11篇顶会论文!浙大校友李旻辰斩获SIGGRAPH最佳博士论文奖...
- tensorflow随笔-二分法求解一元方程
- linux mpeg4ip 编译,CentOS6.2下编译mpeg4ip
- Sentinel降级简介_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0038
- python笔记05_多线程
- ROS下载Gazebo模型到本地
- 2021-08-21 mvc架构
- php怎么把时间精确到毫秒,如何使用php获取当前时间戳、日期并精确到毫秒
- Java内存解析 程序的执行过程
- SAS Planet软件使用教程及下载Googlemap地图
- vc2010解决方案项目编译顺序_安装及配置 VC2010 的详细步骤
- 博途V15添加GSD文件
- elasticsearch中forcemerge清除文件占用的磁盘空间
- 二维矩形件排样算法之最低水平线算法实现
- linux美元符号含义
- 微博模拟登陆之验证码的解决方法
- Windows Server 2008 R2下安装卸载Oracle 11g
热门文章
- ln火线零线_LN哪个代表零线哪个代表火线?
- 手机+笔记本(台式机)无线上网全攻略
- 电商行业转化率到底如何计算?
- 忘记电脑密码 ,修改开机密码
- java实操项目:悦读FM总结
- SDN学习之路——第四天
- Windows 10系统Internet Explorer无法显示该网页怎么办?
- Java字节输入流的读方法(两种read方法)
- matlab不定积分曲线族画图,求函数 的不定积分得到一族积分曲线,有关这族积分曲线描述错误的是/ananas/latex/p/21...
- Nuance 发布中文版 Power PDF 3,以卓越的用户体验、强大的文档转换功能以及出色的编辑准确性全面提升工作效率