STM32F10x_TIM

更新时间:2024-05-06 02:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

19.1 TIM寄存器结构 ....................................................................242 19.2 TIM库函数 ........................................................................244 No 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 函数名 TIM_DeInit TIM_TimeBaseInit TIM_OCInit TIM_ICInit TIM_TimeBaseStructInit TIM_OCStructInit TIM_ICStructInit TIM_Cmd TIM _ITConfig TIM_DMAConfig TIM_DMACmd TIM_InternalClockConfig TIM_ITRxExternalClockConfig TIM_TIxExternalClockConfig TIM_ETRClockMode1Config TIM_ETRClockMode2Config TIM_ETRConfig TIM_SelectInputTrigger TIM_PrescalerConfig TIM_CounterModeConfig TIM_ForcedOC1Config TIM_ForcedOC2Config TIM_ForcedOC3Config TIM_ForcedOC4Config TIM_ARRPreloadConfig TIM_SelectCCDMA TIM_OC1PreloadConfig TIM_OC2PreloadConfig TIM_OC3PreloadConfig TIM_OC4PreloadConfig TIM_OC1FastConfig TIM_OC2FastConfig TIM_OC3FastConfig TIM_OC4FastConfig TIM_ClearOC1Ref TIM_ClearOC2Ref TIM_ClearOC3Ref TIM_ClearOC4Ref TIM_UpdateDisableConfig TIM_EncoderInterfaceConfig TIM_GenerateEvent TIM_OC1PolarityConfig TIM_OC2PolarityConfig TIM_OC3PolarityConfig TIM_OC4PolarityConfig TIM_UpdateRequestConfig TIM_SelectHallSensor TIM_SelectOnePulseMode TIM_SelectOutputTrigger TIM_SelectSlaveMode 描述 将外设TIMx寄存器重设为缺省值 根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 根据TIM_OCInitStruct中指定的参数初始化外设TIMx 根据TIM_ICInitStruct中指定的参数初始化外设TIMx 把TIM_TimeBaseInitStruct中的每一个参数按缺省值填入 把TIM_OCInitStruct中的每一个参数按缺省值填入 把TIM_ICInitStruct中的每一个参数按缺省值填入 使能或者失能TIMx外设 使能或者失能指定的TIM中断 设置TIMx的DMA接口 使能或者失能指定的TIMx的DMA请求 设置TIMx内部时钟 设置TIMx内部触发为外部时钟模式 设置TIMx触发为外部时钟 配置TIMx外部时钟模式1 配置TIMx外部时钟模式2 配置TIMx外部触发 选择TIMx输入触发源 设置TIMx预分频 设置TIMx计数器模式 置TIMx输出1为活动 或 非活动电平 置TIMx输出2为活动 或 非活动电平 置TIMx输出3为活动 或 非活动电平 置TIMx输出4为活动 或 非活动电平 使能或者失能TIMx在ARR上的预装载寄存器 选择TIMx外设的捕获比较DMA源 使能或失能TIMx在CCR1上的预装载寄存器 使能或失能TIMx在CCR2上的预装载寄存器 使能或失能TIMx在CCR3上的预装载寄存器 使能或失能TIMx在CCR4上的预装载寄存器 设置TIMx捕获比较1快速特征 设置TIMx捕获比较2快速特征 设置TIMx捕获比较3快速特征 设置TIMx捕获比较4快速特征 在一个外部事件时清除或保持OCREF1信号 在一个外部事件时清除或保持OCREF2信号 在一个外部事件时清除或保持OCREF3信号 在一个外部事件时清除或保持OCREF4信号 使能或者失能TIMx更新事件 设置TIMx编码界面 设置TIMx事件由软件产生 设置TIMx通道1极性 设置TIMx通道2极性 设置TIMx通道3极性 设置TIMx通道4极性 设置TIMx更新请求源 使能或者失能TIMx霍尔传感器接口 设置TIMx单脉冲模式 选择TIMx触发输出模式 选择TIMx从模式 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 TIM_SelectMasterSlaveMode TIM_SetCounter TIM_SetAutoreload TIM_SetCompare1 TIM_SetCompare2 TIM_SetCompare3 TIM_SetCompare4 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler TIM_SetIC4Prescaler TIM_SetClockDivision TIM_GetCapture1 TIM_GetCapture2 TIM_GetCapture3 TIM_GetCapture4 TIM_GetCounter TIM_GetPrescaler TIM_GetFlagStatus TIM_ClearFlag TIM_GetITStatus TIM_ClearITPendingBit 设置或者重置TIMx主/从模式 设置TIMx计数器寄存器值 设置TIMx自动重装载寄存器值 设置TIMx捕获比较1寄存器值 设置TIMx捕获比较2寄存器值 设置TIMx捕获比较3寄存器值 设置TIMx捕获比较4寄存器值 设置TIMx输入捕获1预分频 设置TIMx输入捕获2预分频 设置TIMx输入捕获3预分频 设置TIMx输入捕获4预分频 设置TIMx的时钟分割值 获得TIMx输入捕获1的值 获得TIMx输入捕获2的值 获得TIMx输入捕获3的值 获得TIMx输入捕获4的值 获得TIMx计数器的值 获得TIMx预分频值 检查指定的TIM标志位设置与否 清除TIMx的待处理标志位 检查指定的TIM中断发生与否 清除TIMx的中断待处理位 19 通用定时器(TIM)

通用定时器是一个通过可编程预分频器驱动的16 位自动装载计数器构成。 它适用于多种场合,包括测量

输入信号的脉冲长度(输入采集)或者产生输出波形(输出比较和PWM)。 使用定时器预分频器和RCC 时钟控制器预分频器,脉冲长度和波形周期可以在 几个微秒到几个毫秒间调整。

Section 19.1 TIM寄存器结构描述了固件函数库所使用的数据结构,Section 19.2 固件库函数介绍了函数库里的所有函数。

19.1 TIM寄存器结构

TIM 寄存器结构,TIM_TypeDeff,在文件“stm2f10x_map.h”中定义如下:

typedef struct {

vu16 CR1;

u16 RESERVED0; vu16 CR2;

u16 RESERVED1; vu16 SMCR;

u16 RESERVED2; vu16 DIER;

u16 RESERVED3; vu16 SR;

u16 RESERVED4; vu16 EGR;

u16 RESERVED5; vu16 CCMR1; u16 RESERVED6; vu16 CCMR2; u16 RESERVED7; vu16 CCER;

u16 RESERVED8; vu16 CNT;

u16 RESERVED9; vu16 PSC;

u16 RESERVED10; vu16 ARR;

u16 RESERVED11[3]; vu16 CCR1;

u16 RESERVED12; vu16 CCR2;

u16 RESERVED13; vu16 CCR3;

u16 RESERVED14; vu16 CCR4;

u16 RESERVED15[3]; vu16 DCR;

u16 RESERVED16; vu16 DMAR;

u16 RESERVED17; }TIM_TypeDef;

Table 457.例举了TIM所有寄存器 No 寄存器 描述 1 CR1 控制寄存器1 2 CR2 控制寄存器2 3 SMCR 从模式控制寄存器 4 DIER DMA/中断使能寄存器 5 SR 状态寄存器 6 EGR 事件产生寄存器 7 CCMR1 捕获/比较模式寄存器1 8 CCMR2 捕获/比较模式寄存器2 9 CCER 捕获/比较使能寄存器 10 CNT 计数器寄存器 11 PSC 预分频寄存器 12 APR 自动重装载寄存器 13 CCR1 捕获/比较寄存器1 14 CCR2 捕获/比较寄存器2 15 CCR3 捕获/比较寄存器3 16 CCR4 捕获/比较寄存器4 17 DCR DMA控制寄存器 18 DMAR 连续模式的DMA地址寄存器 三个 TIM 外设声明于文件: ...

#define PERIPH_BASE ((u32)0x40000000) #define APB1PERIPH_BASE PERIPH_BASE

#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) #define TIM2_BASE (APB1PERIPH_BASE + 0x0000) #define TIM3_BASE (APB1PERIPH_BASE + 0x0400) #define TIM4_BASE (APB1PERIPH_BASE + 0x0800) ...

#ifndef DEBUG ...

#ifdef _TIM2

#define TIM2 ((TIM_TypeDef *) TIM2_BASE) #endif /*_TIM2 */ #ifdef _TIM3

#define TIM3 ((TIM_TypeDef *) TIM3_BASE) #endif /*_TIM3 */ #ifdef _TIM4

#define TIM4 ((TIM_TypeDef *) TIM4_BASE) #endif /*_TIM4 */ ...

#else /* DEBUG */ ...

#ifdef _TIM2

EXT TIM_TypeDef *TIM2; #endif /*_TIM2 */ #ifdef _TIM3

EXT TIM_TypeDef *TIM3; #endif /*_TIM3 */ #ifdef _TIM4

EXT TIM_TypeDef *TIM4; #endif /*_TIM4 */ ... #endif

使用Debug模式时,初始化指针TIM2, TIM3和TIM4于文件“st32f10x_lib.c”:

...

#ifdef _TIM2

TIM2 = (TIM_TypeDef *) TIM2_BASE; #endif /*_TIM2 */ #ifdef _TIM3

TIM3 = (TIM_TypeDef *) TIM3_BASE; #endif /*_TIM3 */ #ifdef _TIM4

TIM4 = (TIM_TypeDef *) TIM4_BASE; #endif /*_TIM4 */ ...

为了访问 TIM 寄存器,, _TIM,_TIM2, _TIM3和_TIM4 必须在文件“stm2f10x_conf.h”中定义如下:

...

#define _TIM #define _TIM2 #define _TIM3 #define _TIM4 ...

19.2 TIM库函数

Table 458. TIM库函数 【见首页】

19.2.1 函数TIM_DeInit

Table 459.函数TIM_DeInit 函数名 TIM_DeInit 函数原形 void TIM_DeInit(TIM_TypeDef* TIMx) 功能描述 将外设TIMx寄存器重设为缺省值 输入参数 TIMx:x可以是 2,3,4,来选择TIM外设 输出参数 无 返回值 无 先决条件 无 RCC_APB1PeriphResetCmd() 被调用函数 RCC_APB2PeriphResetCmd()—T1/T8 例: /* Resets the TIM2 */ TIM_DeInit(TIM2);

函数原型如下:

void TIM_DeInit(TIM_TypeDef* TIMx) {

/* Check the parameters */

assert_param(IS_TIM_ALL_PERIPH(TIMx));

//#define IS_TIM_ALL_PERIPH(PERIPH) (((*(u32*)&(PERIPH)) == TIM1_BASE) || ((*(u32*)&(PERIPH)) == TIM2_BASE) || \\ // ((*(u32*)&(PERIPH)) == TIM3_BASE) || ((*(u32*)&(PERIPH)) == TIM4_BASE) || \\ // ((*(u32*)&(PERIPH)) == TIM5_BASE) || ((*(u32*)&(PERIPH)) == TIM6_BASE) || \\ // ((*(u32*)&(PERIPH)) == TIM7_BASE) || ((*(u32*)&(PERIPH)) == TIM8_BASE)) //TIMx_BASE值定义略。

switch (*(u32*)&TIMx) {

case TIM1_BASE:

RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE);//T1/T8在APB2中,T2-7在APB1中 RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); //先置1,再清0 break;

//void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState); //TIMx复位在RCC_APB2RSTR和RCC_APB1RSTR中 No 1 2 3 4 5 6 u32 RCC_APB2Periph定义如下: RCC_ APB2 RSTR寄存器定义 定义值 #define RCC_APB2Periph_AFIO -- #define RCC_APB2Periph_GPIOA #define RCC_APB2Periph_GPIOB #define RCC_APB2Periph_GPIOC #define RCC_APB2Periph_GPIOD ((u32)0x00000001) -- ((u32)0x00000004) ((u32)0x00000008) ((u32)0x00000010) ((u32)0x00000020) 在APB2 RSTR中的位置 bit0 (保留位) bit2 bit3 bit4 bit5 7 8 9 10 11 12 13 14 15 16 17 #define RCC_APB2Periph_GPIOE #define RCC_APB2Periph_GPIOF #define RCC_APB2Periph_GPIOG #define RCC_APB2Periph_ADC1 #define RCC_APB2Periph_ADC2 #define RCC_APB2Periph_TIM1 #define RCC_APB2Periph_SPI1 #define RCC_APB2Periph_TIM8 #define RCC_APB2Periph_USART1 #define RCC_APB2Periph_ADC3 #define RCC_APB2Periph_ALL ((u32)0x00000040) ((u32)0x00000080) ((u32)0x00000100) ((u32)0x00000200) ((u32)0x00000400) ((u32)0x00000800) ((u32)0x00001000) ((u32)0x00002000) ((u32)0x00004000) ((u32)0x00008000) ((u32)0x0000FFFD) bit6 bit7 bit8 bit9 bit10 bit11 bit12 bit13 bit14 bit15 (全开通以上各位) //void RCC_APB2PeriphResetCmd(u32 RCC_APB2Periph, FunctionalState NewState); /*【2】

void RCC_APB2PeriphResetCmd(u32 RCC_APB2Periph, FunctionalState NewState) {

/* Check the parameters */

assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE) { RCC->APB2RSTR |= RCC_APB2Periph; } else { RCC->APB2RSTR &= ~RCC_APB2Periph; } } */

case TIM2_BASE:

RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE); break;

/*TIMx在APB1RSTR中的复位位如下: No 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 u32 RCC_APB1Periph定义如下: RCC_ APB1 RSTR寄存器定义 定义值 #define RCC_APB1Periph_TIM2 #define RCC_APB1Periph_TIM3 #define RCC_APB1Periph_TIM4 #define RCC_APB1Periph_TIM5 #define RCC_APB1Periph_TIM6 #define RCC_APB1Periph_TIM7 #define RCC_APB1Periph_WWDG #define RCC_APB1Periph_SPI2 #define RCC_APB1Periph_SPI3 #define RCC_APB1Periph_USART2 #define RCC_APB1Periph_USART3 #define RCC_APB1Periph_UART4 #define RCC_APB1Periph_UART5 #define RCC_APB1Periph_I2C1 #define RCC_APB1Periph_I2C2 #define RCC_APB1Periph_USB #define RCC_APB1Periph_CAN #define RCC_APB1Periph_BKP #define RCC_APB1Periph_PWR #define RCC_APB1Periph_DAC #define RCC_APB1Periph_ALL ((u32)0x00000001) ((u32)0x00000002) ((u32)0x00000004) ((u32)0x00000008) ((u32)0x00000010) ((u32)0x00000020) ((u32)0x00000800) ((u32)0x00004000) ((u32)0x00008000) ((u32)0x00020000) ((u32)0x00040000) ((u32)0x00080000) ((u32)0x00100000) ((u32)0x00200000) ((u32)0x00400000) ((u32)0x00800000) ((u32)0x02000000) ((u32)0x08000000) ((u32)0x10000000) ((u32)0x20000000) ((u32)0x3AFEC83F) 在APB2 RSTR中的位置 bit0 bit1 bit2 bit3 bit4 bit5 bit11 bit14 bit15 bit17 bit18 bit19 bit20 bit21 bit22 bit23 bit25 bit27 bit28 bit29 (全开通以上各位) */ /*【1】

void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState) {

/* Check the parameters */

assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE) { RCC->APB1RSTR |= RCC_APB1Periph; }

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

TIM_DMABurstLength_9Bytes TIM_DMABurstLength_10Bytes TIM_DMABurstLength_11Bytes TIM_DMABurstLength_12Bytes TIM_DMABurstLength_13Bytes TIM_DMABurstLength_14Bytes TIM_DMABurstLength_15Bytes TIM_DMABurstLength_16Bytes TIM_DMABurstLength_17Bytes TIM_DMABurstLength_18Bytes TIM DMA连续传送长度9字 TIM DMA连续传送长度10字 TIM DMA连续传送长度11字 TIM DMA连续传送长度12字 TIM DMA连续传送长度13字 TIM DMA连续传送长度14字 TIM DMA连续传送长度15字 TIM DMA连续传送长度16字 TIM DMA连续传送长度17字 TIM DMA连续传送长度18字 0x0800 0x0900 0x0A00 0x0B00 0x0C00 0x0D00 0x0E00 0x0F00 0x1000 0x1100 例:

/* Configures the TIM2 DMA Interface to transfer 1 byte and to use the CCR1 as base address */

TIM_DMAConfig(TIM2, TIM_DMABase_CCR1, TIM_DMABurstLength_1Byte) 函数原型如下:

void TIM_DMAConfig(TIM_TypeDef* TIMx, u16 TIM_DMABase, u16 TIM_DMABurstLength) {

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx)); assert_param(IS_TIM_DMA_BASE(TIM_DMABase));

assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength));

/* Set the DMA Base and the DMA Burst Length */ TIMx->DCR = TIM_DMABase | TIM_DMABurstLength; }

19.2.11 函数TIM_DMACmd

Table 485. 函数TIM_DMACmd 函数名 TIM_DMACmd void TIM_DMACmd(TIM_TypeDef* TIMx, u16 TIM_DMASource, 函数原形 FunctionalState Newstate) 功能描述 使能或者失能指定的TIMx的DMA请求 输入参数1 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_DMASource:待使能或者失能的TIM中断源 NewState:DMA请求的新状态 输入参数3 这个参数可以取:ENABLE或DISABLE 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_DMASource :输入参数TIM_DMASource使能或者失能TIM的中断。可以取下表的值。 Table 486. TIM_DMASource值 参数TIM_DMASource值 TIM_DMA_Update TIM_DMA_CC1 TIM_DMA_CC2 TIM_DMA_CC3 TIM_DMA_CC4 TIM_DMA_COM TIM_DMA_Trigger 描述/DIER TIM更新DMA源允许 TIM捕获/比较1DMA源允许 TIM捕获/比较2DMA源允许 TIM捕获/比较3DMA源允许 TIM捕获/比较4DMA源请求 TIM COM的DMA请求源允许 TIM触发DMA源允许 #define值 位置 0x0100 0x0200 0x0400 0x0800 0x1000 0x2000 0x4000 bit8 bit9 bit10 bit11 bit12 bit13 bit14 例:

/* TIM2 Capture Compare 1 DMA Request Configuration */ TIM_DMACmd(TIM2, TIM_DMA_CC1, ENABLE); 函数原型如下:

void TIM_DMACmd(TIM_TypeDef* TIMx, u16 TIM_DMASource, FunctionalState NewState) {

/* Check the parameters */

assert_param(IS_TIM_ALL_PERIPH(TIMx));

assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource));

assert_param(IS_TIM_PERIPH_DMA(TIMx, TIM_DMASource)); assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE) {

/* Enable the DMA sources */ TIMx->DIER |= TIM_DMASource; } else {

/* Disable the DMA sources */

TIMx->DIER &= (u16)~TIM_DMASource; } }

19.2.12 函数TIM_InternalClockConfig

Table 487. 函数TIM_InternalClockConfig 函数名 TIM_InternalClockConfig void TIM_DMACmd(TIM_TypeDef* TIMx, u16 TIM_DMASource, 函数原形 FunctionalState Newstate) 功能描述 设置TIMx内部时钟 输入参数 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 输出参数 无 返回值 无 先决条件 无 被调用函数 无 例: /* Selects the internal clock for TIM2 */ TIM_InternalClockConfig(TIM2); 函数原型如下:

void TIM_InternalClockConfig(TIM_TypeDef* TIMx) {

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

/* Disable slave mode to clock the prescaler directly with the internal clock */ TIMx->SMCR &= SMCR_SMS_Mask;

// #define SMCR_SMS_Mask ((u16)0xFFF8)//0b000:关闭从模式:预分频器直接由内部时钟驱动 }

19.2.13 函数TIM_ITRxExternalClockConfig

Table 488. 函数TIM_ITRxExternalClockConfig 函数名 TIM_ITRxExternalClockConfig void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, u16 函数原形 TIM_InputTriggerSource) 功能描述 设置TIMx内部触发为外部时钟模式 输入参数1 TIMx:x可以是2,3,4,来选择TIM外设 输入参数2 TIM_InputTriggerSource:输入触发源 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_InputTriggerSource:选择TIM输入触发。见Table 489. 参阅该参数的取值。 Table 489. TIM_InputTriggerSource值 TIM_InputTriggerSource 描述/SMCR.bit6-4 #define值 TIM_TS_ITR0 TIM内部触发0 0x0000 TIM_TS_ITR1 TIM内部触发1 0x0010 内部触发输入 TIM_TS_ITR2 TIM内部触发2 0x0020 TIM_TS_ITR3 TIM内部触发3 0x0030 TIM_TS_TI1F_ED TI1边缘检测 0x0040 TI1边缘检测 TIM_TS_TI1FP1 TI1滤波分频 0x0050 TI1滤波分频 TIM_TS_TI2FP2 TIM_TS_ETRF 例: TI2滤波分频 外部触发输入 0x0060 0x0070 TI2滤波分频 外部触发输入 /* TIM2 internal trigger 3 used as clock source */ TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR3); 函数原型如下:

void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, u16 TIM_InputTriggerSource) {

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource));

/* Select the Internal Trigger */

TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource);

/*

void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, u16 TIM_InputTriggerSource) {

u16 tmpsmcr = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource));

/* Get the TIMx SMCR register value */ tmpsmcr = TIMx->SMCR;

/* Reset the TS Bits */

tmpsmcr &= SMCR_TS_Mask;// #define SMCR_TS_Mask ((u16)0xFF8F)

/* Set the Input Trigger source */ tmpsmcr |= TIM_InputTriggerSource;

/* Write to TIMx SMCR */ TIMx->SMCR = tmpsmcr; } */

/* Select the External clock mode1 */

TIMx->SMCR |= TIM_SlaveMode_External1;// #define TIM_SlaveMode_External1 ((u16)0x0007) 参数TIM_SlaveMode的定义 #define值 SMCR.SMS[2:0]/bit2-0 TIM_SlaveMode_Reset ((u16)0x0004) 复位模式 TIM_SlaveMode_Gated ((u16)0x0005) 门控模式 TIM_SlaveMode_Trigger ((u16)0x0006) 触发模式 TIM_SlaveMode_External1 ((u16)0x0007) 外部时钟模式1 }

19.2.14 函数TIM_TIxExternalClockConfig

Table 490. 函数TIM_TIxExternalClockConfig 函数名 TIM_TIxExternalClockConfig void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, u16 函数原形 TIM_TIxExternalCLKSource, u8 TIM_ICPolarity, u8 ICFilter) 功能描述 设置TIMx触发为外部时钟 输入参数1 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_ TIxExternalCLKSource:触发源 输入参数3 TIM_ ICPolarity:指定的 TI极性 输入参数4 ICFilter:指定的输入比较滤波器。数取值在 0x0-0xF之间。 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_TIxExternalCLKSource:选择TIMx外部时钟源。见Table 491. 参阅该参数的取值。 Table 491. TIM_TIxExternalCLKSource值 TIM_TIxExternalCLKSource 描述 #define值 TIM_TS_TI1FP1 TIM IC1连接到TI1 0x0050 TIM_TS_TI2FP2 TIM IC2连接到TI2 0x0060 TIM_TS_TI1F_ED TIM IC1连接到TI1:使用边沿探测 0x0040 例: /* Selects the TI1 as clock for TIM2: the external clock is connected to TI1 input pin, the rising edge is the active edge and no filter sampling is done (ICFilter = 0) */

TIM_TIxExternalClockConfig(TIM2, TIM_TS_TI1FP1, TIM_ICPolarity_Rising, 0); 函数原型如下:

void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, u16 TIM_TIxExternalCLKSource, u16 TIM_ICPolarity, u16 ICFilter) {

/* Check the parameters */

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));

/* Configure the Timer Input Clock Source */

if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2)

#define 的 TIM_TIxExternalCLKSource 值定义 备注/SMCR.TS[2:0]/bit6-4 TIM_TIxExternalCLK1Source_TI1 ((u16)0x0050) TIM IC1连接到TI1 TIM_TIxExternalCLK1Source_TI2 ((u16)0x0060) TIM IC2连接到TI2 TIM_TIxExternalCLK1Source_TI1ED ((u16)0x0040) TIM IC1连接到TI1:使用边沿探测 {

TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); } else {

TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); }

/* Select the Trigger source */

TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource);

/* Select the External clock mode1 */ TIMx->SMCR |= TIM_SlaveMode_External1; 参数TIM_SlaveMode的定义 #define值 SMCR.SMS[2:0]/bit2-0 TIM_SlaveMode_Reset ((u16)0x0004) 复位模式 TIM_SlaveMode_Gated ((u16)0x0005) 门控模式 TIM_SlaveMode_Trigger ((u16)0x0006) 触发模式 TIM_SlaveMode_External1 ((u16)0x0007) 外部时钟模式1 }

/*TI2_Config函数定义如下:

static void TI2_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection, u16 TIM_ICFilter) {

u16 tmpccmr1 = 0, tmpccer = 0, tmp = 0;

/* Disable the Channel 2: Reset the CC2E Bit */ TIMx->CCER &= CCER_CC2E_Reset;

tmpccmr1 = TIMx->CCMR1; tmpccer = TIMx->CCER;

tmp = (u16)(TIM_ICPolarity << 4);

/* Select the Input and set the filter */

tmpccmr1 &= CCMR_CC24S_Mask & CCMR_IC24F_Mask; tmpccmr1 |= (u16)(TIM_ICFilter << 12); tmpccmr1 |= (u16)(TIM_ICSelection << 8);

/* Select the Polarity and set the CC2E Bit */ tmpccer &= CCER_CC2P_Reset;

tmpccer |= tmp | CCER_CC2E_Set;

/* Write to TIMx CCMR1 and CCER registers */ TIMx->CCMR1 = tmpccmr1 ; TIMx->CCER = tmpccer; } */

/* TI1_Config函数定义如下:

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;

tmpccmr1 = TIMx->CCMR1; tmpccer = TIMx->CCER;

/* Select the Input and set the filter */

tmpccmr1 &= CCMR_CC13S_Mask & CCMR_IC13F_Mask;

tmpccmr1 |= TIM_ICSelection | (u16)(TIM_ICFilter << 4);

/* Select the Polarity and set the CC1E Bit */ tmpccer &= CCER_CC1P_Reset;

tmpccer |= TIM_ICPolarity | CCER_CC1E_Set;

/* Write to TIMx CCMR1 and CCER registers */ TIMx->CCMR1 = tmpccmr1; TIMx->CCER = tmpccer;

} */

19.2.15 函数TIM_ETRClockMode1Config

Table 492. 函数TIM_ETRClockMode1Config 函数名 TIM_ETRClockMode1Config void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, 函数原形 u16 TIM_ExtTRGPolarity, u16 ExtTRGFilter) 功能描述 配置TIMx外部时钟模式1 输入参数1 TIMx:x可以是2,3 ,4,来选择TIM外设 输入参数2 TIM_ExtTRGPrescaler:外部触发预分频 输入参数3 TIM_ExtTRGPolarity:外部时钟极性 输入参数4 ExtTRGFilter:外部触发滤波器。取值在0x0-0xF之间。 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_ExtTRGPrescaler :设置TIMx外部触发预分频。见Table 493. 参阅该参数的取值。 Table 493. TIM_ExtTRGPrescaler值 TIM_ExtTRGPrescaler 描述/SMCR. ETPS[1:0] #define值 备注 TIM_ExtTRGPSC_OFF TIM ETRP预分频 OFF 0x0000 TIM_ExtTRGPSC_DIV2 TIM ETRP频率/2 0x1000 bit13-12 TIM_ExtTRGPSC_DIV4 TIM ETRP频率/4 0x2000 TIM_ExtTRGPSC_DIV8 TIM ETRP频率/8 0x3000 TIM_ExtTRGPolarity:设置TIMx外部触发极性。见Table 494. 参阅该参数的取值。 Table 494. TIM_ExtTRGPolarity值 TIM_ExtTRGPolarity 描述/SMCR.ETP/bit15 #define值 TIM_ExtTRGPolarity_Inverted TIM外部触发极性翻转:低电平或下降沿有效 0x8000 TIM_ExtTRGPolarity_NonInverted TIM外部触发极性非翻转:高电平或上升沿有效 0x0000 例:

/* Selects the external clock Mode 1 for TIM2: the external clock is connected to ETR input pin, the rising edge is the active edge, no filter sampling is done (ExtTRGFilter = 0) and the prescaler is fixed to TIM_ExtTRGPSC_DIV2 */

TIM_ExternalCLK1Config(TIM2, TIM_ExtTRGPSC_DIV2, TIM_ExtTRGPolarity_NonInverted, 0x0); 函数原型如下:

void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, u16 TIM_ExtTRGPolarity, u16 ExtTRGFilter) {

u16 tmpsmcr = 0;

/* Check the parameters */

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));

/* Configure the ETR Clock source */

TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);

/* Get the TIMx SMCR register value */ tmpsmcr = TIMx->SMCR;

/* Reset the SMS Bits */

tmpsmcr &= SMCR_SMS_Mask;//=0xFFF8-清除

/* Select the External clock mode1 */

tmpsmcr |= TIM_SlaveMode_External1;//0x0007—设置模式1

/* Select the Trigger selection : ETRF */ tmpsmcr &= SMCR_TS_Mask;//bit6-4

tmpsmcr |= TIM_TS_ETRF;// #define TIM_TS_ETRF ((u16)0x0070) //滤波分频

/* Write to TIMx SMCR */ TIMx->SMCR = tmpsmcr; }

19.2.16 函数TIM_ETRClockMode2Config

Table 495. 函数TIM_ETRClockMode2Config

例:

/* Forces the TIM2 Output Compare 3 signal to the active level */ TIM_ForcedOC3Config(TIM2, TIM_ForcedAction_Active); 函数原型如下:

void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, u16 TIM_ForcedAction) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));

tmpccmr2 = TIMx->CCMR2;

/* Reset the OC1M Bits */

tmpccmr2 &= CCMR_OC13M_Mask;//CCMR2.bit6-4

/* Configure The Forced output Mode */

tmpccmr2 |= TIM_ForcedAction;//无效电平?高电平?

/* Write to TIMx CCMR2 register */ TIMx->CCMR2 = tmpccmr2; }

19.2.24 函数TIM_ForcedOC4Config

Table 506. 函数 TIM_ForcedOC4Config 函数名 TIM_ForcedOC4Config 函数原形 void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, u16 TIM_ForcedAction) 功能描述 置TIMx输出4为活动或非活动电平 输入参数1 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_ForcedAction:输出信号的设置动作 参阅Section:TIM_ForcedAction查阅更多该参数允许取值范围 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_ForcedAction:输出信号的动作设置。【同TIM_ForcedOC1Config】 参数TIM_ForcedAction值 描述/CCMR. OCyM[2:0]/bit #define值 备注 TIM_ForcedAction_Active 置为OCxREF上的活动电平 0x0050 强制高电平 TIM_ForcedAction_InActive 置为OCxREF上的非活动电平 0x0040 强制低电平[无效] 例: /* Forces the TIM2 Output Compare 4 signal to the active level */ TIM_ForcedOC4Config(TIM2, TIM_ForcedAction_Active); 函数原型如下:

void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, u16 TIM_ForcedAction) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); tmpccmr2 = TIMx->CCMR2;

/* Reset the OC2M Bits */

tmpccmr2 &= CCMR_OC24M_Mask;//0x8FFF,CCMR2

/* Configure The Forced output Mode */

tmpccmr2 |= (u16)(TIM_ForcedAction << 8);//OC4再OC3的高8位处

/* Write to TIMx CCMR2 register */ TIMx->CCMR2 = tmpccmr2; }

19.2.25 函数TIM_ARRPreloadConfig

Table 507. 函数TIM_ARRPreloadConfig 函数名 TIM_ARRPreloadConfig 函数原形 功能描述 输入参数 1 输入参数 2 输出参数 返回值 先决条件 被调用函数

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState Newstate) 使能或失能TIMx在ARR上的预装载寄存器 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 NewState: TIM_CR1寄存器ARPE位的新状态 无 无 无 无 例:

/* Enables the TIM2 Preload on ARR Register */ TIM_ARRPreloadConfig(TIM2, ENABLE); 函数原型如下:

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState) {

/* Check the parameters */

assert_param(IS_TIM_ALL_PERIPH(TIMx));

assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE) {

/* Set the ARR Preload Bit */

TIMx->CR1 |= CR1_ARPE_Set;//=0x0080 } else {

/* Reset the ARR Preload Bit */

TIMx->CR1 &= CR1_ARPE_Reset;//=0x037F(bit15-10保留,保持为0) } }

19.2.26 函数TIM_SelectCCDMA

Table 508. 函数TIM_SelectCCDMA 函数名 TIM_SelectCCDMA 函数原形 void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState Newstate) 功能描述 选择TIMx外设的捕获/比较DMA源 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 NewState: 捕获比较DMA源的新状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 例:

/* Selects the TIM2 Capture Compare DMA source */ TIM_SelectCCDMA(TIM2, ENABLE); 函数原型如下:

void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState) {

/* Check the parameters */

assert_param(IS_TIM_18_PERIPH(TIMx));//???T2-5都有CR2 assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE) {

/* Set the COM Bit *///(若CCUS是预装载的(CCPC=1),可以通过设置COM位或TRGI上的一个上升沿更新它们) TIMx->CR2 |= CR2_CCUS_Set; //#define CR2_CCUS_Set ((u16)0x0004)//CR2.bit3=CCUS } else {

/* Reset the COM Bit *///若CCUS是预装载的(CCPC=1),只能通过设置COM位更新它们 TIMx->CR2 &= CR2_CCUS_Reset; //#define CR2_CCUS_Reset ((u16)0xFFFB) } }

19.2.27 函数TIM_OC1PreloadConfig

Table 509. 函数TIM_OC1PreloadConfig 函数名 TIM_OC1PreloadConfig 函数原形 void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) 功能描述 使能或失能TIMx在CCR1上的预装载寄存器 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCPreload:输出比较预装载状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPreload :输出比较预装载状态可以使能或者失能如下表。 Table 510. TIM_OCPreload值 参数TIM_OCPreload值 描述/CCMR1.OCyPE/bit3 #define值 TIM_OCPreload_Enable TIMx在CCR1上的预装载寄存器使能 0x0008 TIM_OCPreload_Disable TIMx在CCR1上的预装载寄存器失能 0x0000 例:

/* Enables the TIM2 Preload on CC1 Register */

TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); 函数原型如下:

void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) {

u16 tmpccmr1 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));

tmpccmr1 = TIMx->CCMR1;

/* Reset the OC1PE Bit */

tmpccmr1 &= CCMR_OC13PE_Reset;//0xFFF7,bit3

/* Enable or Disable the Output Compare Preload feature */ tmpccmr1 |= TIM_OCPreload;

/* Write to TIMx CCMR1 register */ TIMx->CCMR1 = tmpccmr1; }

19.2.28 函数TIM_OC2PreloadConfig

Table 511. 函数TIM_OC2PreloadConfig 函数名 TIM_OC2PreloadConfig 函数原形 void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) 功能描述 使能或失能TIMx在CCR2上的预装载寄存器 输入参数 1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数 2 TIM_OCPreload:输出比较 预载状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPreload:输出比较 预载状态【同TIM_OC1PreloadConfig】 参数TIM_OCPreload值 描述/CCMR1.OCyPE/bit3 #define值 TIM_OCPreload_Enable TIMx在CCR1上的预装载寄存器使能 0x0008 TIM_OCPreload_Disable TIMx在CCR1上的预装载寄存器失能 0x0000 例: /* Enables the TIM2 Preload on CC2 Register */ TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); 函数原型如下:

void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) {

u16 tmpccmr1 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));

tmpccmr1 = TIMx->CCMR1;

/* Reset the OC2PE Bit */

tmpccmr1 &= CCMR_OC24PE_Reset;//bit11,0xF7FF

/* Enable or Disable the Output Compare Preload feature */

tmpccmr1 |= (u16)(TIM_OCPreload << 8);//CCMR1_OC2PE 比 CCMR1_OC1PE高8位

/* Write to TIMx CCMR1 register */ TIMx->CCMR1 = tmpccmr1; }

19.2.29 函数TIM_OC3PreloadConfig

Table 512. 函数TIM_OC3PreloadConfig 函数名 TIM_OC3PreloadConfig 函数原形 void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) 功能描述 使能或失能 TIMx在CCR3上的预装载寄存器 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCPreload:输出比较预装载状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPreload:输出比较 预载状态【同TIM_OC1PreloadConfig】 参数TIM_OCPreload值 描述/CCMR1.OCyPE/bit3 #define值 TIM_OCPreload_Enable TIMx在CCR1上的预装载寄存器使能 0x0008 TIM_OCPreload_Disable TIMx在CCR1上的预装载寄存器失能 0x0000 例:

/* Enables the TIM2 Preload on CC3 Register */ TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); 函数原型如下:

void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));

tmpccmr2 = TIMx->CCMR2;

/* Reset the OC3PE Bit */

tmpccmr2 &= CCMR_OC13PE_Reset;//0xFFF7,CCMR2

/* Enable or Disable the Output Compare Preload feature */ tmpccmr2 |= TIM_OCPreload;

/* Write to TIMx CCMR2 register */ TIMx->CCMR2 = tmpccmr2; }

19.2.30 函数TIM_OC4PreloadConfig

Table 513. 函数TIM_OC4PreloadConfig 函数名 TIM_OC4PreloadConfig 函数原形 void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) 功能描述 使能或者失能TIMx在CCR4上的预装载寄存器 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 TIM_OCPreload:输出比较预装载状态 输入参数2 参阅Section:TIM_OCPreload查阅更多该参数允许取值范围 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPreload:输出比较 预载状态【同TIM_OC1PreloadConfig】 参数TIM_OCPreload值 描述/CCMR1.OCyPE/bit3 TIM_OCPreload_Enable TIMx在CCR1上的预装载寄存器使能 TIM_OCPreload_Disable TIMx在CCR1上的预装载寄存器失能 例:

/* Enables the TIM2 Preload on CC4 Register */ TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); 函数原型如下:

void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));

tmpccmr2 = TIMx->CCMR2;

/* Reset the OC4PE Bit */

tmpccmr2 &= CCMR_OC24PE_Reset;//CCMR2,0xF7FF

/* Enable or Disable the Output Compare Preload feature */

tmpccmr2 |= (u16)(TIM_OCPreload << 8); //CCMR_OC4PE比 CCMR_OC3PE高8位

/* Write to TIMx CCMR2 register */ TIMx->CCMR2 = tmpccmr2; }

#define值 0x0008 0x0000 19.2.31 函数TIM_OC1FastConfig

Table 514. 函数TIM_OC1FastConfig 函数名 TIM_OC1FastConfig 函数原形 void TIM_OC1FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) 功能描述 设置TIMx捕获比较1快速特征 输入参数 1 TIMx:x 可以是1,2,3,4,5,8,来选择TIM外设 输入参数 2 TIM_OCFast:输出比较快速特征状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCFast :输出比较快速特征性能可以使能或者失能。 TIM_OCFast 描述 #define值 TIM_OCFast_Enable TIMx输出比较快速特征性能使能 0x0004 TIM_OCFast_Disable TIMx输出比较快速特征性能失能 0x0000 例:

/* Use the TIM2 OC1 in fast Mode */

TIM_OC1FastConfig(TIM2, TIM_OCFast_Enable); 函数原型如下:

void TIM_OC1FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) {

u16 tmpccmr1 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));

/* Get the TIMx CCMR1 register value */ tmpccmr1 = TIMx->CCMR1;

/* Reset the OC1FE Bit */

tmpccmr1 &= CCMR_OC13FE_Reset;//0xFFFB,CCMR1.bit2// =1时,OCFE只在通道被配置成PWM1或PWM2模式时起作用

/* Enable or Disable the Output Compare Fast Bit */

tmpccmr1 |= TIM_OCFast;

/* Write to TIMx CCMR1 */ TIMx->CCMR1 = tmpccmr1; }

19.2.32 函数TIM_OC2FastConfig

Table 516. 函数TIM_OC2FastConfig 函数名 TIM_OC2FastConfig 函数原形 void TIM_OC2FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) 功能描述 设置TIMx捕获比较2快速特征 输入参数 1 TIMx:x 可以是1,2,3,4,5,8,来选择TIM外设 输入参数 2 TIM_OCFast:输出比较快速特征状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCFast :输出比较快速特征性能可以使能或者失能。【同TIM_OC1FastConfig】 TIM_OCFast 描述/CCMR1.OC1FE/bit2 #define值 TIM_OCFast_Enable TIMx输出比较快速特征性能使能 0x0004 TIM_OCFast_Disable TIMx输出比较快速特征性能失能 0x0000 例:

/* Use the TIM2 OC2 in fast Mode */

TIM_OC2FastConfig(TIM2, TIM_OCFast_Enable); 函数原型如下:

void TIM_OC2FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) {

u16 tmpccmr1 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));

/* Get the TIMx CCMR1 register value */ tmpccmr1 = TIMx->CCMR1;

/* Reset the OC2FE Bit */

tmpccmr1 &= CCMR_OC24FE_Reset;//CCMR1.bit10//0xFBFF// =1时,OCFE只在通道被配置成PWM1或PWM2模式时起作用

/* Enable or Disable the Output Compare Fast Bit */

tmpccmr1 |= (u16)(TIM_OCFast << 8);// CCMR1.OC2FE比CCMR1.OC1FE高8位

/* Write to TIMx CCMR1 */ TIMx->CCMR1 = tmpccmr1; }

19.2.33 函数TIM_OC3FastConfig

Table 517. 函数TIM_OC3FastConfig 函数名 TIM_OC3FastConfig 函数原形 void TIM_OC3FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) 功能描述 设置TIMx捕获比较3快速特征 输入参数 1 TIMx:x 可以是1,2,3,4,5,8,来选择TIM外设 输入参数 2 TIM_OCFast:输出比较快速特征状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCFast :输出比较快速特征性能可以使能或者失能。【同TIM_OC1FastConfig】 TIM_OCFast 描述/CCMR1.OC1FE/bit2 #define值 TIM_OCFast_Enable TIMx输出比较快速特征性能使能 0x0004 TIM_OCFast_Disable TIMx输出比较快速特征性能失能 0x0000 例:

/* Use the TIM2 OC3 in fast Mode */

TIM_OC3FastConfig(TIM2, TIM_OCFast_Enable); 函数原型如下:

void TIM_OC3FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));

/* Get the TIMx CCMR2 register value */ tmpccmr2 = TIMx->CCMR2;

/* Reset the OC3FE Bit */

tmpccmr2 &= CCMR_OC13FE_Reset;//0xFFFB,CCMR2.bit2 // =1时,OCFE只在通道被配置成PWM1或PWM2模式时起作用

/* Enable or Disable the Output Compare Fast Bit */ tmpccmr2 |= TIM_OCFast;

/* Write to TIMx CCMR2 */ TIMx->CCMR2 = tmpccmr2; }

19.2.34 函数TIM_OC4FastConfig

Table 518. 函数 TIM_OC4FastConfig 函数名 TIM_OC4FastConfig 函数原形 void TIM_OC4FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) 功能描述 设置TIMx捕获比较4快速特征 输入参数 1 TIMx:x 可以是1,2,3,4,5,8,来选择TIM外设 输入参数 2 TIM_OCFast:输出比较快速特征状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCFast :输出比较快速特征性能可以使能或者失能。【同TIM_OC1FastConfig】 TIM_OCFast 描述/CCMR1.OC1FE/bit2 #define值 TIM_OCFast_Enable TIMx输出比较快速特征性能使能 0x0004 TIM_OCFast_Disable TIMx输出比较快速特征性能失能 0x0000 例:

/* Use the TIM2 OC4 in fast Mode */

TIM_OC4FastConfig(TIM2, TIM_OCFast_Enable); 函数原型如下:

void TIM_OC4FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));

/* Get the TIMx CCMR2 register value */ tmpccmr2 = TIMx->CCMR2;

/* Reset the OC4FE Bit */

tmpccmr2 &= CCMR_OC24FE_Reset;//0xFBFF,CCMR2.bit10// =1时,OCFE只在通道被配置成PWM1或PWM2模式时起作用

/* Enable or Disable the Output Compare Fast Bit */

tmpccmr2 |= (u16)(TIM_OCFast << 8); // CCMR1.OC2FE比CCMR1.OC1FE高8位

/* Write to TIMx CCMR2 */ TIMx->CCMR2 = tmpccmr2; }

19.2.35 函数TIM_ClearOC1Ref

Table 519. 函数 TIM_ClearOC1Ref 函数名 TIM_ClearOC1Ref 函数原形 void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) 功能描述 在一个外部事件(ETRF高电平)时清除或保持OCREF1信号 输入参数1 TIMx:x 可以是1,2,3,4,5,8,来选择TIM外设 输入参数2 TIM_OCClear:输出比较清除使能位状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCClear:输出比较清除使能位的值列举如下表。 Table 520. TIM_OCClear值 TIM_OCClear 描述/CCMR1.bit7 #define值 TIM_OCClear_Enable TIMx输出比较清除使能 0x0080 TIM_OCClear_Disable TIMx输出比较清除失能 0x0000 例:

/* Enable the TIM2 Channel1 Ouput Compare Refence clear bit */ TIM_ClearOC1Ref(TIM2, TIM_OCClear_Enable); 函数原型如下:

void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) {

u16 tmpccmr1 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));

tmpccmr1 = TIMx->CCMR1;

/* Reset the OC1CE Bit */

tmpccmr1 &= CCMR_OC13CE_Reset;//0xFF7F,CCMR1.bit7//=1(一旦检测到ETRF输入高电平,清除OCxREF=0)

/* Enable or Disable the Output Compare Clear Bit */ tmpccmr1 |= TIM_OCClear;

/* Write to TIMx CCMR1 register */ TIMx->CCMR1 = tmpccmr1; }

19.2.36 函数TIM_ClearOC2Ref

Table 521. 函数 TIM_ClearOC2Ref 函数名 TIM_ClearOC2Ref 函数原形 void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) 功能描述 在一个外部事件(ETRF高电平)时清除或保持OCREF2信号 输入参数 1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数 2 TIM_OCClear:输出比较清除使能位状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCClear:输出比较清除使能位的值列举如下表。 【TIM_ClearOC1Ref】 TIM_OCClear 描述/CCMR1.bit7 #define值 TIM_OCClear_Enable TIMx输出比较清除使能 0x0080 TIM_OCClear_Disable TIMx输出比较清除失能 0x0000 例: /* Enable the TIM2 Channel2 Ouput Compare Refence clear bit */ TIM_ClearOC2Ref(TIM2, TIM_OCClear_Enable); 函数原型如下:

void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) {

u16 tmpccmr1 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));

tmpccmr1 = TIMx->CCMR1;

/* Reset the OC2CE Bit */

tmpccmr1 &= CCMR_OC24CE_Reset;//0x7FFF,CCMR1.bit15//=1(一旦检测到ETRF输入高电平,清除OCxREF=0)

/* Enable or Disable the Output Compare Clear Bit */

tmpccmr1 |= (u16)(TIM_OCClear << 8);// CCMR1.OC2CE比CCMR1.OC1CE高8位

/* Write to TIMx CCMR1 register */ TIMx->CCMR1 = tmpccmr1; }

19.2.37 函数TIM_ClearOC3Ref

Table 522. 函数TIM_ClearOC3Ref 函数名 TIM_ClearOC3Ref 函数原形 void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) 功能描述 在一个外部事件(ETRF高电平)时清除或者保持OCREF3信号 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCClear:输出比较清除使能位状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCClear:输出比较清除使能位的值列举如下表。 【TIM_ClearOC1Ref】 TIM_OCClear 描述/CCMR1.bit7 #define值 TIM_OCClear_Enable TIMx输出比较清除使能 0x0080 TIM_OCClear_Disable TIMx输出比较清除失能 0x0000 例: /* Enable the TIM2 Channel3 Ouput Compare Refence clear bit */ TIM_ClearOC3Ref(TIM2, TIM_OCClear_Enable); 函数原型如下:

void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));

tmpccmr2 = TIMx->CCMR2;

/* Reset the OC3CE Bit */

tmpccmr2 &= CCMR_OC13CE_Reset;//0xFF7F, CCMR1.bit7//=1(一旦检测到ETRF输入高电平,清除OCxREF=0)

/* Enable or Disable the Output Compare Clear Bit */ tmpccmr2 |= TIM_OCClear;

/* Write to TIMx CCMR2 register */ TIMx->CCMR2 = tmpccmr2; }

19.2.38 函数TIM_ClearOC4Ref

Table 523. 函数TIM_ClearOC4Ref 函数名 TIM_ClearOC4Ref 函数原形 void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) 功能描述 在一个外部事件(ETRF高电平)时清除或保持OCREF4信号 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCClear:输出比较清除使能位状态 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCClear:输出比较清除使能位的值列举如下表。 【TIM_ClearOC1Ref】

TIM_OCClear 描述/CCMR1.bit7 #define值 TIM_OCClear_Enable TIMx输出比较清除使能 0x0080 TIM_OCClear_Disable TIMx输出比较清除失能 0x0000 例:

/* Enable the TIM2 Channel4 Ouput Compare Refence clear bit */ TIM_ClearOC4Ref(TIM2, TIM_OCClear_Enable); 函数原型如下:

void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, u16 TIM_OCClear) {

u16 tmpccmr2 = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));

tmpccmr2 = TIMx->CCMR2;

/* Reset the OC4CE Bit */

tmpccmr2 &= CCMR_OC24CE_Reset; //0x7FFF,CCMR2.bit15//=1(一旦检测到ETRF输入高电平,清除OCxREF=0)

/* Enable or Disable the Output Compare Clear Bit */

tmpccmr2 |= (u16)(TIM_OCClear << 8); // CCMR2.OC2CE比CCMR2.OC1CE高8位

/* Write to TIMx CCMR2 register */ TIMx->CCMR2 = tmpccmr2; }

19.2.39 函数TIM_UpdateDisableConfig

Table 524. 函数TIM_UpdateDisableConfig 函数名 TIM_UpdateDisableConfig void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, 函数原形 FunctionalState Newstate) 功能描述 使能或失能TIMx更新事件 输入参数 1 TIMx:x 可以是1,2,3,4,5,6,7,8来选择TIM外设 输入参数 2 NewState:TIMx_CR1寄存器UDIS位的新状态(ENABLE或DISABLE) 输出参数 无 返回值 无 先决条件 无 被调用函数 无 例: /* Enables the Update event for TIM2 */ TIM_UpdateDisableConfig(TIM2, DISABLE); 函数原型如下:

void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState) {

/* Check the parameters */

assert_param(IS_TIM_ALL_PERIPH(TIMx));

assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE) {

/* Set the Update Disable Bit */

TIMx->CR1 |= CR1_UDIS_Set;// #define CR1_UDIS_Set ((u16)0x0002)//=1-禁止更新,0-允许更新 } else {

/* Reset the Update Disable Bit */

TIMx->CR1 &= CR1_UDIS_Reset;// #define CR1_UDIS_Reset ((u16)0x03FD)//bit15-10(6bit)保留 } }

19.2.40 函数TIM_EncoderInterfaceConfig

Table 525. 函数TIM_EncoderInterfaceConfig 函数名 TIM_EncoderInterfaceConfig

void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, u8 TIM_EncoderMode, u8 TIM_IC1Polarity, u8 TIM_IC2Polarity) 功能描述 设置TIMx编码界面(只设置不开启) 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_EncoderMode:触发源(编码方式) 输入参数3 TIM_ IC1Polarity:TI1极性 输入参数4 TIM_ IC2Polarity:TI2极性 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_EncoderMode:选择TIMx编码模式。 Table 526. TIM_EncoderMode值 参数TIM_EncoderMode值 描述/SMCR.SMS[2:0] #define值 备注 TIM_EncoderMode_TI1 使用TIM编码模式1 0x0001 计数器根据TI1FP1电平在TI2FP2的边沿计数 TIM_EncoderMode_TI1 使用TIM编码模式2 0x0002 计数器根据TI2FP2电平在TI1FP1的边沿计数 函数原形 TIM_EncoderMode_TI12 使用TIM编码模式3 0x0003 边沿计数 TIM_ ICPolarity:输入捕获极性 参数TIM_ICxPolarity的值 表述/CCER.1/5/9/13 #define值 意义 TIM_ICPolarity_Rising 上升沿捕获(不反相) ((u16)0x0000) 输入捕获 TIM_ICPolarity_Falling 下降沿捕获(反相) ((u16)0x0002) 例: 计数器根据另一信号电平在TI1FP1和TI2FP2的/* Configures the encoder mode TI1 for TIM2 */

TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); 函数原型如下:

void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, u16 TIM_EncoderMode, u16 TIM_IC1Polarity,\\ u16 TIM_IC2Polarity) {

u16 tmpsmcr = 0; u16 tmpccmr1 = 0; u16 tmpccer = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_ENCODER_MODE(TIM_EncoderMode));//编码方式1,2,3

assert_param(IS_TIM_IC_POLARITY(TIM_IC1Polarity));//输入捕获方式:上升沿?下降沿? assert_param(IS_TIM_IC_POLARITY(TIM_IC2Polarity));

/* Get the TIMx SMCR, CCMR1, CCER register value */ tmpsmcr = TIMx->SMCR; tmpccmr1 = TIMx->CCMR1; tmpccer = TIMx->CCER;

/* Set the encoder Mode */

tmpsmcr &= SMCR_SMS_Mask;// #define SMCR_SMS_Mask ((u16)0xFFF8) tmpsmcr |= TIM_EncoderMode;//看上面【表526】

/* Select the Capture Compare 1 and the Capture Compare 2 as input */

tmpccmr1 &= CCMR_CC13S_Mask & CCMR_CC24S_Mask;// 0xFFFC 0xFCFF //CCyS-选择ICy的输入映射方式 tmpccmr1 |= CCMR_TI13Direct_Set | CCMR_TI24Direct_Set; // 0x0001 0x0100//设置为直通映射ICy=TIy

/* Set the TI1,TI2 Polarities */

tmpccer &= CCER_CC1P_Reset & CCER_CC2P_Reset;// 0xFFFD 0xFFDF

tmpccer |= (TIM_IC1Polarity | (u16)(TIM_IC2Polarity << 4)); //设置通道输入捕获方式:反相?不反相? //TIM_IC2Polarity采用的IC1P的定义值,IC2P在IC1P的高4位处

/* Write to TIMx SMCR,CCMR1 ,CCER */ TIMx->SMCR = tmpsmcr;

TIMx->CCMR1 = tmpccmr1; // CCMR1/2.CCxS仅在通道关闭时(CCER.CCxE=0)才是可写的! TIMx->CCER = tmpccer; }

19.2.41 函数TIM_GenerateEvent

Table 527. 函数TIM_GenerateEvent 函数名 TIM_GenerateEvent 函数原形 void TIM_GenerateEvent(TIM_TypeDef* TIMx, u16 TIM_EventSource) 功能描述 设置TIMx事件由软件产生 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_EventSource:TIM软件事件源 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_EventSource :选择 TIM软件事件源。 Table 528. TIM_EventSource值 TIM_EventSource 描述/EGR #define值 EGR位置 TIM_EventSource_Update TIM更新事件源 0x0001 bit0 TIM_EventSource_CC1 TIM捕获比较1事件源 0x0002 bit1 TIM_EventSource_CC2 TIM捕获比较2事件源 0x0004 bit2 TIM_EventSource_CC3 TIM捕获比较3事件源 0x0008 bit3 TIM_EventSource_CC4 TIM捕获比较4事件源 0x0010 bit4 TIM_EventSource_COM TIM COM事件源 0x0020 bit5 TIM_EventSource_Trigger TIM触发事件源 0x0040 bit6 TIM_EventSource_Break TIM刹车事件源 0x0080 bit7 例:

/* Selects the Trigger software Event generation for TIM2 */ TIM_GenerateEvent(TIM2, TIM_EventSource_Trigger); 函数原型如下:

void TIM_GenerateEvent(TIM_TypeDef* TIMx, u16 TIM_EventSource) {

/* Check the parameters */

assert_param(IS_TIM_ALL_PERIPH(TIMx));

assert_param(IS_TIM_EVENT_SOURCE(TIM_EventSource));

assert_param(IS_TIM_PERIPH_EVENT((TIMx), (TIM_EventSource)));

/* Set the event sources */ TIMx->EGR = TIM_EventSource; }

19.2.42 函数TIM_OC1PolarityConfig

Table 529. 函数TIM_OC1PolarityConfig 函数名 TIM_OC1PolarityConfig 函数原形 void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity) 功能描述 设置TIMx通道1极性 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCPolarity:输出比较极性 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPolarity:输出比较极性。 参数TIM_OCPolarity的值 描述/CCER.CC1P[bit1] TIM_OCPolarity_High CCx通道输出高电平有效 TIM_OCPolarity_Low CCx通道输出低电平有效 例: #define ((u16)0x0000) ((u16)0x0002) /* Selects the Polarity high for TIM2 channel 1 output compare */ TIM_OC1PolarityConfig(TIM2, TIM_OCPolarity_High); 函数原型如下:

void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity) {

u16 tmpccer = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));

tmpccer = TIMx->CCER;

/* Set or Reset the CC1P Bit *///bit1 tmpccer &= CCER_CC1P_Reset; tmpccer |= TIM_OCPolarity;

/* Write to TIMx CCER register */ TIMx->CCER = tmpccer; }

19.2.43 函数TIM_OC2PolarityConfig

Table 530. 函数 TIM_OC2PolarityConfig 函数名 TIM_OC2PolarityConfig 函数原形 void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity) 功能描述 设置TIMx通道2极性 输入参数1 TIMx:x可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCPolarity:输出比较极性 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPolarity:输出比较极性。【采用TIM_OC1PolarityConfig的值】 参数TIM_OCPolarity的值 描述/CCER.CC1P[bit1] #define TIM_OCPolarity_High CCx通道输出高电平有效 ((u16)0x0000) TIM_OCPolarity_Low CCx通道输出低电平有效 ((u16)0x0002) 例:

/* Selects the Polarity high for TIM2 channel 2 output compare */ TIM_OC1PolarityConfig(TIM2, TIM_OCPolarity_High); 函数原型如下:

void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity) {

u16 tmpccer = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));

tmpccer = TIMx->CCER;

/* Set or Reset the CC2P Bit */ tmpccer &= CCER_CC2P_Reset;

tmpccer |= (u16)(TIM_OCPolarity << 4);//采用OC1P的值,OC2P高OC1P 4位

/* Write to TIMx CCER register */ TIMx->CCER = tmpccer; }

19.2.44 函数TIM_OC3PolarityConfig

Table 531. 函数 TIM_OC1PolarityConfig

函数名 TIM_OC3PolarityConfig 函数原形 void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity) 功能描述 设置TIMx通道3极性 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCPolarity:输出比较极性 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPolarity:输出比较极性。【采用TIM_OC1PolarityConfig的值】 参数TIM_OCPolarity的值 描述/CCER.CC1P[bit1] #define TIM_OCPolarity_High CCx通道输出高电平有效 ((u16)0x0000) TIM_OCPolarity_Low CCx通道输出低电平有效 ((u16)0x0002) 例:

/* Selects the Polarity high for TIM2 channel 3 output compare */ TIM_OC1PolarityConfig(TIM2, TIM_OCPolarity_High); 函数原型如下:

void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity) {

u16 tmpccer = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));

tmpccer = TIMx->CCER;

/* Set or Reset the CC3P Bit */ tmpccer &= CCER_CC3P_Reset;

tmpccer |= (u16)(TIM_OCPolarity << 8); //采用OC1P的值,OC2P高OC1P 8位

/* Write to TIMx CCER register */ TIMx->CCER = tmpccer; }

19.2.45 函数TIM_OC4PolarityConfig

Table 532. 函数TIM_OC4PolarityConfig 函数名 TIM_OC4PolarityConfig void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, u16 函数原形 TIM_OCPolarity) 功能描述 设置TIMx通道4极性 输入参数1 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 输入参数2 TIM_OCPolarity:输出比较极性 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_OCPolarity:输出比较极性。【采用TIM_OC1PolarityConfig的值】 参数TIM_OCPolarity的值 描述/CCER.CC1P[bit1] #define TIM_OCPolarity_High CCx通道输出高电平有效 ((u16)0x0000) TIM_OCPolarity_Low CCx通道输出低电平有效 ((u16)0x0002) 例:

/* Selects the Polarity high for TIM2 channel 4 output compare */ TIM_OC1PolarityConfig(TIM2, TIM_OCPolarity_High); 函数原型如下:

void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity) {

u16 tmpccer = 0;

/* Check the parameters */

assert_param(IS_TIM_123458_PERIPH(TIMx));

assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));

tmpccer = TIMx->CCER;

/* Set or Reset the CC4P Bit */ tmpccer &= CCER_CC4P_Reset;

tmpccer |= (u16)(TIM_OCPolarity << 12); //采用OC1P的值,OC2P高OC1P 12位

/* Write to TIMx CCER register */ TIMx->CCER = tmpccer; }

19.2.46 函数TIM_UpdateRequestConfig

Table 533. 函数 TIM_UpdateRequestConfig 函数名 TIM_UpdateRequestConfig 函数原形 void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, u16 TIM_UpdateSource) 功能描述 设置TIMx更新请求源 输入参数1 TIMx:x 可以是1,2,3,4,5,6,7,8来选择TIM外设 输入参数2 TIM_UpdateSource:TIM更新请求源 输出参数 无 返回值 无 先决条件 无 被调用函数 无 TIM_UpdateSource:选择TIM更新源。 Table 534. TIM_UpdateSource值 参数TIM_UpdateSource的值 描述/CR1.0PM/[bit3] #define值 TIM_UpdateSource_Global 生成重复的脉冲:在更新事件时计数器不停止 0x0008 TIM_UpdateSource_Regular 生成单一的脉冲:计数器在一个更新事件停止 0x0000 例:

/* Selects the regular update source for TIM2 */

TIM_UpdateRequestConfig(TIM2, TIM_UpdateSource_Regular); 函数原型如下:

void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, u16 TIM_UpdateSource) {

/* Check the parameters */

assert_param(IS_TIM_ALL_PERIPH(TIMx));

assert_param(IS_TIM_UPDATE_SOURCE(TIM_UpdateSource));

if (TIM_UpdateSource != TIM_UpdateSource_Global)//根据一次脉冲?重复脉冲?的情况下设置URS {

/* Set the URS Bit */

TIMx->CR1 |= CR1_URS_Set;//导致中断或DMA请求的UEV: 计数器溢出/下溢 } else {

/* Reset the URS Bit */

TIMx->CR1 &= CR1_URS_Reset;

//导致中断或DMA请求的UEV:【1】.计数器溢出/下溢;【2】.设置EGR.UG位;【3】.从模式控制器产生的更新 } }

19.2.47 函数TIM_SelectHallSensor Table 535. 函数TIM_SelectHallSensor 函数名 函数原形 功能描述 输入参数 1 输入参数 2 输出参数 返回值 先决条件 TIM_SelectHallSensor void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState Newstate) 使能或失能TIMx霍尔传感器接口 TIMx:x 可以是1,2,3,4,5,8来选择TIM外设 NewState:TIMx霍尔传感器接口的新状态(ENABLE 或 DISABLE) 无 无 无

本文来源:https://www.bwwdw.com/article/xkvg.html

Top