运动控制器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模式
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • TIMx简介 可编程预分频驱动 16位 自动装载计数器 用于输入:测试脉冲宽度输出:产生输出波形(输出比较和PWM...
    吴松乾阅读 1,620评论 0 2
  • 姓名:周崇杰 学号:16040120059 专业:机械设计制造及其自动化 转载自:http://blog.csd...
    CJbaby阅读 1,096评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,246评论 19 139
  • 空气湿漉漉 往事不经意 摇摇晃晃 从睡梦中惊醒 那些尘埃 从未迷散至空气 没有回馈 没有歉意 我似那走丢的孩子 ………
    恰妈阅读 255评论 6 3
  • 我开始听一些老歌看些旧书 开始收集一些被旧时光打磨的照片 开始不像以往那样爱向别人诉说 开始看清旁人的淡漠与无所谓...
    十不青年阅读 666评论 1 6