TIM(0)

stm32定时器

类型编号总线功能
高级定时器TIM1、TIM8APB2拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能
通用定时器TIM2、TIM3
TIM4、TIM5
APB1拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能
基本定时器TIM6、TIM7APB1拥有定时中断、主模式触发DAC的功能

STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4

定时器结构

基本定时器

GTIM1
计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)
计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)
= CK_PSC / (PSC + 1) / (ARR + 1)

CK_CNT:计数器计数频率
CK_CNT_OV:计数器溢出频率
CK_PSC:时钟源频率
PSC:预分频寄存器
ARR:自动重装寄存器

  • CNT计数器自动计数,当与ARR自动重装寄存器的值相等时长生更新中断或更新事件。
  • 带阴影的寄存器代表含有影子寄存器,值改变时,可配置为等待更新事件后再改变或立刻改变。

通用定时器

在这里插入图片描述

  • 带阴影的寄存器代表含有影子寄存器,值改变时,可配置为等待更新事件后再改变或立刻改变。
  • TIMx_ETR为外部GPIO引脚的一个复用功能(见引脚定义表),可提供外部时钟,此时为外部时钟模式2。
  • TRGI作为触发输入可触发定时器的从模式,TRGI也可作为外部时钟成为外部时钟模式1。
  • 外部时钟模式1可用的线路有:TIMx_ETR引脚、ITR信号(来自其他定时器的TRGO输出)、TIF_ED(输入捕获单元的CH1引脚)、TI1FP1/TI2FP2(ch1/ch2引脚)
  • 编码器接口可以读取正交编码器的输出波形(通过TI1FP1/TI2FP2)
  • TRGO可通向其他定时器等(通过将更新事件的信号映射到TRGO上实现主从触发功能)

外部时钟电路

外部时钟模式1:TRGI作为外部时钟
外部时钟模式2:TIMx_ETR为外部时钟

输出比较电路

在这里插入图片描述

CNT与CCR比较的结果输出到输出比较控制器产生OC1ref的信号进行极性选择输出OC1引脚的高低电平。

TIMx_CCMR1:配置输出比较控制器的输出比较模式
TIMx_CCER:配置极性选择
CC1E:选择使能/失能输出

输入捕获电路

在这里插入图片描述

  • 高级定时器和通用定时器拥有4个输入捕获通道
  • ch1通道的信号经过一个异或门的选择(此图中未体现,为了无刷电机的驱动)接入TI1进行滤波和极性选择产生两个输出TI1FP1和TI1FP2(此图仅有TI1FP1),这是为了PWMI模式,之后信号进入预分频器,分频后的信号将触发捕获电路。每来一个触发信号CNT的值相CCR转运一次并发生捕获事件(置状态寄存器的标志位或产生中断)

编码器接口电路
编码器接口的两个输入引脚借用了输入捕获的通道1(ch1)和通道2(ch2)。
TF1FP1和TF2FP2的信号输入到编码器接口,编码器接口托管时钟和CNT计数方式(自增、自减、中央对齐),无需手动设置。
从CNT中读出旋转速度或角度。

主从触发模式

在这里插入图片描述

主模式:将定时器内部信号映射到TRGO引脚,用于出发别的外设
触发源选择:选择从模式TRGI的信号来源
从模式:接收TRGI的信号,并自动实现相应功能

主模式信号从模式信号
Reset复位信号Closed关闭从模式
Enable使能定时器的信号Encoder1编码器模式1(仅TI2计数)
Update定时器的更新信号Encoder2编码器模式2(仅TI1计数)
OC1比较或捕获成功信号Encoder3编码器模式3(都计数)
OC1REFOC1REF的信号Reset计数器复位清零
OC2REFOC2REF的信号Gated输入高电平启动计数器
低电平停止(不复位)
OC3REFOC3REF的信号Trigger启动计数器(不复位)
OC4REFOC4REF的信号External1驱动计数器计数

高级定时器

在这里插入图片描述

重复次数计数器可实现每隔几个计数周期才发生一次更新信号。

  • DTG是死区生成电路。

  • BRK是刹车输入电路。

时基单元初始化流程

  • TIM选择:TIM_InternalClockConfig() TIM1 ~ TIM4//内部时钟源选择
  • TIM时基单元结构体:TIM_TimeBaseInitTypeDef
    • TIM_ClockDivision:TIM_CKD_DIV1
    • TIM_CounterMode:计数方式(向上计数等)
    • TIM_Period:ARR自动重装计数器
    • TIM_Prescaler:PSC预分频
    • TIM_RepetitionCounter:重复计数器
  • TIM初始化:TIM_TimeBaseInit()


                                     ------ BY Flier

2023.8.29

Reference:江协科技、《stm32f10x用户手册》、《stm32库开发实战指南教程》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在DSP28335中配置TIM0定时器需要进行以下几个步骤: 1. 配置时钟模块,设置系统时钟为150MHz。 2. 配置GPIO模块,使能定时器的GPIO引脚。 3. 配置TIM0计数器,设置定时器的计数模式和计数值。 4. 配置TIM0中断,设置定时器中断的触发源和优先级。 下面是一个基本的DSP28335配置TIM0定时器的代码示例: ``` #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" void Init_Timer0(void) { // Step 1: 配置时钟模块 InitSysCtrl(); InitPieCtrl(); IER = 0x0000; IFR = 0x0000; // Step 2: 配置GPIO模块 EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; //将GPIO0引脚配置为TIM0计数输入 GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; //使能GPIO0引脚上拉 EDIS; // Step 3: 配置TIM0计数器 EALLOW; CpuTimer0Regs.TCR.all = 0x4000; //禁止计数器 CpuTimer0Regs.TCR.bit.TSS = 1; //停止计数器 CpuTimer0Regs.PRD.all = 15000000; //设置计数器周期为0.1s CpuTimer0Regs.TCR.bit.TRB = 1; //复位计数器 CpuTimer0Regs.TCR.bit.FREE = 0; //计数器不自由运行 CpuTimer0Regs.TCR.bit.SOFT = 0; //使用硬件触发 CpuTimer0Regs.TCR.bit.TIE = 1; //使能计数器中断 EDIS; // Step 4: 配置TIM0中断 PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //使能PIE模块 PieVectTable.TINT0 = &cpu_timer0_isr; //设置中断向量表 IER |= M_INT1; //使能中断源 PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能对应的中断 // Step 5: 启动计数器 EALLOW; CpuTimer0Regs.TCR.bit.TSS = 0; //启动计数器 EDIS; } interrupt void cpu_timer0_isr(void) { // TIM0中断服务函数 } void main(void) { Init_Timer0(); //初始化TIM0定时器 while(1) { // 程序主循环 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值