STM32F10x - TIM - 图文 下载本文

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