📄 stm8s_tim3.c
字号:
/**
* @brief Enables or disables the TIM3 Capture Compare Channel x.
* @param[in] TIM3_Channel specifies the TIM3 Channel.
* This parameter can be one of the following values:
* - TIM3_CHANNEL_1: TIM3 Channel1
* - TIM3_CHANNEL_2: TIM3 Channel2
* @param[in] NewState specifies the TIM3 Channel CCxE bit new state.
* This parameter can be: ENABLE or DISABLE.
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_CCxCmd(TIM3_Channel_TypeDef TIM3_Channel, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_TIM3_CHANNEL_OK(TIM3_Channel));
assert_param(IS_FUNCTIONALSTATE_OK(NewState));
if (TIM3_Channel == TIM3_CHANNEL_1)
{
/* Set or Reset the CC1E Bit */
if (NewState != DISABLE)
{
TIM3->CCER1 |= TIM3_CCER1_CC1E;
}
else
{
TIM3->CCER1 &= (u8)(~TIM3_CCER1_CC1E);
}
}
else
{
/* Set or Reset the CC2E Bit */
if (NewState != DISABLE)
{
TIM3->CCER1 |= TIM3_CCER1_CC2E;
}
else
{
TIM3->CCER1 &= (u8)(~TIM3_CCER1_CC2E);
}
}
}
/**
* @brief Selects the TIM3 Output Compare Mode. This function disables the
* selected channel before changing the Output Compare Mode. User has to
* enable this channel using TIM3_CCxCmd and TIM3_CCxNCmd functions.
* @param[in] TIM3_Channel specifies the TIM3 Channel.
* This parameter can be one of the following values:
* - TIM3_CHANNEL_1: TIM3 Channel1
* - TIM3_CHANNEL_2: TIM3 Channel2
* @param[in] TIM3_OCMode specifies the TIM3 Output Compare Mode.
* This paramter can be one of the following values:
* - TIM3_OCMODE_TIMING
* - TIM3_OCMODE_ACTIVE
* - TIM3_OCMODE_TOGGLE
* - TIM3_OCMODE_PWM1
* - TIM3_OCMODE_PWM2
* - TIM3_FORCEDACTION_ACTIVE
* - TIM3_FORCEDACTION_INACTIVE
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_SelectOCxM(TIM3_Channel_TypeDef TIM3_Channel, TIM3_OCMode_TypeDef TIM3_OCMode)
{
/* Check the parameters */
assert_param(IS_TIM3_CHANNEL_OK(TIM3_Channel));
assert_param(IS_TIM3_OCM_OK(TIM3_OCMode));
if (TIM3_Channel == TIM3_CHANNEL_1)
{
/* Disable the Channel 1: Reset the CCE Bit */
TIM3->CCER1 &= (u8)(~TIM3_CCER1_CC1E);
/* Reset the Output Compare Bits & Set the Output Compare Mode */
TIM3->CCMR1 = (u8)((TIM3->CCMR1 & (u8)(~TIM3_CCMR_OCM)) | (u8)TIM3_OCMode);
}
else
{
/* Disable the Channel 2: Reset the CCE Bit */
TIM3->CCER1 &= (u8)(~TIM3_CCER1_CC2E);
/* Reset the Output Compare Bits & Set the Output Compare Mode */
TIM3->CCMR2 = (u8)((TIM3->CCMR2 & (u8)(~TIM3_CCMR_OCM)) | (u8)TIM3_OCMode);
}
}
/**
* @brief Sets the TIM3 Counter Register value.
* @param[in] Counter specifies the Counter register new value.
* This parameter is between 0x0000 and 0xFFFF.
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_SetCounter(u16 Counter)
{
/* Set the Counter Register value */
TIM3->CNTRH = (u8)(Counter >> 8);
TIM3->CNTRL = (u8)(Counter);
}
/**
* @brief Sets the TIM3 Autoreload Register value.
* @param[in] Autoreload specifies the Autoreload register new value.
* This parameter is between 0x0000 and 0xFFFF.
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_SetAutoreload(u16 Autoreload)
{
/* Set the Autoreload Register value */
TIM3->ARRH = (u8)(Autoreload >> 8);
TIM3->ARRL = (u8)(Autoreload);
}
/**
* @brief Sets the TIM3 Capture Compare1 Register value.
* @param[in] Compare1 specifies the Capture Compare1 register new value.
* This parameter is between 0x0000 and 0xFFFF.
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_SetCompare1(u16 Compare1)
{
/* Set the Capture Compare1 Register value */
TIM3->CCR1H = (u8)(Compare1 >> 8);
TIM3->CCR1L = (u8)(Compare1);
}
/**
* @brief Sets the TIM3 Capture Compare2 Register value.
* @param[in] Compare2 specifies the Capture Compare2 register new value.
* This parameter is between 0x0000 and 0xFFFF.
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_SetCompare2(u16 Compare2)
{
/* Set the Capture Compare2 Register value */
TIM3->CCR2H = (u8)(Compare2 >> 8);
TIM3->CCR2L = (u8)(Compare2);
}
/**
* @brief Sets the TIM3 Input Capture 1 prescaler.
* @param[in] TIM3_IC1Prescaler specifies the Input Capture prescaler new value
* This parameter can be one of the following values:
* - TIM3_ICPSC_DIV1: no prescaler
* - TIM3_ICPSC_DIV2: capture is done once every 2 events
* - TIM3_ICPSC_DIV4: capture is done once every 4 events
* - TIM3_ICPSC_DIV8: capture is done once every 8 events
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_SetIC1Prescaler(TIM3_ICPSC_TypeDef TIM3_IC1Prescaler)
{
/* Check the parameters */
assert_param(IS_TIM3_IC_PRESCALER_OK(TIM3_IC1Prescaler));
/* Reset the IC1PSC Bits & Set the IC1PSC value */
TIM3->CCMR1 = (u8)((TIM3->CCMR1 & (u8)(~TIM3_CCMR_ICxPSC)) | (u8)TIM3_IC1Prescaler);
}
/**
* @brief Sets the TIM3 Input Capture 2 prescaler.
* @param[in] TIM3_IC2Prescaler specifies the Input Capture prescaler new value
* This parameter can be one of the following values:
* - TIM3_ICPSC_DIV1: no prescaler
* - TIM3_ICPSC_DIV2: capture is done once every 2 events
* - TIM3_ICPSC_DIV4: capture is done once every 4 events
* - TIM3_ICPSC_DIV8: capture is done once every 8 events
* @retval None
* @par Required preconditions:
* None
*/
void TIM3_SetIC2Prescaler(TIM3_ICPSC_TypeDef TIM3_IC2Prescaler)
{
/* Check the parameters */
assert_param(IS_TIM3_IC_PRESCALER_OK(TIM3_IC2Prescaler));
/* Reset the IC1PSC Bits & Set the IC1PSC value */
TIM3->CCMR2 = (u8)((TIM3->CCMR2 & (u8)(~TIM3_CCMR_ICxPSC)) | (u8)TIM3_IC2Prescaler);
}
/**
* @brief Gets the TIM3 Input Capture 1 value.
* @param[in] :
* None
* @retval Capture Compare 1 Register value.
* @par Required preconditions:
* None
*/
u16 TIM3_GetCapture1(void)
{
/* Get the Capture 1 Register value */
u16 tmpccr1 = 0;
u8 tmpccr1l=0, tmpccr1h=0;
tmpccr1h = TIM3->CCR1H;
tmpccr1l = TIM3->CCR1L;
tmpccr1 = (u16)(tmpccr1l);
tmpccr1 |= (u16)((u16)tmpccr1h << 8);
/* Get the Capture 1 Register value */
return (u16)tmpccr1;
}
/**
* @brief Gets the TIM3 Input Capture 2 value.
* @param[in] :
* None
* @retval Capture Compare 2 Register value.
* @par Required preconditions:
* None
*/
u16 TIM3_GetCapture2(void)
{
/* Get the Capture 2 Register value */
u16 tmpccr2 = 0;
u8 tmpccr2l=0, tmpccr2h=0;
tmpccr2h = TIM3->CCR2H;
tmpccr2l = TIM3->CCR2L;
tmpccr2 = (u16)(tmpccr2l);
tmpccr2 |= (u16)((u16)tmpccr2h << 8);
/* Get the Capture 2 Register value */
return (u16)tmpccr2;
}
/**
* @brief Gets the TIM3 Counter value.
* @param[in] :
* None
* @retval Counter Register value.
* @par Required preconditions:
* None
*/
u16 TIM3_GetCounter(void)
{
/* Get the Counter Register value */
return (u16)(((u16)TIM3->CNTRH << 8) | (u16)(TIM3->CNTRL));
}
/**
* @brief Gets the TIM3 Prescaler value.
* @param[in] :
* None
* @retval Prescaler Register configuration value @ref TIM3_Prescaler_TypeDef.
* @par Required preconditions:
* None
*/
TIM3_Prescaler_TypeDef TIM3_GetPrescaler(void)
{
/* Get the Prescaler Register value */
return (TIM3_Prescaler_TypeDef)(TIM3->PSCR);
}
/**
* @brief Checks whether the specified TIM3 flag is set or not.
* @param[in] TIM3_FLAG specifies the flag to check.
* This parameter can be one of the following values:
* - TIM3_FLAG_UPDATE: TIM3 update Flag
* - TIM3_FLAG_CC1: TIM3 Capture Compare 1 Flag
* - TIM3_FLAG_CC2: TIM3 Capture Compare 2 Flag
* - TIM3_FLAG_CC1OF: TIM3 Capture Compare 1 over capture Flag
* - TIM3_FLAG_CC2OF: TIM3 Capture Compare 2 over capture Flag
* @retval FlagStatus The new state of TIM3_FLAG (SET or RESET).
* @par Required preconditions:
* None
*/
FlagStatus TIM3_GetFlagStatus(TIM3_FLAG_TypeDef TIM3_FLAG)
{
FlagStatus bitstatus = RESET;
u8 tim3_flag_l, tim3_flag_h;
/* Check the parameters */
assert_param(IS_TIM3_GET_FLAG_OK(TIM3_FLAG));
tim3_flag_l = (u8)(TIM3_FLAG);
tim3_flag_h = (u8)(TIM3_FLAG >> 8);
if (((TIM3->SR1 & tim3_flag_l) | (TIM3->SR2 & tim3_flag_h)) != (u8)RESET )
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return (FlagStatus)bitstatus;
}
/**
* @brief Clears the TIM3抯 pending flags.
* @param[in] TIM3_FLAG specifies the flag to clear.
* This parameter can be one of the following values:
* - TIM3_FLAG_UPDATE: TIM3 update Flag
* - TIM3_FLAG_CC1: TIM3 Capture Compare 1 Flag
* - TIM3_FLAG_CC2: TIM3 Capture Compare 2 Flag
* - TIM3_FLAG_CC1OF: TIM3 Capture Compare 1 over capture Flag
* - TIM3_FLAG_CC2OF: TIM3 Capture Compare 2 over capture Flag
* @retval None.
* @par Required preconditions:
* None
*/
void TIM3_ClearFlag(TIM3_FLAG_TypeDef TIM3_FLAG)
{
/* Check the parameters */
assert_param(IS_TIM3_CLEAR_FLAG_OK(TIM3_FLAG));
/* Clear the flags (rc_w0) clear this bit by writing 0. Writing
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -