📄 stm32f10x_tim.c
字号:
* (2)TIM_OCInitStruct:指向一个包含特定TIMx外设的配置信息的TIM_OCInitTypeDef结构的指针
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
u16 tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
/* Check the parameters [检查参数]*/
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));
/* Disable the Channel 2: Reset the CC2E Bit [禁止通道2:复位CC2E位]*/
TIMx->CCER &= CCER_CC2E_Reset;
/* Get the TIMx CCER register value [取得TIMx 捕获/比较使能寄存器的寄存器值]*/
tmpccer = TIMx->CCER;
/* Get the TIMx CR2 register value [取得TIMx 控制2的寄存器值]*/
tmpcr2 = TIMx->CR2;
/* Get the TIMx CCMR1 register value [取得TIMx 捕获/比较模式寄存器1的寄存器值]*/
tmpccmrx = TIMx->CCMR1;
/* Reset the Output Compare Mode Bits [复位输出比较模式位]*/
tmpccmrx &= CCMR_OC24M_Mask;
/* Select the Output Compare Mode [选择输出比较模式位]*/
tmpccmrx |= (u16)(TIM_OCInitStruct->TIM_OCMode << 8);
/* Reset the Output Polarity level [复位输出极性级别]*/
tmpccer &= CCER_CC2P_Reset;
/* Set the Output Compare Polarity [设置输出比较极性]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OCPolarity << 4);
/* Set the Output State [设置输出状态]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OutputState << 4);
/* Set the Capture Compare Register value [设置捕获比较寄存器值]*/
TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse;
if((*(u32*)&TIMx == TIM1_BASE) || (*(u32*)&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));
/* Reset the Output N Polarity level [复位输出N极性等级]*/
tmpccer &= CCER_CC2NP_Reset;
/* Set the Output N Polarity [设置输出N极性]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OCNPolarity << 4);
/* Reset the Output N State [复位输出N状态]*/
tmpccer &= CCER_CC2NE_Reset;
/* Set the Output N State [设置输出N状态]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OutputNState << 4);
/* Reset the Ouput Compare and Output Compare N IDLE State [复位输出比较和输出比较N IDLE状态]*/
tmpcr2 &= CR2_OIS2_Reset;
tmpcr2 &= CR2_OIS2N_Reset;
/* Set the Output Idle state [设置输出IDLE状态]*/
tmpcr2 |= (u16)(TIM_OCInitStruct->TIM_OCIdleState << 2);
/* Set the Output N Idle state [设置输出N IDLE状态]*/
tmpcr2 |= (u16)(TIM_OCInitStruct->TIM_OCNIdleState << 2);
}
/* Write to TIMx CR2 [写TIMx配置寄存器2]*/
TIMx->CR2 = tmpcr2;
/* Write to TIMx CCMR1 [写TIMx捕获/比较模式寄存器1]*/
TIMx->CCMR1 = tmpccmrx;
/* Write to TIMx CCER [写TIMx捕获/比较使能寄存器]*/
TIMx->CCER = tmpccer;
}
/*******************************************************************************
* 函数名称: TIM_OC3Init
* 功能描述: 根据TIM_OCInitStruct中的特定参数初始化TIMx通道3。
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_OCInitStruct:指向一个包含特定TIMx外设的配置信息的TIM_OCInitTypeDef结构的指针
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
u16 tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
/* Check the parameters [检查参数]*/
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));
/* Disable the Channel 3: Reset the CC3E Bit [禁止通道3:复位CC3E位]*/
TIMx->CCER &= CCER_CC3E_Reset;
/* Get the TIMx CCER register value [取得TIMx 捕获/比较使能寄存器的寄存器值]*/
tmpccer = TIMx->CCER;
/* Get the TIMx CR2 register value [取得TIMx 控制2的寄存器值]*/
tmpcr2 = TIMx->CR2;
/* Get the TIMx CCMR2 register value [取得TIMx 捕获/比较模式寄存器2的寄存器值]*/
tmpccmrx = TIMx->CCMR2;
/* Reset the Output Compare Mode Bits [复位输出比较模式位]*/
tmpccmrx &= CCMR_OC13M_Mask;
/* Select the Output Compare Mode [选择输出比较模式位]*/
tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;
/* Reset the Output Polarity level [复位输出极性级别]*/
tmpccer &= CCER_CC3P_Reset;
/* Set the Output Compare Polarity [设置输出比较极性]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OCPolarity << 8);
/* Set the Output State [设置输出状态]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OutputState << 8);
/* Set the Capture Compare Register value [设置捕获比较寄存器值]*/
TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse;
if((*(u32*)&TIMx == TIM1_BASE) || (*(u32*)&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));
/* Reset the Output N Polarity level [复位输出N极性等级]*/
tmpccer &= CCER_CC3NP_Reset;
/* Set the Output N Polarity [设置输出N极性]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OCNPolarity << 8);
/* Reset the Output N State [复位输出N状态]*/
tmpccer &= CCER_CC3NE_Reset;
/* Set the Output N State [设置输出N状态]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OutputNState << 8);
/* Reset the Ouput Compare and Output Compare N IDLE State [复位输出比较和输出比较N IDLE状态]*/
tmpcr2 &= CR2_OIS3_Reset;
tmpcr2 &= CR2_OIS3N_Reset;
/* Set the Output Idle state [设置输出IDLE状态]*/
tmpcr2 |= (u16)(TIM_OCInitStruct->TIM_OCIdleState << 4);
/* Set the Output N Idle state [设置输出N IDLE状态]*/
tmpcr2 |= (u16)(TIM_OCInitStruct->TIM_OCNIdleState << 4);
}
/* Write to TIMx CR2 [写TIMx配置寄存器2]*/
TIMx->CR2 = tmpcr2;
/* Write to TIMx CCMR2 [写TIMx捕获/比较模式寄存器2]*/
TIMx->CCMR2 = tmpccmrx;
/* Write to TIMx CCER [写TIMx捕获/比较使能寄存器]*/
TIMx->CCER = tmpccer;
}
/*******************************************************************************
* 函数名称: TIM_OC4Init
* 功能描述: 根据TIM_OCInitStruct中的特定参数初始化TIMx通道4。
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_OCInitStruct:指向一个包含特定TIMx外设的配置信息的TIM_OCInitTypeDef结构的指针.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
u16 tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
/* Check the parameters [检查参数]*/
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));
/* Disable the Channel 2: Reset the CC4E Bit [禁止通道2:复位CC4E位]*/
TIMx->CCER &= CCER_CC4E_Reset;
/* Get the TIMx CCER register value [取得TIMx 捕获/比较使能寄存器的寄存器值]*/
tmpccer = TIMx->CCER;
/* Get the TIMx CR2 register value [取得TIMx 控制2的寄存器值]*/
tmpcr2 = TIMx->CR2;
/* Get the TIMx CCMR2 register value [取得TIMx 捕获/比较模式寄存器2的寄存器值]*/
tmpccmrx = TIMx->CCMR2;
/* Reset the Output Compare Mode Bits [复位输出比较模式位]*/
tmpccmrx &= CCMR_OC24M_Mask;
/* Select the Output Compare Mode [选择输出比较模式位]*/
tmpccmrx |= (u16)(TIM_OCInitStruct->TIM_OCMode << 8);
/* Reset the Output Polarity level [复位输出极性级别]*/
tmpccer &= CCER_CC4P_Reset;
/* Set the Output Compare Polarity [设置输出比较极性]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OCPolarity << 12);
/* Set the Output State [设置输出状态]*/
tmpccer |= (u16)(TIM_OCInitStruct->TIM_OutputState << 12);
/* Set the Capture Compare Register value [设置捕获比较寄存器值]*/
TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse;
if((*(u32*)&TIMx == TIM1_BASE) || (*(u32*)&TIMx == TIM8_BASE))
{
assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
/* Reset the Ouput Compare IDLE State [设置输出比较IDLE状态]*/
tmpcr2 &= CR2_OIS4_Reset;
/* Set the Output Idle state [设置输出IDLE状态]*/
tmpcr2 |= (u16)(TIM_OCInitStruct->TIM_OCIdleState << 6);
}
/* Write to TIMx CR2 [写TIMx配置寄存器2]*/
TIMx->CR2 = tmpcr2;
/* Write to TIMx CCMR2 [写TIMx捕获/比较模式寄存器2]*/
TIMx->CCMR2 = tmpccmrx;
/* Write to TIMx CCER [写TIMx捕获/比较使能寄存器]*/
TIMx->CCER = tmpccer;
}
/*******************************************************************************
* 函数名称: TIM_ICInit
* 功能描述: 根据TIM_ ICInitStruct中的特定参数初始化TIMx.
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
* (2)TIM_OCInitStruct:指向一个包含特定TIMx外设的配置信息的TIM_OCInitTypeDef结构的指针.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
{
/* Check the parameters [检查参数]*/
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 Configuration [TI1配置]*/
TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
TIM_ICInitStruct->TIM_ICSelection,
TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value [设置输入捕捉预分频器值]*/
TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
}
else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2)
{
/* TI2 Configuration [TI2配置]*/
TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
TIM_ICInitStruct->TIM_ICSelection,
TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value [设置输入捕捉预分频器值]*/
TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
}
else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3)
{
/* TI3 Configuration [TI2配置]*/
TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
TIM_ICInitStruct->TIM_ICSelection,
TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value [设置输入捕捉预分频器值]*/
TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
}
else
{
/* TI4 Configuration [TI2配置]*/
TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
TIM_ICInitStruct->TIM_ICSelection,
TIM_ICInitStruct->TIM_ICFilter);
/* Set the Input Capture Prescaler value [设置输入捕捉预分频器值]*/
TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
}
}
/*******************************************************************************
* 函数名称: TIM_PWMIConfig
* 功能描述: 依照TIM_ICInitStruct指定的参数设置TIM设备去测量外部的PWM信号。
* 输入参数: (1)TIMx:此处x可以是1,2,3,4,5或8以选择外设.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -