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

📄 stm32f10x_tim.c

📁 中文固件库.rar
💻 C
📖 第 1 页 / 共 5 页
字号:
    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2);
  }
  /* 写 TIMx CR2(控制寄存器2) */
  TIMx->CR2 = tmpcr2;
  
  /* 写 TIMx CCMR1(捕获/比较模式寄存器1) */
  TIMx->CCMR1 = tmpccmrx;
  
  /* 写 TIMx CCER(捕获/比较使能寄存器) */
  TIMx->CCER = tmpccer;
}

/**
  * @简述  根据 TIM_OCInitStruct 中的特定参数初始化TIMx通道3.
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_OCInitStruct: 指向一个包含特定TIMx外设的配置信息的 TIM_OCInitTypeDef 结构的指针.
  * @返回  没有
  */
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
  uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
   
  /* 检查参数 */
  assert_param(IS_TIM_123458_PERIPH(TIMx)); 
  assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
  assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
  assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));   
  /* 失能 3: 复位 CC3E 位 */
  TIMx->CCER &= CCER_CC3E_Reset;
  
  /* 得到 TIMx CCER(捕获/比较使能) 寄存器的值 */
  tmpccer = TIMx->CCER;
  /* 得到 TIMx CR2(控制寄存器2) 寄存器的值 */
  tmpcr2 =  TIMx->CR2;
  
  /* 得到 TIMx CCMR2(捕获/比较模式) 寄存器的值 */
  tmpccmrx = TIMx->CCMR2;
    
  /* 复位输出比较模式位 */
  tmpccmrx &= CCMR_OC13M_Mask;
  
  /* 选择输出比较模式 */
  tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;
  
  /* 复位输出极性等级 */
  tmpccer &= CCER_CC3P_Reset;
  /* 设置输出比较极性 */
  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8);
  
  /* 设置输出状态 */
  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8);
  
  /* 设置捕获比较寄存器值 */
  TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse;
  
  if(((uint32_t) TIMx == TIM1_BASE) || ((uint32_t) TIMx == TIM8_BASE))
  {
    assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState));
    assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity));
    assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState));
    assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
    
    /* 复位输出 N 极性等级 */
    tmpccer &= CCER_CC3NP_Reset;
    /* 设置输出 N 极性 */
    tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8);
    /* 复位输出 N 状态 */
    tmpccer &= CCER_CC3NE_Reset;
    
    /* 设置输出 N 状态 */
    tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8);
    /* 复位输出比较,输出比较 N 空闲状态 */
    tmpcr2 &= CR2_OIS3_Reset;
    tmpcr2 &= CR2_OIS3N_Reset;
    /* 设置输出空闲状态 */
    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4);
    /* 设置输出 N 空闲状态 */
    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4);
  }
  /* 写 TIMx CR2(控制寄存器2) */
  TIMx->CR2 = tmpcr2;
  
  /* 写 TIMx CCMR2(捕获/比较模式寄存器2) */
  TIMx->CCMR2 = tmpccmrx;
  
  /* 写 TIMx CCER(捕获/比较使能寄存器) */
  TIMx->CCER = tmpccer;
}

/**
  * @简述  根据 TIM_OCInitStruct 中的特定参数初始化TIMx通道4.
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_OCInitStruct: 指向一个包含特定TIMx外设的配置信息的 TIM_OCInitTypeDef 结构的指针.
  * @返回  没有
  */
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
  uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
   
  /* 检查参数 */
  assert_param(IS_TIM_123458_PERIPH(TIMx)); 
  assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
  assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
  assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));   
  /* 失能通道 4: 复位 CC4E 位 */
  TIMx->CCER &= CCER_CC4E_Reset;
  
  /* 得到 TIMx CCER(捕获/比较使能) 寄存器的值 */
  tmpccer = TIMx->CCER;
  /* 得到 TIMx CR2(控制寄存器2) 寄存器的值 */
  tmpcr2 =  TIMx->CR2;
  
  /* 得到 TIMx CCMR2(捕获/比较模式) 寄存器的值 */
  tmpccmrx = TIMx->CCMR2;
    
  /* 复位输出比较模式位 */
  tmpccmrx &= CCMR_OC24M_Mask;
  
  /* 选择输出比较模式 */
  tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
  
  /* 复位输出极性等级 */
  tmpccer &= CCER_CC4P_Reset;
  /* 设置输出比较极性 */
  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12);
  
  /* 设置输出状态 */
  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12);
  
  /* 设置捕获比较寄存器值 */
  TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse;
  
  if(((uint32_t) TIMx == TIM1_BASE) || ((uint32_t) TIMx == TIM8_BASE))
  {
    assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
    /* 复位输出比较空闲状态 */
    tmpcr2 &= CR2_OIS4_Reset;
    /* 设置输出空闲状态 */
    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6);
  }
  /* 写 TIMx CR2(控制寄存器2) */
  TIMx->CR2 = tmpcr2;
  
  /* 写 TIMx CCMR2(捕获/比较模式寄存器2) */  
  TIMx->CCMR2 = tmpccmrx;
  
  /* 写 TIMx CCER(捕获/比较使能寄存器) */
  TIMx->CCER = tmpccer;
}

/**
  * @简述  根据 TIM_ ICInitStruct 中的特定参数初始化 TIMx.
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_ICInitStruct: 指向一个包含特定 TIMx 外设的配置信息的 TIM_OCInitTypeDef 结构的指针.
  * @返回  没有
  */
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
{
  /* 检查参数 */
  assert_param(IS_TIM_123458_PERIPH(TIMx));
  assert_param(IS_TIM_CHANNEL(TIM_ICInitStruct->TIM_Channel));
  assert_param(IS_TIM_IC_POLARITY(TIM_ICInitStruct->TIM_ICPolarity));
  assert_param(IS_TIM_IC_SELECTION(TIM_ICInitStruct->TIM_ICSelection));
  assert_param(IS_TIM_IC_PRESCALER(TIM_ICInitStruct->TIM_ICPrescaler));
  assert_param(IS_TIM_IC_FILTER(TIM_ICInitStruct->TIM_ICFilter));
  
  if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
  {
    /* TI1 配置 */
    TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
               TIM_ICInitStruct->TIM_ICSelection,
               TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
  }
  else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2)
  {
    /* TI2 配置 */
    TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
               TIM_ICInitStruct->TIM_ICSelection,
               TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
  }
  else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3)
  {
    /* TI3 配置 */
    TI3_Config(TIMx,  TIM_ICInitStruct->TIM_ICPolarity,
               TIM_ICInitStruct->TIM_ICSelection,
               TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
  }
  else
  {
    /* TI4 配置 */
    TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
               TIM_ICInitStruct->TIM_ICSelection,
               TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
  }
}

/**
  * @简述  依照TIM_ICInitStruct指定的参数设置TIM设备去配置外部的PWM信号.
  * @参数  TIMx: 此处x可以是1,2,3,4,5或8以选择外设.
  * @参数  TIM_ICInitStruct: 指向一个包含特定 TIMx 外设的配置信息的 TIM_ICInitTypeDef 结构的指针.
  * @返回  没有
  */
void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
{
  uint16_t icoppositepolarity = TIM_ICPolarity_Rising;
  uint16_t icoppositeselection = TIM_ICSelection_DirectTI;
  /* 检查参数 */
  assert_param(IS_TIM_123458_PERIPH(TIMx));
  /* 选择相反的输入极性 */
  if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising)
  {
    icoppositepolarity = TIM_ICPolarity_Falling;
  }
  else
  {
    icoppositepolarity = TIM_ICPolarity_Rising;
  }
  /* 选择相反的输入 */
  if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI)
  {
    icoppositeselection = TIM_ICSelection_IndirectTI;
  }
  else
  {
    icoppositeselection = TIM_ICSelection_DirectTI;
  }
  if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
  {
    /* TI1 配置 */
    TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,
               TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
    /* TI2 配置 */
    TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
  }
  else
  { 
    /* TI2 配置 */
    TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,
               TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
    /* TI1 配置 */
    TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
    /* 设置输入捕捉预分频器值 */
    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
  }
}

/**
  * @简述  配置: 设置刹车特性,死区时间,锁电平,OSSI,OSSR状态和AOE(自动输出使能).
  * @参数  TIMx: 此处x可以是1到8以选择外设
  * @参数  TIM_BDTRInitStruct: 指向一个包含特定 TIMx 外设的配置信息的 TIM_BDTRInitTypeDef 结构的指针.
  * @返回  没有
  */
void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct)
{
  /* 检查参数 */
  assert_param(IS_TIM_18_PERIPH(TIMx));
  assert_param(IS_TIM_OSSR_STATE(TIM_BDTRInitStruct->TIM_OSSRState));
  assert_param(IS_TIM_OSSI_STATE(TIM_BDTRInitStruct->TIM_OSSIState));
  assert_param(IS_TIM_LOCK_LEVEL(TIM_BDTRInitStruct->TIM_LOCKLevel));
  assert_param(IS_TIM_BREAK_STATE(TIM_BDTRInitStruct->TIM_Break));
  assert_param(IS_TIM_BREAK_POLARITY(TIM_BDTRInitStruct->TIM_BreakPolarity));
  assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(TIM_BDTRInitStruct->TIM_AutomaticOutput));
  /* 配置:锁电平级别,间断允许位和极性,OSSR状态,OSSI状态,滞后时间和自动输出使能位 */
  TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
             TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime |
             TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity |
             TIM_BDTRInitStruct->TIM_AutomaticOutput;
}

/**
  * @简述  把 TIM1_TimeBaseInitStruct 中的每一个参数按缺省值填入.
  * @参数  TIM_TimeBaseInitStruct : 指向一个将被初始化的 TIM_TimeBaseInitTypeDef 结构的指针.
  * @返回  没有
  */
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
{
  /* 设置成默认配置 */
  TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF;
  TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000;
  TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000;
}

/**
  * @简述  把 TIM1_OCInitStruct 中的每一个参数按缺省值填入.
  * @参数  TIM_OCInitStruct : 指向一个将被初始化的 TIM_OCInitStruct 结构的指针.
  * @返回  没有
  */
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)
{
  /* 设置成默认配置 */
  TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable;
  TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable;
  TIM_OCInitStruct->TIM_Pulse = 0x0000;
  TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High;
  TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset;
  TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset;
}

/**
  * @简述  把 TIM1_ICInitStruct 中的每一个参数按缺省值填入.
  * @参数  TIM_ICInitStruct : 指向一个将被初始化的 TIM_ICInitStruct 结构的指针.
  * @返回  没有
  */
void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct)
{
  /* 设置成默认配置 */
  TIM_ICInitStruct->TIM_Channel = TIM_Channel_1;
  TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStruct->TIM_ICFilter = 0x00;
}

/**
  * @简述  把 TIM1_BDTRInitStruct 中的每一个参数按缺省值填入.
  * @参数  TIM_BDTRInitStruct: 指向一个将被初始化的 TIM1_BDTRInitStruct 结构体.
  * @返回  没有
  */
void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct)
{
  /* 设置成默认配置 */
  TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable;
  TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable;
  TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF;
  TIM_BDTRInitStruct->TIM_DeadTime = 0x00;
  TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable;
  TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low;

⌨️ 快捷键说明

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