复旦微FM33LG048芯片使用(3)定时器ATIM使用

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

最后,别忘了在main文件调用ATIM_Start()函数启动定时器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值