定时器


(一)工作原理

1.定时器:计数器,时钟脉冲计数

2.工作原理

(1)自动计数模式:在时钟条件下,系统自动计数到最大值溢出,代表一次定时完成

  • 时钟计数最大值由定时器的位数决定 2 n 2^n 2n

(2)调制计数模式:用户自定义定时时间,系统计时到自定义时间,代表一次定时完成

 由上可知,在调制计数模式上更有灵活性。

向上计数:向上计数到设定值后重新计数,周期循环


连续计数:向上计数到最大值后重新计数,周期循环



上/下计数:向上计数到设定值后,又从设定值向下计数


(二)分类

1.核内定时器

(1)SysTick定时器:系统时钟滴答定时器(定时作用)

  • 可用作操作系统任务调度时间片

(2)RTC:实时时钟

(3)WatchDog:看门狗时钟,用于异常复位


2.外设定时器

(1)基本定时器:定时作用,用作其他定时器功能的时基

(2)通用定时器

  • 输入捕获
  • 输出比较
  • PWM(输出比较模式中的一种特例)

(3)高级定时器

  • 通用定时器
  • 带死区控制的PWM
  • 三路移相波形(三相电机控制)

(三)编程

1.编程流程

(1)时钟配置

  • 时钟源
  • 分频系数

(2)功能配置

  • 计数模式
  • 重装载值
  • 计数值清零

(3)定时器使能

(4)中断配置

  • 中断源
  • 中断优先级
  • 中断使能

(5)中断处理函数


2.编程实例

(1)寄存器版本

#include "msp.h"
#include "driverlib.h"int main()
{//关闭看门狗WDTCTL = WDTPW | WDTHOLD;//GPIO复用为HFXTPJ->SEL1 &=~(BIT2 | BIT3);PJ->SEL0 |= (BIT2 | BIT3);//解锁时钟寄存器(0x695A)CS->KEY = CS_KEY;//HCLK 16MHzCS->CTL2 |= CS_CTL2_HFXTFREQ_2 | CS_CTL2_HFXTDRIVE | CS_CTL2_HFXT_EN;//SMCLK 4MHzCS->CTL1 |= CS_CTL1_DIVS_2 | CS_CTL1_SELS_5;//SMCLK 时钟源使能CS->CLKEN |= CS_CLKEN_SMCLK_EN;//锁住时钟寄存器(0xA569)CS->KEY = CS_KEY_KEY_OFS;//时钟选择(1MHz)TIMER_A0->CTL |= TIMER_A_CTL_SSEL__SMCLK | TIMER_A_CTL_ID__4;//计数值1msTIMER_A0->R = 999;//上升计数模式,计数值清零TIMER_A0->CTL |= TIMER_A_CTL_MC__UP | TIMER_A_CTL_CLR;//清除中断标志位TIMER_A0->CTL &= ~TIMER_A_CTL_IFG;//Timer中断使能TIMER_A0->CTL |= TIMER_A_CTL_IE;P1->SEL0 &=~BIT0;P1->SEL1 &=~BIT0;P1->DIR |= BIT0;P1->OUT |= BIT0;while(1);return 0;
}uint8_t timecount = 0;
void TA0_N_IRQHandler(void)
{//判断中断是否发生if(TIMER_A_CTL_IFG & TIMER_A0->CTL){//中断标志位清零TIMER_A0->CTL &= ~TIMER_A_CTL_IFG;timecount++;if(timecount == 10){P1->OUT ^= BIT0;}}
}

(2)库函数版本

#include "msp.h"
#include "driverlib.h"int main()
{//关闭看门狗WDT_A_holdTimer();//GPIO复用为HFXTGPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ,GPIO_PIN3 | GPIO_PIN2, GPIO_PRIMARY_MODULE_FUNCTION);//HCLK 16MHzCS_setExternalClockSourceFrequency(32000,16000000);CS_startHFXT(false);//SMCLK 4MHzCS_initClockSignal(CS_SMCLK,CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_4);CS_enableClockRequest(CS_SMCLK);//定时器功能配置Timer_A_UpModeConfig Timer_A_UpMode;Timer_A_UpMode.clockSource                              = TIMER_A_CLOCKSOURCE_SMCLK;Timer_A_UpMode.clockSourceDivider                      = TIMER_A_CLOCKSOURCE_DIVIDER_4;Timer_A_UpMode.timerPeriod                             = 999;Timer_A_UpMode.timerClear                                = TIMER_A_DO_CLEAR;Timer_A_UpMode.timerInterruptEnable_TAIE                = TIMER_A_TAIE_INTERRUPT_DISABLE;Timer_A_UpMode.captureCompareInterruptEnable_CCR0_CCIE    = TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE;//定时器功能配置Timer_A_configureUpMode(TIMER_A0_BASE,&Timer_A_UpMode);//清除中断标志位Timer_A_clearInterruptFlag(TIMER_A0_BASE);//使能中断Timer_A_enableInterrupt(TIMER_A0_BASE);//使能定时器计数Timer_A_startCounter(TIMER_A0_BASE, TIMER_A_UP_MODE);while(1);return 0;
}uint8_t timecount = 0;
void TA0_N_IRQHandler(void)
{uint32_t status = Timer_A_getInterruptStatus(TIMER_A0_BASE);//判断中断是否发生if(TIMER_A_CTL_IFG & status){//中断标志位清零Timer_A_clearInterruptFlag(TIMER_A0_BASE);timecount++;if(timecount == 10){GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);}}
}

嵌入式系统:基本定时器相关推荐

  1. 浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  2. 使嵌入式系统调试更容易:有用的硬件和软件提示

    使嵌入式系统调试更容易:有用的硬件和软件提示 Making embedded system debug easier: useful hardware & software tips 嵌入式系 ...

  3. 国防科大 linux教程,国防科大《嵌入式系统》肖侬视频教程

    01-1 嵌入式系统概述 02-1 嵌入式系统设计方法(1) 02-2 嵌入式系统设计方法(2) 03-1 嵌入式处理器(1) 03-2 嵌入式处理器(2) 04-1 ARM处理器(1) 04-2 A ...

  4. 1.嵌入式系统的简介

    1.嵌入式系统的简介 1.1 课程规划与学习方法 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一,但同时也是最难以掌 握的学科之一,很多踌躇满志的同学最终没能成为一名合格的嵌入式工程师,很大 ...

  5. C语言嵌入式系统编程修炼

    C语言嵌入式系统编程修炼之内存操作篇 数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力.在嵌入式 ...

  6. 微型计算机工业控制技术,基于ARM的微机原理与接口技术(STM32嵌入式系统架构编程与应用嵌入式与工业控制技术高等学校电子信息类专业系列教材)...

    导语 内容提要 本书首先介绍微型计算机的相关概念及嵌入式系统的应用,接着介绍Cortex M3微处理器架构及开发方法,介绍汇编语言及其程序设计.在开发应用方面,以STM32F103VET6为背景,介绍 ...

  7. C语言嵌入式系统编程修炼之道——屏幕操作篇

    C语言嵌入式系统编程修炼之道--屏幕操作篇 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] 1.汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非 ...

  8. C语言嵌入式系统编程修炼之四:屏幕操作

    汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功 ...

  9. 【复习资料】单片机与嵌入式系统原理及应用

    嵌入式系统的概念 第一种定义:嵌入式系统是以应用为中心.计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统. 第二种定义:把基于处理器(通用处理器和嵌 ...

  10. 看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断。【详细!小白也能看懂!】

    看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断. A. 软件喂狗 B. 处理器温度过高 C. 外部中断 D. 看门狗定时器超时 解析: 思考方式: 每个 ...

最新文章

  1. Android studio Day02-1
  2. python叫什么-python中文叫什么
  3. tp5 模型中配置数据库连接信息
  4. 怎么用计算机知道别人手机密码,怎样才能知道别人家的wifi密码
  5. shell编程练习题
  6. 【Pytorch神经网络基础理论篇】 02 pytorch环境的安装
  7. 通过Zoopkeeper-BinaryOutputArchive类学习utf-8的实现
  8. 货拉拉回应寻求5亿美元融资传言:持续关注资本市场 无具体上市时间表
  9. c语言中冒泡排序、插入排序、选择排序算法比较
  10. 怎么利用计算机辅助评标,计算机辅助评标系统及其的应用.doc
  11. 实用win7桌面小工具
  12. 五年高考三年模拟暗部软件库_BIM软件-关于Lumion的这些,你真的了解了吗?
  13. magisk卸载内置软件_软件卸载工具的终极武器——Revo Uninstaller
  14. 【Latex论文排版】表格、图片和公式
  15. 《通信原理》用matlab实现加性高斯白噪声信道实验
  16. 全球云服务商排名情况及国内云主机市场占有率份额排名对比
  17. nginx: [emerg] could not build server_names_hash
  18. ABO血型系统遗传规律表
  19. mysql中utf8和utf8mb4区别,MySQL中utf8和utf8mb4的区别
  20. Android Canvas画布的详解与使用,以及View的绘画(一)

热门文章

  1. python计算工时
  2. 基因家族分析⑥:用TBTOOLS画出基因在染色体上的分布图
  3. 最新猎头职位招聘信息2009-4-5已更改
  4. 我是如何成为阿里巴巴数据分析师的?
  5. Autocad视图汇报工具——几百个视图无障碍
  6. python模块:Scipy.optimize.linprog线性规划求解
  7. mysql终端输入密码后闪退的解决方法
  8. 华科计算机博士学位,华科计算机学院博士毕业条件
  9. Dynamo 中的输入节点
  10. HP DL360服务器安装redhat7操作系统采坑及路由专线配置过程