85 lines
3.6 KiB
C
85 lines
3.6 KiB
C
/**
|
||
* @file tims.h
|
||
* @author xxx
|
||
* @date 2024-01-16 22:23:43
|
||
* @brief
|
||
* @copyright Copyright (c) 2024 by xxx, All Rights Reserved.
|
||
*/
|
||
#ifndef __TIMS_H__
|
||
#define __TIMS_H__
|
||
|
||
/**
|
||
* 定时器溢出时间计算公式
|
||
Tout = ((ARR + 1)*(PSC + 1)) / Tclk
|
||
已知 Tclk 为 84MHz , 我们需要 Tout 为 200ms 即 200000us , 不妨先让PSC为 839, 带入上述公式可得 ARR = 19999.
|
||
这样算出来之后ARR和PSC都在0~65535的范围, 则可以使用这组参数
|
||
*/
|
||
|
||
/***
|
||
* @brief 启用定时器时钟。
|
||
* @param {TIMx} TIMx:定时器外设寄存器地址。
|
||
* @return {void}
|
||
* @note: 此函数应在定时器相关初始化函数之后调用,以启用定时器的时钟。
|
||
*/
|
||
#define ENABLE_TIM(TIMx) \
|
||
do \
|
||
{ \
|
||
LL_TIM_EnableCounter(TIMx); \
|
||
LL_TIM_EnableIT_UPDATE(TIMx); \
|
||
} while (__LINE__ == -1);
|
||
|
||
#define IS_ENABLE_TIM(TIMx) LL_TIM_IsEnabledIT_UPDATE(TIMx)
|
||
|
||
#define DISABLE_TIM(TIMx) \
|
||
do \
|
||
{ \
|
||
LL_TIM_DisableCounter(TIMx); \
|
||
LL_TIM_DisableIT_UPDATE(TIMx); \
|
||
} while (__LINE__ == -1);
|
||
|
||
// 判断定时器的中断是否发生,为了方便使用,这里直接使用LL库的宏定义
|
||
#define IS_TIM_IT_FLAG(TIMx) (LL_TIM_IsActiveFlag_UPDATE(TIMx) == 1)
|
||
|
||
// 定时器中断处理
|
||
#define TIM_IRQ_HANDLER(TIMx) \
|
||
do \
|
||
{ \
|
||
if (LL_TIM_IsActiveFlag_CC1(TIMx) == SET) \
|
||
{ \
|
||
if (LL_TIM_IsEnabledIT_CC1(TIMx) == SET) \
|
||
{ \
|
||
LL_TIM_ClearFlag_CC1(TIMx); \
|
||
} \
|
||
} \
|
||
if (LL_TIM_IsActiveFlag_CC2(TIMx) == SET) \
|
||
{ \
|
||
if (LL_TIM_IsEnabledIT_CC2(TIMx) == SET) \
|
||
{ \
|
||
LL_TIM_ClearFlag_CC2(TIMx); \
|
||
} \
|
||
} \
|
||
if (LL_TIM_IsActiveFlag_CC3(TIMx) == SET) \
|
||
{ \
|
||
if (LL_TIM_IsEnabledIT_CC3(TIMx) == SET) \
|
||
{ \
|
||
LL_TIM_ClearFlag_CC3(TIMx); \
|
||
} \
|
||
} \
|
||
if (LL_TIM_IsActiveFlag_CC4(TIMx) == SET) \
|
||
{ \
|
||
if (LL_TIM_IsEnabledIT_CC4(TIMx) == SET) \
|
||
{ \
|
||
LL_TIM_ClearFlag_CC4(TIMx); \
|
||
} \
|
||
} \
|
||
if (LL_TIM_IsActiveFlag_UPDATE(TIMx) == SET) \
|
||
{ \
|
||
if (LL_TIM_IsEnabledIT_UPDATE(TIMx) == SET) \
|
||
{ \
|
||
LL_TIM_ClearFlag_UPDATE(TIMx); \
|
||
} \
|
||
} \
|
||
} while (0)
|
||
|
||
#endif // __TIMS_H__
|