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

📄 stm32f10x_tim.c

📁 中文固件库.rar
💻 C
📖 第 1 页 / 共 5 页
字号:
  TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
}

/**
  * @简述  使能或者失能指定的 TIM 外设.
  * @参数  TIMx: 此处x可以是1到8以选择外设.
  * @参数  NewState: TIMx 外设的新状态.
  *                  这个参数可以是: ENABLE 或 DISABLE.
  * @返回  没有
  */
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  
  if (NewState != DISABLE)
  {
    /* 使能 TIM 计数器 */
    TIMx->CR1 |= CR1_CEN_Set;
  }
  else
  {
    /* 失能 TIM 计数器 */
    TIMx->CR1 &= CR1_CEN_Reset;
  }
}

/**
  * @简述  使能或失能 TIM 外围主输出.
  * @参数  TIMx: 此处x可以是1到8以选择外设.
  * @参数  NewState: TIM 外围主输出的新状态.
  *                  这个参数可以是: ENABLE or DISABLE.
  * @返回  没有
  */
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_TIM_18_PERIPH(TIMx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* 使能 TIM 主输出 */
    TIMx->BDTR |= BDTR_MOE_Set;
  }
  else
  {
    /* 失能 TIM 主输出 */
    TIMx->BDTR &= BDTR_MOE_Reset;
  }  
}

/**
  * @简述  使能或失能指定的 TIM 中断.
  * @参数  TIMx: 此处x可以是1到8以选择外设.
  * @参数  TIM_IT: 将被使能或失能的 TIM 中断源.
  *                这个参数可以取下列值之一:
  *                TIM_IT_Update:  TIM 更新中断源
  *                TIM_IT_CC1:     TIM 获/比较 1 中断源
  *                TIM_IT_CC2:     TIM 获/比较 2 中断源
  *                TIM_IT_CC3:     TIM 获/比较 3 中断源
  *                TIM_IT_CC4:     TIM 获/比较 4 中断源
  *                TIM_IT_COM:     TIM COM中断源
  *                TIM_IT_Trigger: TIM 触发中断源
  *                TIM_IT_Break:   TIM 刹车中断源
  * @注解 
  *   - TIM6 和 TIM7 只能产生校正中断. 
  *   - TIM_IT_COM 和 TIM_IT_Break 只能和 TIM1 和 TIM8 一起使用.  
  * @参数  NewState: TIM 中断的新状态.
  *                  这个参数可以是: ENABLE 或 DISABLE.
  * @返回  没有
  */
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
{  
  /* 检查参数s */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  assert_param(IS_TIM_IT(TIM_IT));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  
  if (NewState != DISABLE)
  {
    /* 使能中断源 */
    TIMx->DIER |= TIM_IT;
  }
  else
  {
    /* 失能中断源 */
    TIMx->DIER &= (uint16_t)~TIM_IT;
  }
}

/**
  * @简述  配置将由软件引发的 TIM 事件.
  * @参数  TIMx: 此处x可以是1到8以选择外设.
  * @参数  TIM_EventSource: 指定事件源.
  *                         这个参数可以取下列一个或更多的值:	   
  *          TIM_EventSource_Update: 定时器更新事件源
  *          TIM_EventSource_CC1:     定时器捕捉比较 1 事件源
  *          TIM_EventSource_CC2:     定时器捕捉比较 2 事件源
  *          TIM_EventSource_CC3:     定时器捕捉比较 3 事件源
  *          TIM_EventSource_CC4:     定时器捕捉比较 4 事件源
  *          TIM_EventSource_COM:     定时器 COM 事件源  
  *          TIM_EventSource_Trigger: 定时器触发器事件源
  *          TIM_EventSource_Break:   定时器刹车事件源
  * @注解 
  *   - TIM6 和 TIM7 只能产生校正中断. 
  *   - TIM_IT_COM 和 TIM_IT_Break 只能和 TIM1 和 TIM8 一起使用. 
  * @返回  没有
  */
void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource)
{ 
  /* 检查参数 */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  assert_param(IS_TIM_EVENT_SOURCE(TIM_EventSource));
  
  /* 设置事件源 */
  TIMx->EGR = TIM_EventSource;
}

/**
  * @简述  配置 TIMx 的DMA接口.
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_DMABase: DMA 基地址.
  *                     这个参数可以取下面的值之一:
  *   TIM_DMABase_CR, TIM_DMABase_CR2, TIM_DMABase_SMCR,
  *   TIM_DMABase_DIER, TIM1_DMABase_SR, TIM_DMABase_EGR,
  *   TIM_DMABase_CCMR1, TIM_DMABase_CCMR2, TIM_DMABase_CCER,
  *   TIM_DMABase_CNT, TIM_DMABase_PSC, TIM_DMABase_ARR,
  *   TIM_DMABase_RCR, TIM_DMABase_CCR1, TIM_DMABase_CCR2,
  *   TIM_DMABase_CCR3, TIM_DMABase_CCR4, TIM_DMABase_BDTR,
  *   TIM_DMABase_DCR.
  * @参数  TIM_DMABurstLength: DMA 脉冲串长度.
  *                            这个参数可以取下面两个值之一:
  *        TIM_DMABurstLength_1Byte 和 TIM_DMABurstLength_18Bytes.
  * @返回  没有
  */
void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength)
{
  /* 检查参数 */
  assert_param(IS_TIM_123458_PERIPH(TIMx));
  assert_param(IS_TIM_DMA_BASE(TIM_DMABase));
  assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength));
  /* 设置 DMA 基地址和 DMA 脉冲串长度 */
  TIMx->DCR = TIM_DMABase | TIM_DMABurstLength;
}

/**
  * @简述  使能或失能 TIMx 的 DMA 请求.
  * @参数  TIMx: 此处x可以是1到8以选择外设. 
  * @参数  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 COM DMA 源
  *                       TIM_DMA_Trigger: TIM 触发 DMA 源
  * @参数  NewState: DMA 请求新状态.
  *                  这个参数可以是: ENABLE 或 DISABLE.
  * @返回  没有
  */
void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState)
{ 
  /* 检查参数 */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  
  if (NewState != DISABLE)
  {
    /* 使能 DMA 源 */
    TIMx->DIER |= TIM_DMASource; 
  }
  else
  {
    /* 失能 DMA 源 */
    TIMx->DIER &= (uint16_t)~TIM_DMASource;
  }
}

/**
  * @简述  配置 TIMx 内部时钟
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @返回  没有
  */
void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
{
  /* 检查参数 */
  assert_param(IS_TIM_123458_PERIPH(TIMx));
  /* 失能内部时钟预分频器从模式 */
  TIMx->SMCR &=  SMCR_SMS_Mask;
}

/**
  * @简述  配置 TIMx 内部触发器为外部时钟模式
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_ITRSource: 触发器.
  *                       这个参数可以取下面的值之一:
  *                       TIM_TS_ITR0: 内部触发器 0
  *                       TIM_TS_ITR1: 内部触发器 1
  *                       TIM_TS_ITR2: 内部触发器 2
  *                       TIM_TS_ITR3: 内部触发器 3
  * @返回  没有
  */
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
{
  /* 检查参数 */
  assert_param(IS_TIM_123458_PERIPH(TIMx));
  assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource));
  /* 选择内部触发器 */
  TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource);
  /* 选择外部时钟模式1 */
  TIMx->SMCR |= TIM_SlaveMode_External1;
}

/**
  * @简述  设置 TIMx 触发为外部时钟
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_TIxExternalCLKSource: 触发器.
  *          这个参数可以取下面的值之一:
  *          TIM_TIxExternalCLK1Source_TI1ED: TI1 边缘检测器
  *          TIM_TIxExternalCLK1Source_TI1: 已筛选的定时器输入 1
  *          TIM_TIxExternalCLK1Source_TI2: 已筛选的定时器输入 2
  * @参数  TIM_ICPolarity: 指定 TIx 极性.
  *          这个参数可以取下面的值之一:
  *          TIM_ICPolarity_Rising
  *          TIM_ICPolarity_Falling
  * @参数  ICFilter : 指定输入捕获过滤器.
  *                   该参数可以是0x0到0xF之间的值.
  * @返回  没有
  */
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter)
{
  /* 检查参数 */
  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));
  /* 配置定时器输入时钟源 */
  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);
  }
  /* 选择触发器 */
  TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource);
  /* 选择外部时钟模式1 */
  TIMx->SMCR |= TIM_SlaveMode_External1;
}

/**
  * @简述  配置外部时钟模式1
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_ExtTRGPrescaler: 外部触发器预分频数.
  *          这个参数可以取下面的值之一:
  *          TIM_ExtTRGPSC_OFF:  ETRP 预分频器 关.
  *          TIM_ExtTRGPSC_DIV2: ETRP 频率除以 2.
  *          TIM_ExtTRGPSC_DIV4: ETRP 频率除以 4.
  *          TIM_ExtTRGPSC_DIV8: ETRP 频率除以 8.
  * @参数  TIM_ExtTRGPolarity: 外部触发器极性.
  *          这个参数可以取下面的值之一:
  *          TIM_ExtTRGPolarity_Inverted:    低电平或下降沿.
  *          TIM_ExtTRGPolarity_NonInverted: 高电平或上升沿.
  * @参数  ExtTRGFilter: 外部触发器过滤器.
  *          该参数可以是0x0到0xF之间的值
  * @返回  没有
  */ 
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter)
{
  uint16_t tmpsmcr = 0;
  /* 检查参数 */
  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));
  /* 配置 ETR 时钟源 */
  TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
  
  /* 得到 TIMx SMCR(从模式控制) 寄存器的值 */
  tmpsmcr = TIMx->SMCR;
  /* 复位 SMS(从模式选择) 位 */
  tmpsmcr &= SMCR_SMS_Mask;
  /* 选择外部时钟模式1 */
  tmpsmcr |= TIM_SlaveMode_External1;
  /* 选择触发器 ,选择 : ETRF */
  tmpsmcr &= SMCR_TS_Mask;
  tmpsmcr |= TIM_TS_ETRF;
  /* 写 TIMx SMCR */
  TIMx->SMCR = tmpsmcr;
}

/**
  * @简述  配置外部时钟模式2
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_ExtTRGPrescaler: 外部触发器预分频数.
  *          它可以是下面的值之一:
  *          TIM_ExtTRGPSC_OFF:  ETRP 预分频器 关.
  *          TIM_ExtTRGPSC_DIV2: ETRP 频率除以 2.
  *          TIM_ExtTRGPSC_DIV4: ETRP 频率除以 4.
  *          TIM_ExtTRGPSC_DIV8: ETRP 频率除以 8.
  * @参数  TIM_ExtTRGPolarity: 外部触发器极性.
  *          它可以是下面的值之一:
  *          TIM_ExtTRGPolarity_Inverted:    低电平或下降沿.
  *          TIM_ExtTRGPolarity_NonInverted: 高电平或上升沿.
  * @参数  ExtTRGFilter: 外部触发器过滤器.
  *          该参数可以是0x0到0xF之间的值
  * @返回  没有
  */
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter)
{
  /* 检查参数 */
  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));
  /* 配置 ETR 时钟源 */
  TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
  /* 使能外部时钟模式2 */
  TIMx->SMCR |= SMCR_ECE_Set;
}

/**
  * @简述  配置 TIMx 外部触发 (ETR).
  * @简述  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_ExtTRGPrescaler: 外部触发器预分频数.
  *          它可以是下面的值之一:
  *          TIM_ExtTRGPSC_OFF:  ETRP 预分频器 关.
  *          TIM_ExtTRGPSC_DIV2: ETRP 频率除以 2.
  *          TIM_ExtTRGPSC_DIV4: ETRP 频率除以 4.
  *          TIM_ExtTRGPSC_DIV8: ETRP 频率除以 8.
  * @参数  TIM_ExtTRGPolarity: 外部触发器极性.
  *          它可以是下面的值之一:
  *          TIM_ExtTRGPolarity_Inverted:    低电平或下降沿.
  *          TIM_ExtTRGPolarity_NonInverted: 高电平或上升沿.
  * @参数  ExtTRGFilter: 外部触发器过滤器.
  *          该参数可以是0x0到0xF之间的值
  * @返回  没有
  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -