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