STM32F103通用定时器使用
STM32F103单片机中定时器分为3种,高级定时器、通用定时器、基本定时器。
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。
通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:
- 16位向上、向下、向上/向下自动装载计数器
- 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
- 4个独立通道:
- 输入捕获
- 输出比较
- PWM生成(边缘或中间对齐模式)
- 单脉冲模式输出
- 使用外部信号控制定时器和定时器互连的同步电路
- 如下事件发生时产生中断/DMA:
- 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
- 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
- 输入捕获
- 输出比较
- 支持针对定位的增量(正交)编码器和霍尔传感器电路
- 触发输入作为外部时钟或者按周期的电流管理
可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。
void TIMER3_Init(u16 arr, u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_Prescaler = psc;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许更新中断NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM3,ENABLE);
}
void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){TIM_ClearITPendingBit(TIM3,TIM_IT_Update);LED0=!LED0;}
}
这里使用的是定时器3,在初始化时传递了两个参数,其中arr用来设置定时器的周期,PSC设置时钟的分频系数。默认定时器的时钟频率为72MHz,所以带入这两个参数后,定时器的周期计算公式为:
(arr+1)*(psc+1)/72MHz
,设置定时器的计数模式为向上计数。这里开启了定时器的中断功能,所以还需要设置NVIC寄存器,也就是设置定时器的中断优先级。定时器初始化完成之后,还需要提供一个定时器的中断函数,当定时器定时时间到了以后,就会自动跳转到定时器中断函数中。
int main(void)
{u8 key = 0;delay_init(); //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);LED_Init();KEY_Init(); TIMER3_Init(9,71); //50Khz 10us while(1){ }
}
在主函数中初始化定时器,设置定时器分频数为71,默认的晶振频率为72MHz,进行71+1分频后的频率值为1Mhz,然后设置定时器的周期值为9+1,所以定时器的定时频率为1Mhz/(9+1)=100KHz,定时周期为10us。通过示波器观察LED管脚的电平,就可以看到LED管脚的电平每10us就会翻转一次。
STM32F103通用定时器使用相关推荐
- STM32F103通用定时器原理
三种STM32定时器区别 声明:stm32f103c8t6中没有基本定时器.只有TIM1-TIM4:分别是高级定时器(TIM1)和通用定时器. 通用定时器的功能特点描述 计数器模式 通用定时器可以向上 ...
- STM32F103—使用通用定时器控制开关
STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器.4个普通定时器.2个基本定时器.2个看门狗定时器.1个系统嘀嗒定时器 在除去看门狗定时器和系统滴答定时器的八个定时器中: TI ...
- STM32F103基本定时器使用
STM32F103单片机中定时器分为3种,高级定时器.通用定时器.基本定时器. 基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动.它们可以作为通用定时器提 ...
- STM32F103高级定时器使用
STM32F103单片机中定时器分为3种,高级定时器.通用定时器.基本定时器. 高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动.它适合多种用 ...
- 通用定时器产生PWM
一.STM32F103 PWM介绍 STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生PWM输出:其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,而 ...
- STM32CubeMX学习笔记(24)——通用定时器接口使用(电容按键检测)
一.电容按键简介 电容器(简称为电容)就是可以容纳电荷的器件,两个金属块中间隔一层绝缘体就可以构成一个最简单的电容.如图 32-1(俯视图),有两个金属片,之间有一个绝缘介质,这样就构成了一个电容.这 ...
- STM32F103利用定时器编程实现输出一路PWM波形
目录 一.PWM简介 二.STM32F1 PWM介绍 三.PWM输出配置步骤 四.实现代码 五.实现效果 六.参考资料 一.PWM简介 PWM是 Pulse Width Modulation 的缩写, ...
- GD32通用定时器、高级定时器PWM输出例程
通用定时器 /********************************************************************************************* ...
- stm32之通用定时器
文章目录 定时器中断 定时器中断相关寄存器 定时器中断库函数 定时器中断的配置 PWM输出 PWM库函数 pwm配置步骤 输入捕获 库函数的配置 stm32f10x系列最多有8个定时器 3种定时器 1 ...
最新文章
- 漫谈云计算、虚拟化、容器化--云平台技术栈05
- HDU-2044-一只小蜜蜂
- dbms_rowid包的BUG问题
- sql and和in能连用吗_解析法律英语中【同义词连用】现象
- python实现全景图片拼接
- BuildIt: Visual Studio .NET 的自动生成工具
- python调用robotframework_robotframework+python接口自动化的点滴记录(2)
- python中math库最大值_python-math库解析
- 跨域问题:Access-Control-Allow-Origin
- 解决办法:无法安装 /lib/x86_64-linux-gnu/libpng12.so.0 的新版本
- 聊聊spring data jpa的JpaQueryLookupStrategy
- DVWA安装以及模块使用教程(一)
- 超详细excel键盘快捷键大全
- win10扬声器没有声音但插入耳机有声音
- 苏嵌//张朋//2018.07.23
- vue+element弹窗可拖拽拉伸和弹窗内table高度自适应
- Android open failed: ENOENT (No such file or directory)以及open failed: EISDIR (Is a directory)
- Pepper初级教程:第二章 Pepper的使用方法
- 神州数码无线产品(AC+AP)配置
- 实施金蝶ERP系统,破除信息系统壁垒