定时器学习
/**
* STM模块枚举
*/
typedef enum
{
STM0 = 0,
STM1
}STM_t;
/**
* STM通道枚举
*/
typedef enum
{
STM_Channel_0 = 0,
STM_Channel_1
}STM_Channel_t;
/** STM定时器中断 STM0 channel0 中断服务函数优先级 范围:1-255 数字越大 优先级越高 注意优先级不要重复 */
#define STM0_CH0_PRIORITY 110
/** STM定时器中断 STM0 channel0 中断归哪个内核管理? 范围:0:CPU0 1:CPU1 3:DMA*/
#define STM0_CH0_VECTABNUM 0
/** STM定时器中断 STM0 channel1 中断服务函数优先级 范围:1-255 数字越大 优先级越高 注意优先级不要重复 */
#define STM0_CH1_PRIORITY 111
/** STM定时器中断 STM0 channel1 中断归哪个内核管理? 范围:0:CPU0 1:CPU1 3:DMA*/
#define STM0_CH1_VECTABNUM 0
/** STM定时器中断 STM1 channel0 中断服务函数优先级 范围:1-255 数字越大 优先级越高 注意优先级不要重复 */
#define STM1_CH0_PRIORITY 112
/** STM定时器中断 STM1 channel0 中断归哪个内核管理? 范围:0:CPU0 1:CPU1 3:DMA*/
#define STM1_CH0_VECTABNUM 1
/** STM定时器中断 STM1 channel1 中断服务函数优先级 范围:1-255 数字越大 优先级越高 注意优先级不要重复 */
#define STM1_CH1_PRIORITY 113
/** STM定时器中断 STM1 channel1 中断归哪个内核管理? 范围:0:CPU0 1:CPU1 3:DMA*/
#define STM1_CH1_VECTABNUM 1
* 函数名称:void STM_Init(STM_t stm, STM_Channel_t channel, uint32 us)
* 功能说明:STM初始化
* 参数说明:
* @param stm : STM标号 STM0 、 STM1
* @param channel : STM通道 STM_Channel_0 STM_Channel_1
* @param us : STM定时中断 时间
* 函数返回:无
* 修改时间:2020年3月10日
* 举 例:STM_Init(STM0, STM_Channel_0, 50000); //STM0 通道0初始化 50000us 进入一次中断
* 备 注:外部中断服务函数在LQ_STM.c中 中断优先级配置在LQ_STM.h中 可以自行修改
* 函数名称:void STM_DelayUs(STM_t stm, uint32 us)
* 功能说明:STM延时
* 参数说明:
* @param stm : STM标号 STM0 、 STM1
* @param us : STM延时 时间 us
* 函数返回:无
* 修改时间:2020年3月10日
* 举 例:STM_DelayUs(STM0, 5000); //延时5000us
* 备 注:使用延时函数时,请确保对应STM模块调用过STM_Init函数
* 函数名称:uint32 STM_GetNowUs(STM_t stm)
* 功能说明:STM获取当前时间
* 参数说明:
* @param stm : STM标号 STM0 、 STM1
* @param us : STM延时 时间 us
* 函数返回:无
* 修改时间:2020年3月10日
* 举 例:int32_t NowTime = STM_GetNowUs(STM0); //获取STM0 当前时间
* 备 注:使用延时函数时,请确保对应STM模块调用过STM_Init函数
例子
//中断服务函数,注意格式与其它单片机不同
IFX_INTERRUPT(STM0SR0ISR, 0, IFX_INTPRIO_STM0_SR0)
{
IfxStm_clearCompareFlag(&MODULE_STM0, stmCompareConfig.comparator);//清除中断标志
IfxStm_increaseCompare(&MODULE_STM0, stmCompareConfig.comparator, stmCompareConfig.ticks);//开启新的中断配置,开始下次中断
//用户任务
if(++stm_led_ind > 500)//500*1000us=500ms闪灯
{
stm_led_ind = 0; //计数清零
IfxPort_togglePin(&MODULE_P10, 5);//核心板上LED状态翻转一次
}
}
/*************************************************************************
* 函数名称:void Test_STM0 (void)
* 功能说明:测试程序
* 参数说明:无
* 函数返回:无
* 修改时间:2020年3月10日
* 备 注:核心板上的LED固定时间P10.6翻转,LED灯闪烁,中断时P10.5闪灯
*************************************************************************/
void Test_STM0 (void)
{
GPIO_init(); //GPIO P10.5和P10.6
STM0_init(); //STM初始化
while(1)
{
IfxPort_togglePin(&MODULE_P10, 6);//LED电平翻转,闪烁
delayms(500); //延时等待
}
}