1.定时器种类
注:主要使用通用定时器
2.通用计时器特点描述
说明:四个通道互不影响
3.定时器中断触发条件
4.定时器计数模式
分为向上,向下,向上向下模式
5.通用定时器作用用途
测量输入输出波长度等
说明:每个定时器完全独立没有共享内存
6.工作过程
红色重点关注
时钟来源:
A.内部时钟APB1分频器ckl_int(主要)
B.其他通用定时器 外部引脚2,3,4
C.其他定时器
D.外部通道(略)
时基单元(时间控制单元) :
①预分频(除法)
②计数器时钟
③自动重装载值
输入部分:
①输入引脚
②边沿检测
输出部分 :
A 输出比较寄存器
B周期—重装载值
C占空比—比较值
时钟计算方法
7.定时器相关寄存器与固件库结构体
注:真正使用的只有前3个成员
8.定时器相关库函数
9.配置步骤
1.打开定时器时钟
2.中断组选择
3.定时器结构体配置与初始化
4.配置定时器与中断线联系
5.定时器中断结构体配置与初始化
6.开启定时器
配置俩个:重装载值,分频系数, tclk系统时钟不用
附上代码
.c文件
#include "stm32f10x.h"
#include "tim.h"
void tim_config(void)
{
TIM_TimeBaseInitTypeDef TIMinitStructure;//定时器结构体变量名
NVIC_InitTypeDef NVICinitStructure;//定时器中断结构体变量名
//1.打开定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//2.中断组选择
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1);
//3.定时器结构体的配置
TIMinitStructure.TIM_Prescaler =7200-1;//分配器计数值
TIMinitStructure.TIM_CounterMode =TIM_CounterMode_Up;//选择计数模式,选择向上计数模式
TIMinitStructure.TIM_Period =10000-1;//配置自动重装载值
TIMinitStructure.TIM_ClockDivision =TIM_CKD_DIV1;//选择分频模式,选择不分频模式
//4.定时器初始化
TIM_TimeBaseInit(TIM2, &TIMinitStructure);//用通用定时器2
//5.配置定时器与中断线联系创建
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
//6.定时器中断结构体配置
NVICinitStructure.NVIC_IRQChannel =TIM2_IRQn;//中断通道
NVICinitStructure.NVIC_IRQChannelPreemptionPriority =1;
NVICinitStructure.NVIC_IRQChannelCmd =ENABLE;
NVICinitStructure.NVIC_IRQChannelSubPriority =1;
//7.定时器中断初始化
NVIC_Init(&NVICinitStructure);
//8.开启定时器
TIM_Cmd(TIM2,ENABLE);
}
中断服务函数
void TIM2_IRQHandler ()//定时器中断服务函数
{
static uint16_t temp=0;
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!= RESET)//判断是否发生中断
{
if((temp++ )%2==1)//奇数亮偶数灭,进入中断一次亮灭,一秒拉高一秒拉低
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);//拉低电平
}
else
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);//拉高电平
}
}
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}