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 #include 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;
上一篇:手把手教你新建MSP432工程
下一篇:MSP430时钟设置及应用总结
推荐阅读最新更新时间:2024-11-03 09:26