TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,\\ TIM_ICInitStruct->TIM_ICSelection,\\ TIM_ICInitStruct->TIM_ICFilter);
/*
static void TI1_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection, u16 TIM_ICFilter) {
u16 tmpccmr1 = 0, tmpccer = 0;
//Disable the Channel 1: Reset the CC1E Bit
TIMx->CCER &= CCER_CC1E_Reset;//bit0:CCER_CC1E_Reset = 0x FFFE,
tmpccmr1 = TIMx->CCMR1; tmpccer = TIMx->CCER;
//Select the Input and set the filter
tmpccmr1 &= CCMR_CC13S_Mask & CCMR_IC13F_Mask;//清除目标位
// #define CCMR_CC13S_Mask ((u16)0xFFFC) // #define CCMR_IC13F_Mask ((u16)0xFF0F)
tmpccmr1 |= TIM_ICSelection | (u16)(TIM_ICFilter << 4);// bit1-0(输入通道映射选择),bit7-4(IC过滤采样值)。
// Select the Polarity and set the CC1E Bit
tmpccer &= CCER_CC1P_Reset;//0xFFFD—清除目标位
tmpccer |= TIM_ICPolarity | CCER_CC1E_Set;//bit1,bit0
// Write to TIMx CCMR1 and CCER registers TIMx->CCMR1 = tmpccmr1; TIMx->CCER = tmpccer; } */
/* 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_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 */
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 */
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);
/*
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, u16 TIM_ICPSC) {
/* Check the parameters */
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
/* Reset the IC4PSC Bits */
TIMx->CCMR2 &= CCMR_IC24PSC_Mask;//CCMR_IC24PSC_Mask = 0xF3FF
/* Set the IC4PSC value */
TIMx->CCMR2 |= (u16)(TIM_ICPSC << 8);// IC4PSC[1:0]在bit11-10,此处<<8原因:TIM_ICPSC已经移了2位(位了CC1/3方便) } */
} }
19.2.5 函数TIM_TimeBaseStructInit
Table 473. 函数TIM_TimeBaseStructInit 函数名 TIM_TimeBaseStructInit 函数原形 void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) 功能描述 把TIM_TimeBaseInitStruct 中的每一个参数按缺省值填入 输入参数 TIM_TimeBaseInitStruct:指向结构TIM_TimeBaseInitTypeDef的指针,待初始化 输出参数 无 返回值 无 先决条件 无 被调用函数 无 Table 474. TIM_TimeBaseInitStruct缺省值 成员 缺省值 #define值 TIM_Period TIM_Period_Reset_Mask TIM_Prescaler TIM_Prescaler_Reset_Mask TIM_CKD TIM_CKD_DIV1 TIM_CounterMode TIM_CounterMode_Up 例:
/* The following example illustrates how to initialize a TIM_BaseInitTypeDef structure */
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseStructInit(& TIM_TimeBaseInitStructure); 函数原型如下:
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) {
/* Set the default configuration */
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; } /*
TIM_TimeBaseInitStruct的结构体如下: typedef struct {
u16 TIM_Period; u16 TIM_Prescaler;
u16 TIM_ClockDivision; u16 TIM_CounterMode;
u8 TIM_RepetitionCounter; }TIM_TimeBaseInitTypeDef; */
19.2.6 函数TIM_OCStructInit
Table 475. 函数TIM_TimeBaseStructInit 函数名 TIM_TimeBaseStructInit 函数原形 void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct) 功能描述 把TIM_OCInitStruct中的每一个参数按缺省值填入 输入参数 TIM_OCInitStruct:指向结构TIM_OCInitTypeDef的指针,待初始化 输出参数 无 返回值 无 先决条件 无 被调用函数 无 Table 476. TIM_OCInitStruct缺省值 成员 缺省值 #define值 TIM_OCMode TIM_OCMode_Timing TIM_Channel TIM_Channel_1 TIM_Pulse TIM_Pulse_Reset_Mask TIM_OCPolarity TIM_OCPolarity_High 例:
/* The following example illustrates how to initialize a TIM_OCInitTypeDef structure */
TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(& TIM_OCInitStructure); 函数原型如下:
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct) {
/* Set the default configuration */
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; }
19.2.7 函数TIM_ICStructInit
Table 477. 函数TIM_ICStructInit 函数名 TIM_ICStructInit 函数原形 void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct) 功能描述 把TIM_ICInitStruct中的每一个参数按缺省值填入 输入参数 TIM_ICInitStruct:指向结构TIM_ICInitTypeDef的指针,待初始化 输出参数 无 返回值 无 先决条件 无 被调用函数 无 Table 478. TIM_ICInitStruct缺省值 成员 缺省值 #define值 TIM_ICMode TIM_ICMode_ICAP TIM_Channel TIM_Channel_1 TIM_ICPolarity TIM_ICPolarity_Rising TIM_ICSelection TIM_ICSelection_DirectTI TIM_ICPrescaler TIM_ICPSC_DIV1 TIM_ICFilter TIM_ICFilter_Mask 例:
/* The following example illustrates how to initialize a TIM_ICInitTypeDef structure */ TIM_ICInitTypeDef TIM_ICInitStructure; TIM_ICStructInit(& TIM_ICInitStructure); 函数原型如下:
void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct) {
/* Set the default configuration */
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; }
19.2.8 函数TIM_Cmd
Table 479.函数TIM_Cmd 函数名 TIM_Cmd 函数原形 void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) 功能描述 使能或失能TIMx外设 输入参数1 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 NewState: 外设TIMx的新状态 输入参数2 参数可取:ENABLE 或 DISABLE 输出参数 无 返回值 无 先决条件 无 被调用函数 无 例:
/* Enables the TIM2 counter */ TIM_Cmd(TIM2, ENABLE); 函数原型如下:
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) {
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE) {
/* Enable the TIM Counter */
TIMx->CR1 |= CR1_CEN_Set; //CR1.bit0 } else {
/* Disable the TIM Counter */ TIMx->CR1 &= CR1_CEN_Reset; } }
19.2.9 函数TIM_ITConfig
Table 480. 函数TIM_ITConfig 函数名 TIM_ITConfig 函数原形 void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState) 功能描述 使能或失能指定的TIM中断 输入参数1 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_IT:待使能或者失能的TIM中断源 输入参数3 NewState:TIMx中断的新状态(ENABLE或DISABLE) 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_IT :输入参数TIM_IT使能或者失能TIM的中断。可以取下表的一个或者多个取值的组合作为该参数的值。 Table 481. TIM_IT值 参数TIM_IT值 描述/DIER(中断标志) #define值 DIER位置 TIM_IT_Update TIM中断源 (u16)0x0001 bit0 TIM_IT_CC1 TIM捕获/比较1中断源 (u16)0x0002 bit1 TIM_IT_CC2 TIM捕获/比较2中断源 (u16)0x0004 bit2 TIM_IT_CC3 TIM捕获/比较3中断源 (u16)0x0008 bit3 TIM_IT_CC4 TIM捕获/比较4中断源 (u16)0x0010 bit4 TIM_IT_COM (u16)0x0020 bit5 TIM_IT_Trigger TIM触发中断源 (u16)0x0040 bit6 TIM_IT_Break (u16)0x0080 bit7 例:
/* Enables the TIM2 Capture Compare channel 1 Interrupt source */ TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE ); 函数原型如下:
void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState) {
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx)); assert_param(IS_TIM_IT(TIM_IT));
assert_param(IS_TIM_PERIPH_IT((TIMx), (TIM_IT))); assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE) {
/* Enable the Interrupt sources */ TIMx->DIER |= TIM_IT; } else
{
/* Disable the Interrupt sources */ TIMx->DIER &= (u16)~TIM_IT; } }
19.2.10 函数TIM_DMAConfig
Table 482. 函数TIM_DMAConfig 函数名 TIM_DMAConfig void TIM_DMAConfig(TIM_TypeDef* TIMx,u8 TIM_DMABase, u16 函数原形 TIM_DMABurstLength) 功能描述 设置TIMx的DMA接口 输入参数1 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_DMABase:DMA传输起始地址 输入参数3 TIM_DMABurstLength:DMA连续传送长度 参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_DMABase:设置DMA传输起始地址。可以取下表的值。
Table 483. TIM_DMABase值 参数TIM_DMABase地址值 描述/DCR.bit4-0 [DBA[4:0]] #define值 TIM_DMABase_CR1 TIM CR1 寄存器作为DMA传输起始 0x0000 TIM_DMABase_CR2 TIM CR2 ?? 0x0001 TIM_DMABase_SMCR TIM SMCR ?? 0x0002 TIM_DMABase_DIER TIM DIER ?? 0x0003 TIM_DMABase_SR TIM SR ?? 0x0004 TIM_DMABase_EGR TIM EGR ?? 0x0005 TIM_DMABase_CCMR1 TIM CCMR1 ?? 0x0006 TIM_DMABase_CCMR2 TIM CCMR2 ?? 0x0007 TIM_DMABase_CCER TIM CCER ?? 0x0008 TIM_DMABase_CNT TIM CNT ?? 0x0009 TIM_DMABase_PSC TIM PSC ?? 0x000A TIM_DMABase_ARR TIM APR ?? 0x000B TIM_DMABase_RCR 0x000C TIM_DMABase_CCR1 TIM CCR1 ?? 0x000D TIM_DMABase_CCR2 TIM CCR2 ?? 0x000E TIM_DMABase_CCR3 TIM CCR3 ?? 0x000F TIM_DMABase_CCR4 TIM CCR4 ?? 0x0010 TIM_DMABase_BDTR 0x0011 TIM_DMABase_DCR TIM DCR ?? 0x0012 TIM_DMABurstLength :设置DMA连续传送长度。可以取下表的值。 Table 484. TIM_DMABurstLength值 TIM_DMABurstLength 描述/DCR.bit12-8--DBL[4:0] #define值 TIM_DMABurstLength_1Byte TIM DMA连续传送长度1字 0x0000 TIM_DMABurstLength_2Bytes TIM DMA连续传送长度2字 0x0100 TIM_DMABurstLength_3Bytes TIM DMA连续传送长度3字 0x0200 TIM_DMABurstLength_4Bytes TIM DMA连续传送长度4字 0x0300 TIM_DMABurstLength_5Bytes TIM DMA连续传送长度5字 0x0400 TIM_DMABurstLength_6Bytes TIM DMA连续传送长度6字 0x0500 TIM_DMABurstLength_7Bytes TIM DMA连续传送长度7字 0x0600 TIM_DMABurstLength_8Bytes TIM DMA连续传送长度8字 0x0700