📄 stm32f10x_tim.c
字号:
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 + -