⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_tim.c

📁 stm32f10xx的中文译文例程
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + -