STM32F103 ——TIMx

简介

在stm32f103一共有8个定时器,其中两个高级定时器TIM1、TIM8,四个通用定时器TIM2~TIM5,两个基本定时器TIM6、TIM7。
其中高级定时器功能最多(参考手册中给了共21条功能描述),通用定时器次子(16条功能描述),基本定时器功能最少(4条功能描述,只用来进行最基本的计数器工作)。
在使用时根据需求选用对应的定时器。按需选择


通用定时器TIM2~TIM5

通用定时器功能丰富,总结一下就是——一计数器,四通道,两模式+其他功能


  • 影子寄存器(ARR、PSC、CCRx),统称存有装载值的寄存器。待更新事件UEV产生后会被更新
  • 计时器时钟CK_CNT等于输入时钟CK_INT\预分频系数。通用定时器全挂载在APB1上,默认输入时钟CK_INT=36MHZ*2。 若相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。

计数器(TIMx_CNT)

计数器最基本的功能

stm32中定时器的定时功能是由计数器为基础实现的。在使能定时器(TIMx_CR1->0x01,控制器寄存器1第0位置1)后,计数器便开始按照一个时钟频率(分频后的时钟CK_CNT)减或加1的方式进行自动的计数,直到减至零或加至预先设置的值(TIM_ARR的值)时。此时若设置允许更新事件产生(TIMx_CR1->UDIS->0),定时器产生一个更新事件(TIMx_SR->UIF->1)。通过捕获更新事件实现基本定时。

在设置TIMx_ARR(装载器)的值时,若TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)置1,TIMx_ARR先被装入缓存器,等待更新事件UEV后生效;若ARPE置0,设置ARR寄存器后直接生效。

计数器的三种工作模式——向上,向下,双向计数

向上
计数器从0计数到装载器(TIMx_ARR)的值,溢出后产生更新事件UEV。若不是单脉冲模式,将计数器清零,重新开始新一轮计数。

ARR->0x36,时钟预分频系数为1参考手册

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

ARR->0x36,预分频系数为1参考手册

双向
计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。

ARR->0x06,预分频1参考手册


//keil5配置定时器
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
	TIM_TimeBaseStructure.TIM_Period = arr;		//配置ARR寄存器
	TIM_TimeBaseStructure.TIM_Prescaler = psc;		//预分频系数
	TIM_TimeBaseStructure.TIM_Clo
### STM32F103 PWM 配置与使用教程 #### 一、PWM 功能概述 脉宽调制 (Pulse Width Modulation, PWM) 是一种通过改变信号占空比来控制功率的技术,在电机控制、LED 调光等领域广泛应用。STM32F103系列微控制器内置定时器模块支持多种模式下的PWM输出功能[^1]。 #### 二、硬件资源准备 对于基于STM32F103的开发板而言,通常会配备有多个可作为PWM输出端口的选择。具体到某一块特定型号的开发板时,则需查阅其官方文档确认哪些GPIO引脚可以被配置成TIMx_CHy形式用于PWM输出[^2]。 #### 三、软件环境搭建 建议采用Keil MDK或其他兼容IDE创建新项目,并导入标准外设库(Standard Peripheral Library),以便简化寄存器操作过程中的编程难度。此外还需要安装ST-Link调试工具以及相应的驱动程序以实现在线仿真和下载固件等功能[^3]。 #### 四、初始化设置 为了使能指定通道上的PWM波形输出,首先要完成如下几个方面的参数设定: - **RCC_APB1PeriphClockCmd()**: 开启相应定时器所在总线时钟; - **GPIO_InitTypeDef GPIO_InitStructure**: 定义并初始化要使用的IO接口属性; - **TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure**: 设置计数频率及时基分频系数等基本信息; - **TIM_OCInitTypeDef TIM_OCInitStructure**: 对应比较单元的具体工作方式及其初始状态描述; ```c // 启动APB1外设时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 初始化GPIOA第6针为复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); ``` #### 五、启动PWM 输出 当上述准备工作完成后就可以正式开启PWM输出了。这一步骤主要涉及到两个方面的工作——一是利用`TIM_Cmd()`函数打开/关闭整个定时器的操作权限;二是借助于`TIM_SetCompare1()/TIM_SetCompare2()/...`这类API调整各个独立信道的实际输出电平高低变化规律[^4]。 ```c // 设定周期值 uint16_t PeriodValue = 999; // 假设预分频=72M/(84*1000)-1 -> f_pwm≈1kHz TIM_SetAutoreload(TIM3, PeriodValue); // 设定CCR寄存器初值即占空比大小 TIM_SetCompare1(TIM3, CompareValue); // 更新影子寄存器立即生效 TIM_GenerateEvent(TIM3,TIM_EventSource_Update); // 正式启用TIM3定时器 TIM_Cmd(TIM3,ENABLE); ``` #### 六、注意事项 实际应用过程中还需注意一些细节问题,比如合理规划各部分电路之间的电气连接关系以免造成不必要的干扰现象发生;另外就是针对不同应用场景灵活选用合适的中断服务例程(ISRs)来进行实时监测处理等等[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值