运动控制器18:通用定时器的库函数和基本使用

引脚和定时器初始化TIM2_Configuration

我们使用TIM2作为普通的定时器,一秒以后将LED循环的点亮和关闭,结构体初始化函数如下:

void TIM2_Configuration(void)
{
    //首先申明一个初始化结构体和开启定时器时钟
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
    TIM_DeInit(TIM2);
    TIM_TimeBaseStructure.TIM_Period=1000;  
    
    //时钟为72M,我们用TIM_Prescaler=71,则时钟为1M
    //设置TIM_Period=1000,则1ms进行一次溢出
    TIM_TimeBaseStructure.TIM_Prescaler= (72 - 1);    
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;   
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    
    //清更新FLAG,使能中断和先关闭时钟。
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);                           
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    TIM_Cmd(TIM2, ENABLE);                                      
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , DISABLE);  
}

用下面的语句对LED进行取反操作,如下:

if((GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_7 )))
    GPIO_ResetBits(GPIOF, GPIO_Pin_7 );
else
    GPIO_SetBits(GPIOF, GPIO_Pin_7);     

中断服务程序

中断优先级配置函数如下:

void TIM2_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; 
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                                                     
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;   
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

服务程序如下:

void TIM2_IRQHandler(void)
{
    if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) 
    {   
        TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);    
         time++;
    }           
}

标准库函数


初始化函数
TIM_TimeBaseInit,以及去初始化TIM_DeInit
  • 功能:定时器结构体初始化,开启定时器必须用到
  • 函数入口:见上文,主要设置时钟分频和计时器模式
uint16_t  TIM_ClockDivision 
uint16_t  TIM_CounterMode 
uint16_t  TIM_Period 
uint16_t  TIM_Prescaler 
uint8_t  TIM_RepetitionCounter 

输入捕获模式下的初始化函数
初始化 ICStructInit ICInit TIM_TimeBaseStructInit
  • 功能:输出比较功能的初始化结构体,一共有4个IC
  • 函数入口:TIMx 和结构体
uint16_t  TIM_Channel  //4通道
uint16_t  TIM_ICFilter  //滤波
uint16_t  TIM_ICPolarity  //
uint16_t  TIM_ICPrescaler //
uint16_t  TIM_ICSelection //是否直连
TI1_Config
  • 功能:将某个引脚作为捕获输入,对引脚进行配置
  • 函数入口:4个
  1. 定时器1
  2. 极性,上升沿OR下降沿
  3. 模式:引脚输入1直接输入捕获模块1
  4. 滤波:具体数值
  • 函数输出:void
输出比较模式下的初始化函数
初始化 TIM_OC1Init
  • 功能:输出比较功能的初始化结构体,一共有4个OC
  • 函数入口:TIMx 和结构体
uint16_t  TIM_OCIdleState  //闲置时的状态
uint16_t  TIM_OCMode   //激活,PWM,定时OR反转
uint16_t  TIM_OCNIdleState //
uint16_t  TIM_OCNPolarity //输出极性,高低电平
uint16_t  TIM_OCPolarity 
uint16_t  TIM_OutputNState 
uint16_t  TIM_OutputState  //比较输出的状态,使能OR
uint16_t  TIM_Pulse //捕获比较寄存器的值
重载配置 TIM_OC1PreloadConfig
  • 功能:TIMx 重载功能使能
  • 函数入口:TIMx ENABLE
极性和N极性的配置OC1PolarityConfig和OC1NPolarityConfig
  • 功能:略
  • 函数入口:TIMx和HIGH和LOW
快速功能配置 OC1FastConfig
  • 功能:TIMx快速功能使能
  • 函数入口:TIMx ENABLE
内部时钟配置 InternalClockConfig
  • 功能:使能定时器的内部时钟
PWM输入功能设置 TIM_PWMIConfig
  • 功能:配置以测量外部PWM的占空比
  • 为外部捕获功能,所以初始化结构体如IC的初始化结构
TIM_BDTRConfig
  • 功能:仅限高级定时器
TIM_Cmd 定时器打开
TIM_ITConfig 中断配置功能
  • 功能:TIMx 中断配置源使能
  • 函数入口:中断源有如下定义的多种
#define TIM_IT_Update                      ((uint16_t)0x0001)
#define TIM_IT_CC1                         ((uint16_t)0x0002)
#define TIM_IT_CC2                         ((uint16_t)0x0004)
#define TIM_IT_CC3                         ((uint16_t)0x0008)
#define TIM_IT_CC4                         ((uint16_t)0x0010)
#define TIM_IT_COM                         ((uint16_t)0x0020)
#define TIM_IT_Trigger                     ((uint16_t)0x0040)
#define TIM_IT_Break                       ((uint16_t)0x0080)
TIM_GenerateEvent 事件配置功能
  • 功能:TIMx 事件配置源使能
  • 函数入口:事件源有如下定义的多种,同上
  • 事件和中断的区别就是,中断需要转中断服务程序,而事件则自动触发动作,属于硬件完成
DMA配置TIM_DMAConfig
  • 函数入口
    • TIMx
    • TIM_DMABase:DMA可以存储如下的寄存器,如TIM_DMABase_CR, TIM_DMABase_CR2, TIM_DMABase_SMCR,
    • TIM_DMABurstLength:可以是1Transfer和18Transfer
DMA的命令参数TIM_DMACmd
  • 函数入口
    • TIMx
    • TIM_DMASource:TIM_DMA_Update或者其他源TIM_DMA_CC1和TIM_DMA_Trigger等
    • NewState:使能
TIM_ITRxExternalClockConfig
  • 功能:外部时钟模式1,有多种时钟源
TIM_TIxExternalClockConfig
  • 功能:另一种外部时钟,设置稍复杂一点
ETR时钟TIM_ETRClockMode1Config和TIM_ETRConfig
  • 功能:高级定时器用到
TIM_PrescalerConfig
  • 功能:分频设置
TIM_SelectInputTrigger
  • 功能:多种输入触发可选
TIM_EncoderInterfaceConfig
  • 功能:编码器功能配置
TIM_ForcedOC1Config
  • 功能:强制输出配置
TIM_ARRPreloadConfig
  • 功能:ARR重载
TIM_SelectCOM
  • 功能:高级功能
TIM_SelectCCDMA
  • 功能:捕获比较的DMA设置
TIM_CCPreloadControl
  • 功能:捕获比较的重载设置
TIM_OC1PreloadConfig
  • 功能:输出的重载设置
TIM_OC2FastConfig
  • 功能:快速性能设置
TIM_ClearOC1Ref
  • 功能:清OC
TIM_CCxCmd TIM_CCxNCmd
  • 功能:
TIM_SelectOCxM
  • 功能:选择OC模式

你可能感兴趣的:(运动控制器18:通用定时器的库函数和基本使用)