stm32定时器

1.定时器

定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断

16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时

不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获(IC)、输出比较(OC)、编码器接口、主从触发模式等多种功能

根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型(STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4)

PSC预分频,例如PSC的值为1,则进行二分频,好比主频是72MHz,分频后为36MHz。

CNT计数器,可分为向上计数、向下计数、中央计数(上下均计数)三种模式。

自动重转载计数器即为计数的数值(ARR),即计数周期,参数为period。

1s钟计数的频率=72M/(PSC+1)/(ARR+1)

2.定时器中断

1.初始化GPIO引脚

2.初始化时基单元

3.开启TIM的中断

4.配置NVIC中断

5.使能时钟

6.编写中断处理函数

3.影子寄存器

影子寄存器(Shadow Registers)是嵌入式系统中用于增强寄存器操作的一种技术。它通常用于存储寄存器的备份副本,以确保系统在进行某些重要操作时能够保持稳定和可靠。影子寄存器的作用主要体现在以下几个方面:

提高系统的响应速度和效率:影子寄存器可以在无需访问主寄存器的情况下,快速访问和修改寄存器的内容。这对实时操作系统和需要快速响应的嵌入式系统尤为重要。

无中断的寄存器更新:在一些实时应用中,寄存器的更新可能需要在不被打断的情况下完成。使用影子寄存器,系统可以在影子寄存器上进行更改,而主寄存器的状态不受影响,直到所有的更新准备好后,再同步更新到主寄存器。这种方法可以避免系统中断或执行不一致的状态。

增强系统的可靠性:在一些关键应用中,影子寄存器可以作为系统故障恢复的机制。例如,如果某个操作失败或产生错误,系统可以从影子寄存器中恢复到正确的状态,避免系统崩溃。

多任务切换中的保存和恢复:在多任务系统中,影子寄存器用于保存当前任务的寄存器状态,以便在任务切换时恢复。这样,每个任务可以有一组独立的寄存器备份,确保任务之间的隔离性。

配置寄存器的修改和调试:在嵌入式系统中,某些寄存器可能用于设备的配置或调试。当需要修改配置时,直接修改主寄存器可能会导致设备不稳定。使用影子寄存器可以先进行修改,确认无误后再将修改内容同步到主寄存器。

总之,影子寄存器通过提供寄存器的备份副本,可以增强嵌入式系统的可靠性、效率和稳定性,尤其在处理实时性要求高、任务切换频繁或需要不间断运行的系统中非常重要。

4.RCC时钟树

5.输出比较OC(output compare)

输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形

每个高级定时器和通用定时器都拥有4个输出比较通道

高级定时器的前3个通道额外拥有死区生成和互补输出的功能

6.PWM基本结构

1.初始化GPIO--GPIO_Init(GPIOA, &GPIO_InitStructure);

2.配置时钟源--TIM_InternalClockConfig(TIM2); 

3.配置时基单元初始化--TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);

4.输出比较初始化--TIM_OC1Init(TIM2, &TIM_OCInitStructure); 

5.使能--TIM_Cmd(TIM2, ENABLE); 

6.设置CCR的值--TIM_SetCompare1(TIM2, Compare); 

参数计算(一般配置ARR=99,这样CCR的值即为占空比):

PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)

PWM占空比: Duty = CCR / (ARR + 1)

7.TB6612电机

8.输入捕获

IC(Input Capture)输入捕获

输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数

每个高级定时器和通用定时器都拥有4个输入捕获通道

可配置为PWMI模式,同时测量频率和占空比

可配合主从触发模式,实现硬件全自动测量

对于同一个定时器,输入捕获和输出比较使用同一个CCR寄存器,不能同时使用。

主从触发模式:

主模式将定时器内部的信号,映射到TRGO引脚,触发别的外设,从模式用于接收其他外设或自身外设的信号,控制自身定时器的运行,即被别的信号控制。主模式控制别人,从模式自己控制自己或别人控制自己。

输入捕获基本结构:

1.初始化GPIO

2.进行滤波

3.设置边沿检测,当触发上升沿,输出TI1FP1

4.TI1FP1通过主模式,不分频,将信号传至CCR1,同时从模式对时基单元复位,则一个周期内的CNT计数值(ARR)会被装入到CCR1内,完成捕获。

PWMI基本结构:

与基本结构不同的则是边沿检测后不仅在ch1输出TI1FP1,也会在ch2输出一个极性相反的TI1FP2(下降沿捕获),则CCR2捕获的即为高电平部分,用CCR2捕获的值除以CCR1捕获的值,即为占空比。

/*PWMI模式初始化*/

TIM_ICInitTypeDef TIM_ICInitStructure;      //定义结构体变量

TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;   //选择配置定时器通道1

TIM_ICInitStructure.TIM_ICFilter = 0xF; //输入滤波器参数,可以过滤信号抖动

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; 

//极性,选择为上升沿触发捕获

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; 

//捕获预分频,选择不分频,每次信号都触发捕获

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 

//输入信号交叉,选择直通,不交叉

TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);      

//将结构体变量交给TIM_PWMIConfig,配置TIM3的输入捕获通道

//此函数同时会把另一个通道配置为相反的配置,实现PWMI模式

9.频率测量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值