轻则失根,躁则失君
STM32F103系列的单片机一共有11个定时器,其中:
2个高级定时器(TIM1和TIM8):高级定时器不但具有基本,通用定时器的所有的功能,还具有控制交直流电动
机所有的功能,你比如它可以输出6路互补带死区的信号,刹车功能等等;
4个通用定时器(TIM2-TIM5):除了基本的定时器的功能外,还具有测量输入信号的脉冲长度( 输入捕获) 或者
产生输出波形( 输出比较和PWM);
2个基本定时器(TIM6和TIM7):只有最基本的定时功能,。基本定时器TIM6和TIM7各包含一个16位自动装载
计数器,由各自的可编程预分频器驱动;
2个看门狗定时器
1个系统嘀嗒定时器
除去看门狗定时器和系统滴答定时器的八个定时器又可以分成3个组;
TIM1和TIM8是高级定时器
TIM2-TIM5是通用定时器
TIM6和TIM7是基本的定时器
这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式
向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时;
向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时;
中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再
从0开始向上计数。(此种技术方法也可叫向上/向下计数)
通用定时器的时钟来源
a:内部时钟(CK_INT)
b:外部时钟模式1:外部输入脚(TIx)
c:外部时钟模式2:外部触发输入(ETR)
d:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器
死区时间(目前还没有做深入研究)
H桥电路为避免由于关断延迟效应造成上下桥臂直通,有必要设置死区时间
死区时间可有效地避免延迟效应所造成的一个桥臂未完全关断,而另一桥臂又处于导通状态,避免直通炸开关管。
死区时间越大,电路的工作也就越可靠,但会带来输出波形的失真以及降低输出效率。
死区时间小,输出波形要好一些,但是会降低系统的可靠性,一般这个死区时间设置为us级
元器件死区时间是不可以改变的,它主要是取决于元器件的制作工艺和材料!
原则上死区时间当然越小越好。设置死区时间的目的,其实说白了就是为了电路的安全。最佳的设置方法是:在
保证安全的前提下,设置的死区时间越小越好。以不炸功率管、输出不短路为目的。
选中:CMSIS>CORE;Device>Startup;>StdPeriph Drivers>EXTI;>Framework;>GPIO;>RCC;>TIM;等
void Tim2_Init(u32 Period, u32 Prescaler)
{
//时钟开启TIM2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//结构体_定时器基础-声明
TIM_TimeBaseInitTypeDef TIM_TBIS;
TIM_DeInit(TIM2);
//自动重装载寄存器的值
TIM_TBIS.TIM_Period = Period;
//时钟预分频数
TIM_TBIS.TIM_Prescaler = Prescaler;
//向上计数模式
TIM_TBIS.TIM_CounterMode = TIM_CounterMode_Up;
//采样分频
TIM_TBIS.TIM_ClockDivision = TIM_CKD_DIV1;
//结构体_定时器基础-结束配置
TIM_TimeBaseInit(TIM2, &TIM_TBIS);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
//开关_定时器总开关
TIM_Cmd(TIM2, ENABLE);
NVIC_InitTypeDef NVIC_InitS;
//选择第0组优先级设置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
//TIM2中断
NVIC_InitS.NVIC_IRQChannel = TIM2_IRQn;
//IRQ通道被使能
NVIC_InitS.NVIC_IRQChannelCmd = ENABLE;
//从优先级3级
NVIC_InitS.NVIC_IRQChannelSubPriority = 0;
//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
NVIC_Init(&NVIC_InitS);
}
void TIM2_Delay_ms(uint16_t ms)
{
//时钟开启TIM2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//结构体_定时器基础-声明
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
//结构体_定时器基础-定时器分频设置,时钟预分频数为36000
TIM_TimeBaseInitStruct.TIM_Prescaler= 35999;
//结构体_定时器基础-定时器顶端设置
TIM_TimeBaseInitStruct.TIM_Period=ms*2;
//结构体_定时器基础-结束配置
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
//设定定时时间到来以后停止定时器计数
TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Single);
//开启SR中的UI标志
TIM_ClearFlag(TIM2, TIM_IT_Update);
//开关_定时器总开关
TIM_Cmd(TIM2, ENABLE);
//检测定时时间是否到来
while(TIM_GetFlagStatus(TIM2, TIM_IT_Update)==RESET);
//软件清除更新标志
TIM_ClearFlag(TIM2, TIM_IT_Update);
}
定时用到的寄存器 :
1.arr寄存器
2.psc寄存器
3.模式寄存器 (向上,向下,先向上然后向下,先向下然后向上)
A R R ∗ P S C / 72000000 = ARR*PSC/72000000 = ARR∗PSC/72000000=定时时间
STM32F103定时器详解
https://blog.csdn.net/qq_31339221/article/details/70333973
https://www.cnblogs.com/zjvskn/p/5751591.html
STM32定时器配置
https://blog.csdn.net/qq646497210/article/details/79887073
https://blog.csdn.net/lushoumin/article/details/78976147
https://blog.csdn.net/Lorain_Lynies/article/details/52215921
https://www.cnblogs.com/pertor/p/9488813.html
https://blog.csdn.net/private_void_main/article/details/81491015
https://mrs.pub/stm32/1525.html
NVIC_PriorityGroupConfig()说明
https://blog.csdn.net/zhuminzeng/article/details/8880138