STM32——TIM定时器
2020/3/14 3:01:38
本文主要是介绍STM32——TIM定时器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
STM32共有16个定时器,定时器分类:2个高级控制定时器、
10个通用定时器、
2个基本定时器、
2个看门狗定时器、
定时器特性:
最大定时器时钟配置专用定时器:RCC_DCKCFGR ----->>>>RCC dedicated clock configuration register
TIMPRE位:主要用于定时器预分频选择,个人认为这称作为倍频选择更合适。TIMxCLK = ? xPCLKx。
重装载定时器:TIMx_ARR,存储内容为要装载到实际重装载寄存器的值。
计数寄存器:TIMx_CNT,当前计数值
基本定时器框图:
方框中的阴影部分为影子寄存器:既有两个定时器。
基本定时器主要注意:
1、时钟源 ,RCC_DCKCFGR 控制
2、控制器 ,
3、计数器 , 计数器寄存器(TIMx_CNT) 、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR),
4、定时器周期计算
标准库初始化结构体:
TIM_TimeBaseInitTypeDef
TIM_TimeBaseInit
入门实验,使用定时器产生0.5秒的中断,使LED实现亮灭反转循环,
宏定义
#ifndef __BSP_BASIC_TIME_H#define __BSP_BASIC_TIME_H#include "stm32f4xx.h"// 定时器源选择#define BASIC_TIM TIM6#define BASIC_TIM_CLK RCC_APB1Periph_TIM6//中断#define BASIC_TIM_IRQn TIM6_DAC_IRQn#define BASIC_TIM_IRQHandler TIM6_DAC_IRQHandlervoid TIMx_Configuration();#endif //__BSP_BASIC_TIME_H
中断配置,基本定时器模式配置
#include "./tim/bsp_basic_time.h"/*编程要点: 初始化 RGB 灯的 GPIO 开启基本定时器时钟 设置定时器周期和预分频器 启动定时器更新中断,并开启定时器 定时器中断服务函数实现 RGB 灯的反转*/// 中断函数static void TIMx_NVIC_Configuretion() { NVIC_InitTypeDef NVIC_InitStructure; //设置中断组 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置中断来源 NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //设置抢占优先级 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_Init(&NVIC_InitStructure); }//定时器基本模式设置static void TIM_Mode_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 开启 TIM_CLK ,X(6,7) RCC_APB1PeriphClockCmd(BASIC_TIM_CLK,ENABLE); // 累计 TIM_Period 个后产生新的中断或者更新 // 当定时器从0计数到4999,即为5000次,为一个定时周期 TIM_TimeBaseStructure.TIM_Period = 5000-1; // 设置定时频率 TIM_TimeBaseStructureTIM_Prescaler = 9000-1; // 初始化定时器 TIM_TimeBaseInit(BASIC_TIM,&TIM_TimeBaseStructure ); // 清除定时器更新中断标志位 TIM_ClearFlag(BASIC_TIM,TIM_FLAG_Update); //开启定时器更新中断 TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE); // 定时器使能 TIM_Cmd(BASIC_TIM,ENABLE); }void TIMx_Configuration() { TIMx_NVIC_Configuretion(); TIM_Mode_Config(); }
主函数调用
int main(void) { /* LED 端口初始化 */ LED_GPIO_Config(); /*初始化按键*/ Key_GPIO_Config(); TIMx_Configuration(); /* 轮询按键状态,若按键按下则反转LED */ while(1) { } }
中断函数
void BASIC_TIM_IRQHandler(void) { if( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET ) { LED1_TOGGLE; TIM_ClearITPendingBit(BASIC_TIM , TIM_IT_Update); } }
主要引用的函数:TIM_ClearFlag 影响TIMx_SR 寄存器的 UIF 位
TIM_ITConfig 在发生上溢时产生中断。
TIM_ClearITPendingBit 清除中断标志位
这篇关于STM32——TIM定时器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解