msp432记录-timer

本文详细解析了MSP432微控制器的定时器驱动API,包括模式、周期单位、回调函数等核心参数,以及定时器的具体配置与使用方法。介绍了6个可用定时器的特性与配置细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

timer驱动API非常简单,就只有几个,开始计时,停止计时,获得计数值。认识初始化参数结构体即可

typdef struct {
	Timer_Mode timerMode;  //模式
	Timer_PeriodUnits periodUnits; //计数周期单位
	Timer_CallBackFxn timerCallback; //回调函数
	uint32_t period; //计数周期,联系periodUnits
}

//下面记录一下具体的数据结构参数

//模式结构体 注意,某些定时器可以被配置为向上计数和向下计数模式,通过Timer_getCount()得到计数值
typedef enum{
	Timer_ONESHOT_CALLBACK, //非阻塞,只会产生一次到时中断,再次用Timer_start()可以再次生成一次定时
	Timer_ONESHOT_BLOCKING, //一次阻塞型
	Timer_CONTINUOUS_CALLBACK, //周期性定时
	Timer_FREE_RUNNING //非阻塞,一直计数,不会产生中断,一般与Timer_getCount()配套使用
}Timer_Mode;

//计数单位
typedef enum{
	Timer_PERIOD_US, //微秒级计数
	Timer_PERIOD_HZ, //秒级计数
	Timer_PERIOD_COUNTS //自定义
}Timer_PeriodUnits;

//中断回调函数
typedef void (*Timer_CallBackFxn)(Timer_Handle handle);

仅仅知道上面并不能完全使用定时器的驱动库,还需要去了解MSP_EXP432P401R.c与.h文件关于定时器的使用以及定时器相关头文件的地址、时钟等参数定义

/*
共有六个定时器,2个32位
TIMER32_1
TIMER32_2
TIMER_A0
TIMER_A1
TIMER_A2
TIMER_A3
*/

#include <ti/drivers/Timer.h>
#include <ti/drivers/timer/TimerMSP432.h>

TimerMSP432_Object timerMSP432Objects[MSP_EXP432P401R_TIMERCOUNT];

const TimerMSP432_HWAttrs timerMSP432HWAttrs[MSP_EXP432P401R_TIMERCOUNT] = {
    /* Timer32_0 */
    {
        .timerBaseAddress = TIMER32_0_BASE,
        .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
        .intNum = INT_T32_INT1,
        .intPriority = ~0
    },
    {
        .timerBaseAddress = TIMER32_1_BASE,
        .clockSource = TIMER_A_CLOCKSOURCE_SMCLK,
        .intNum = INT_T32_INT2,
        .intPriority = ~0
    },
    /* Timer_A1 */
    {
        .timerBaseAddress = TIMER_A1_BASE,
        .clockSource = TIMER_A_CLOCKSOURCE_ACLK,
        .intNum = INT_TA1_0,
        .intPriority = ~0
    },
    /* Timer_A2 */
    {
        .timerBaseAddress = TIMER_A2_BASE,
        .clockSource = TIMER_A_CLOCKSOURCE_ACLK,
        .intNum = INT_TA2_0,
        .intPriority = ~0
    },
    /* Timer_A3 */
    {
        .timerBaseAddress = TIMER_A3_BASE,
        .clockSource = TIMER_A_CLOCKSOURCE_ACLK,
        .intNum = INT_TA3_0,
        .intPriority = ~0
    }
};

const Timer_Config Timer_config[MSP_EXP432P401R_TIMERCOUNT] = {
    {
        .fxnTablePtr = &TimerMSP432_Timer32_fxnTable,
        .object = &timerMSP432Objects[MSP_EXP432P401R_TIMER_T32_0],
        .hwAttrs = &timerMSP432HWAttrs[MSP_EXP432P401R_TIMER_T32_0]
    },
    {
        .fxnTablePtr = &TimerMSP432_Timer32_fxnTable,
        .object = &timerMSP432Objects[MSP_EXP432P401R_TIMER_T32_1],
        .hwAttrs = &timerMSP432HWAttrs[MSP_EXP432P401R_TIMER_T32_1]
    },
    {
        .fxnTablePtr = &TimerMSP432_Timer_A_fxnTable,
        .object = &timerMSP432Objects[MSP_EXP432P401R_TIMER_TA_1],
        .hwAttrs = &timerMSP432HWAttrs[MSP_EXP432P401R_TIMER_TA_1]
    },
    {
        .fxnTablePtr = &TimerMSP432_Timer_A_fxnTable,
        .object = &timerMSP432Objects[MSP_EXP432P401R_TIMER_TA_2],
        .hwAttrs = &timerMSP432HWAttrs[MSP_EXP432P401R_TIMER_TA_2]
    },
    {
        .fxnTablePtr = &TimerMSP432_Timer_A_fxnTable,
        .object = &timerMSP432Objects[MSP_EXP432P401R_TIMER_TA_3],
        .hwAttrs = &timerMSP432HWAttrs[MSP_EXP432P401R_TIMER_TA_3]
    }
};

const uint_least8_t Timer_count = MSP_EXP432P401R_TIMERCOUNT;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值