先添加头文件,引入定时器相关库函数stm32f4xx_tim.c后编译(否则无法查看函数的定义);
1. time.c文件 编写.h头文件中的初始化函数: (1) 定义结构体指针类型,定义变量 (2) 使能定时器时钟函数APB1: RCC_APB1PeriphClockCmd(); (3) 初始化定时器,确定使用哪个定时器,取结构体变量地址赋给入口参数:TIM_TimeBaseInit(); (4) 对变量的参数逐一进行初始化: 自动重装载值ARR:TIM_Period 预分频系数PSC:TIM_Prescaler 计数模式CounterMode Clockdivision(设置定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例(与输入捕获相关),0表示滤波器的频率和定时器的频率是一样的。) (5) 开启中断(TIM_IT_Config)并使能:TIM_ITConfig(TIM3,TIM_IT_xxx,ENABLE); (6) 使能中断优先级NVIC_Init并使能中断通道 使用定时器几:NVIC_IRQChannel= 抢占优先级:NVIC_IRQChannelPreemptionPriority 子优先级:NVIC_IRQChannelSubPriority (7) 使能定时器TIM_Cmd(TIMx,ENABLE) 编写中断服务函数 void TIMx_IRQHandler(void){ } (1) 判断是什么中断if(TIM_GetITStatus(TIMx, 确定中断标志位)) |
2.time.h文件 定义TIMx参数,配置入口参数(寄存器位数,自动重载值arr和预分频系数psc)即选择定时器 |
3.main.c文件 (1) 设置中断优先级分组:NVIC_PriorityGroupConfig(); (2) 初始化LED端口、延时函数 (3) 设置定时器分频系数和重装载值: TIM3_Init(); (4) 编写映射中断发生的函数 |