📄 stm32f10x_tim.c
字号:
assert_param(IS_TIM_DMA_BASE(TIM_DMABase));
assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength));
/* Set the DMA Base and the DMA Burst Length [设置DMA基址和DMA猝发长度]*/
TIMx->DCR = TIM_DMABase | TIM_DMABurstLength;
}
/*******************************************************************************
* 函数名称: TIM_DMACmd
* 功能描述: 使能或关闭TIMx的DMA请求.
* 输入参数: (1)TIMx:此处x可以是1到8以选择外设.
* (2)TIM_DMASource: DMA请求源。
* 这个参数可以是下面任何值的组合:
* - TIM_DMA_Update: TIM 更新中断源
* - TIM_DMA_CC1: TIM 捕获比较 1 DMA 源
* - TIM_DMA_CC2: TIM 捕获比较 2 DMA 源
* - TIM_DMA_CC3: TIM 捕获比较 3 DMA 源
* - TIM_DMA_CC4: TIM 捕获比较 4 DMA 源
* - TIM_DMA_COM: TIM 交换 DMA 源
* - TIM_DMA_Trigger: TIM 触发 DMA 源
* (3)NewState:此TIM DMA请求源的新状态,该参数可以是ENABLE或DISABLE。
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_DMACmd(TIM_TypeDef* TIMx, u16 TIM_DMASource, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource));
assert_param(IS_TIM_PERIPH_DMA(TIMx, TIM_DMASource));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the DMA sources [允许DMA源]*/
TIMx->DIER |= TIM_DMASource;
}
else
{
/* Disable the DMA sources [禁止DMA源]*/
TIMx->DIER &= (u16)~TIM_DMASource;
}
}
/*******************************************************************************
* 函数名称: TIM_InternalClockConfig
* 功能描述: 配置TIM的内部时钟
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
{
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_123458_PERIPH(TIMx));
/* Disable slave mode to clock the prescaler directly with the internal clock [禁止内部时钟预分频器从模式]*/
TIMx->SMCR &= SMCR_SMS_Mask;
}
/*******************************************************************************
* 函数名称: TIM_ITRxExternalClockConfig
* 功能描述: 配置TIM的内部触发器作为外部时钟
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_InputTriggerSource:输入触发源。
* 这个参数可以取下面的值之一:
* - TIM_TS_ITR0: 内部触发器 0
* - TIM_TS_ITR1: 内部触发器 1
* - TIM_TS_ITR2: 内部触发器 2
* - TIM_TS_ITR3: 内部触发器 3
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, u16 TIM_InputTriggerSource)
{
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource));
/* Select the Internal Trigger [选择内部触发器]*/
TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource);
/* Select the External clock mode1 [选择外部时钟模式1]*/
TIMx->SMCR |= TIM_SlaveMode_External1;
}
/*******************************************************************************
* 函数名称: TIM_TIxExternalClockConfig
* 功能描述: 配置TIM的触发器作为外部时钟
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_ TIxExternalCLKSource: 触发器源。
* 这个参数可以取下面的值之一:
* - TIM_TIxExternalCLK1Source_TI1ED: TI1 边缘检测器
* - TIM_TIxExternalCLK1Source_TI1: 已筛选的定时器输入1
* - TIM_TIxExternalCLK1Source_TI2: 已筛选的定时器输入2
* (3)TIM_ICPolarity: 指定TI的极性
* 这个参数可以是:
* - TIM_ICPolarity_Rising[上升沿]
* - TIM_ICPolarity_Falling[下降沿]
* (4)ICFilter:指定输入捕获过滤器。该参数可以是0x0到0xF之间的值。
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, u16 TIM_TIxExternalCLKSource,
u16 TIM_ICPolarity, u16 ICFilter)
{
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_TIXCLK_SOURCE(TIM_TIxExternalCLKSource));
assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity));
assert_param(IS_TIM_IC_FILTER(ICFilter));
/* Configure the Timer Input Clock Source [配置定时器输入时钟源]*/
if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2)
{
TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);
}
else
{
TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);
}
/* Select the Trigger source [选择触发器源]*/
TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource);
/* Select the External clock mode1 [选择外部时钟模式1]*/
TIMx->SMCR |= TIM_SlaveMode_External1;
}
/*******************************************************************************
* 函数名称: TIM_ETRClockMode1Config
* 功能描述: 配置外部时钟模式1
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_ExtTRGPrescaler:外部触发器预分频数。
* 这个参数可以取下面的值之一:
* - TIM_ExtTRGPSC_OFF
* - TIM_ExtTRGPSC_DIV2
* - TIM_ExtTRGPSC_DIV4
* - TIM_ExtTRGPSC_DIV8.
* (3)TIM_ExtTRGPolarity:外部触发器极性。
* 这个参数可以取下面的值之一:
* - TIM_ExtTRGPolarity_Inverted
* - TIM_ExtTRGPolarity_NonInverted
* (4)ExtTRGFilter:外部触发器过滤器。该参数可以是0x0到0xF之间的值。
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, u16 TIM_ExtTRGPolarity,
u16 ExtTRGFilter)
{
u16 tmpsmcr = 0;
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
/* Configure the ETR Clock source [配置外部触发器时钟源]*/
TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
/* Get the TIMx SMCR register value [取得TIMx SMCR寄存器值]*/
tmpsmcr = TIMx->SMCR;
/* Reset the SMS Bits [复位SMS]*/
tmpsmcr &= SMCR_SMS_Mask;
/* Select the External clock mode1 [选择外部时钟模式1]*/
tmpsmcr |= TIM_SlaveMode_External1;
/* Select the Trigger selection : ETRF [选择触发选项: ETRF]*/
tmpsmcr &= SMCR_TS_Mask;
tmpsmcr |= TIM_TS_ETRF;
/* Write to TIMx SMCR [写TIMx SMCR]*/
TIMx->SMCR = tmpsmcr;
}
/*******************************************************************************
* 函数名称: TIM_ETRClockMode2Config
* 功能描述: 配置TIMx外部时钟为模式2
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_ExtTRGPrescaler:外部触发器预分频数.
* 它可以是下面的值之一:
* - TIM_ExtTRGPSC_OFF
* - TIM_ExtTRGPSC_DIV2
* - TIM_ExtTRGPSC_DIV4
* - TIM_ExtTRGPSC_DIV8
* (3)TIM_ExtTRGPolarity:外部触发器极性.
* 它可以是下面的值之一:
* - TIM_ExtTRGPolarity_Inverted
* - TIM_ExtTRGPolarity_NonInverted
* (4)ExtTRGFilter:外部触发器过滤器。该参数可以是0x0到0xF之间的值。
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler,
u16 TIM_ExtTRGPolarity, u16 ExtTRGFilter)
{
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
/* Configure the ETR Clock source [配置ETR的时钟源]*/
TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
/* Enable the External clock mode2 [使能外部时钟模式2]*/
TIMx->SMCR |= SMCR_ECE_Set;
}
/*******************************************************************************
* 函数名称: TIM_ETRConfig
* 功能描述: 配置TIMx的外部触发(ETR).
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_ExtTRGPrescaler:外部触发器预分频数.
* 这个参数可以取下面的值之一:
* - TIM_ExtTRGPSC_OFF
* - TIM_ExtTRGPSC_DIV2
* - TIM_ExtTRGPSC_DIV4
* - TIM_ExtTRGPSC_DIV8
* (3)TIM_ExtTRGPolarity:外部触发器极性.
* 这个参数可以取下面的值之一:
* - TIM_ExtTRGPolarity_Inverted
* - TIM_ExtTRGPolarity_NonInverted
* (4)ExtTRGFilter:外部触发器过滤器。该参数可以是0x0到0xF之间的值。
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_ETRConfig(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, u16 TIM_ExtTRGPolarity,
u16 ExtTRGFilter)
{
u16 tmpsmcr = 0;
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
tmpsmcr = TIMx->SMCR;
/* Reset the ETR Bits [复位ETR位]*/
tmpsmcr &= SMCR_ETR_Mask;
/* Set the Prescaler, the Filter value and the Polarity [设置预分频器,过滤器值和极性]*/
tmpsmcr |= TIM_ExtTRGPrescaler | TIM_ExtTRGPolarity | (u16)(ExtTRGFilter << 8);
/* Write to TIMx SMCR [写TIMx SMCR]*/
TIMx->SMCR = tmpsmcr;
}
/*******************************************************************************
* 函数名称: TIM_PrescalerConfig
* 功能描述: Configures the TIMx Prescaler.
* 输入参数: (1)TIMx:此处x可以是1到8以选择外设.
* (2)Prescaler:TIMx预分频数的新值
* (3)TIM_PSCReloadMode:TIM预分频数重载模式.
* 这个参数可以取下面的值之一:
* - TIM_PSCReloadMode_Update: 发生更新事件时预分频数载入.
* - TIM_PSCReloadMode_Immediate: 预分频数立即载入.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, u16 Prescaler, u16 TIM_PSCReloadMode)
{
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode));
/* Set the Prescaler value [设置预分频值]*/
TIMx->PSC = Prescaler;
/* Set or reset the UG Bit [置位或复位UG]*/
TIMx->EGR = TIM_PSCReloadMode;
}
/*******************************************************************************
* 函数名称: TIM_CounterModeConfig
* 功能描述: 指定TIMx使用计数模式.
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_CounterMode:将使用的计数模式.
* 这个参数可以取下面的值之一:
* - TIM_CounterMode_Up: TIM向上计数模式
* - TIM_CounterMode_Down: TIM向下计数模式
* - TIM_CounterMode_CenterAligned1: TIM计数对齐模式1
* - TIM_CounterMode_CenterAligned2: TIM计数对齐模式2
* - TIM_CounterMode_CenterAligned3: TIM计数对齐模式3
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, u16 TIM_CounterMode)
{
u16 tmpcr1 = 0;
/* Check the parameters [检查参数]*/
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_COUNTER_MODE(TIM_CounterMode));
tmpcr1 = TIMx->CR1;
/* Reset the CMS and DIR Bits [复位CMS和DIR]*/
tmpcr1 &= CR1_CounterMode_Mask;
/* Set the Counter Mode [设置计数模式]*/
tmpcr1 |= TIM_CounterMode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -