void MF_ATIM_TimerBase_Init(void)
{
FL_ATIM_InitTypeDef TimerBase_InitStruct;
TimerBase_InitStruct.clockSource = FL_CMU_ATIM_CLK_SOURCE_APBCLK;
TimerBase_InitStruct.prescaler = 6400-1; //前面文章配置的外部晶振时钟倍频到64mhz,所以这里的分频
TimerBase_InitStruct.counterMode = FL_ATIM_COUNTER_DIR_UP;
TimerBase_InitStruct.autoReload = 99; //99->10ms
TimerBase_InitStruct.clockDivision = FL_ATIM_CLK_DIVISION_DIV1;
TimerBase_InitStruct.repetitionCounter = 0;
TimerBase_InitStruct.autoReloadState = FL_DISABLE;
FL_ATIM_Init(ATIM, &TimerBase_InitStruct);
}
void MF_ATIM_Interrupt_Init(void)
{
FL_ATIM_ClearFlag_Update(ATIM); //清除中断标志
FL_ATIM_EnableIT_Update(ATIM); //使能定时器更新中断
}
void MF_NVIC_Init(void)
{
FL_NVIC_ConfigTypeDef InterruptConfigStruct;
InterruptConfigStruct.preemptPriority = 0x01;
FL_NVIC_Init(&InterruptConfigStruct, ATIM_IRQn); //配置定时器NVIC
}
void MF_Config_Init(void)
{
/* Initial ATIM */
MF_ATIM_TimerBase_Init();
MF_ATIM_Interrupt_Init();
/* Initial NVIC */
MF_NVIC_Init();
}
在main文件调用MF_Config_Init()函数配置定时器,我这边配置的是10ms进一次中断,后续跟串口一起使用,接收串口不定长的数据。
创建atim.c文件,用于编写定时器中断处理函数。
atim.c
#include "atim.h"
#include "main.h"
//ATIM定时器中断处理函数
void ATIM_IRQHandler()
{
if(FL_ATIM_IsEnabledIT_Update(ATIM) && FL_ATIM_IsActiveFlag_Update(ATIM))
{
FL_ATIM_ClearFlag_Update(ATIM);
//处理更新事件
//每10ms进一次此函数
}
}
//定时器,启动!
void ATIM_Start()
{
//使能LATIM
FL_ATIM_Enable(ATIM);
}
atim.h
#ifndef __ATIM_H__
#define __ATIM_H__
void ATIM_Start(void);
#endif