运动控制器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模式
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容

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