1、添加定时器组件
2、修改定时器配置
3、定时器计算公式
FTM周期计算公式:重装载值 / (主频/分频) 单位秒
例如设置100ms的终端中周期:
37500(重装载值) / (48000000hz(主频)/ 128(分频)) = 1/10秒 = 100ms
注意:上述计算依据的是48M系统时钟,如果系统修改后,需要依据公式选择合适的时钟分频
4、代码
#include "Cpu.h"
#include "timer.h"
#include "led.h"
#include "uart.h"
unsigned int counter = 0;
//定时器中断
void ftmTimerISR(void)//10ms进来一次
{
counter++;
if(counter >= 50)
{
counter = 0;
LED2_TOGGLE;
}
FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_MC1,(uint32_t)FTM_TIME_OVER_FLOW_FLAG);//清除中断标志位
}
//定时器初始化
void TIMER_Init()
{
ftm_state_t ftmStateStruct;//建立定时器结构体
FTM_DRV_Init(INST_FLEXTIMER_MC1, &flexTimer_mc1_InitConfig,&ftmStateStruct);//定时器初始化
//参数1:中断类型;参数2:中断函数;参数3:中断函数的参数,用不到使用(isr_t*)0U
INT_SYS_InstallHandler(FTM0_Ovf_Reload_IRQn,&ftmTimerISR,(isr_t*)0U);//定时器中断初始化
INT_SYS_EnableIRQ(FTM0_Ovf_Reload_IRQn);//使能定时器中断
FTM_DRV_InitCounter(INST_FLEXTIMER_MC1, &flexTimer_mc1_TimerConfig);//初始化计数器
FTM_DRV_CounterStart(INST_FLEXTIMER_MC1);//启动计数器
}