文章目录

  • 一、MSP430定时器是什么?
  • 二、MSP定时器的功能
    • 1. 定时器中断
    • 2. PWM输出
  • 总结

一、MSP430定时器是什么?

和STM32类似,MSP430定时器也有定时、输入捕获、输出比较以及产生PWM等功能,下面就来一一介绍这些功能以及怎么去使用。
首先,我们应该知道MSP430的定时器模式分为比较模式和捕获模式,个人理解比较模式就是定时中断、计时等一些常规的功能,捕获模式是PWM输出,捕获外部信号,用于测量时间和脉冲数量等。MSP430默认为比较模式。
MSP430的TA1的寄存器如下图

二、MSP定时器的功能

1. 定时器中断

定时器中断就是间隔一定的时间,执行一次中断服务函数,我们通过一段程序来上手定时器中断,毕竟例程也是学习单片机的一大工具。

    WDTCTL = WDTPW + WDTHOLD;           //关闭看门狗TA1CCR0 = 25000 ;TA1CCTL0 = CCIE;                    // CCR0中断允许TA1CTL= TASSEL_2+ID__8+TAIE+TACLR+MC_1;   //使用SMCLK时钟,开启中断并清零,递增模式;TA1CTL&=~TAIFG;//清楚中断标志位_EINT();    //开启总中断

MSP430有一个计数寄存器——TAxR Register,这个16位寄存器记录的是定时器的当前计数值,也有一个16位的输出/比较寄存器TAxCCRn Register。在比较模式下,TAxCCRn 记录的是一个比较值,这个比较值和TAxR 中的计数值相比较,这个比较值我理解为STM32中的最大重装载值,由于是16位的,所以最大值还是65535.
在上面这段程序中,显示把TA1CCR0 寄存器的值写成了25000,这是设置了比较值为25000,然后通过修改TA1CCTL0的位,开启定时器中断,然后修改定时器控制寄存器TA1CTL选择时钟源和分频系数等,最后开启总中断(开启总中断是MSP430使用中断的一个必要步骤)。

之所以设置的是TA1CCR0 ,而不是设置的是TA1CCR1和TA1CCR2,这个问题也困惑了我很久,后来才知道TA1由两个定时器中断向量,用的是不同的比较匹配通道,也就是说一个定时器有两个中断,这里我们使用的中断向量是TIMER1_A0_VECTOR,所以要配置TA1CCR0 和TA1CCTL0。


这里还参考了另一篇博客,这里的总结比较清晰。
https://blog.csdn.net/xukai871105/article/details/9045555

定时器TA1的中断服务函数如下,中断服务函数一定要清楚标志位

#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{if(TA1CTL&TAIFG){TA1CTL&=~TAIFG; //清楚中断标志位}
}
#endif

== 我们总结一下定时中断的使用步骤==

  • 配置TAxCTL寄存器选择时钟源和分频系数
  • 设置TA1CCR0来确定比较值,也就是最大重装载值
  • 配置TA1CCTL0使能中断,
  • _EINT(); 开启总中断

2. PWM输出

定时器控制输出产生PWM也是输出比较功能,话不多说,马上上代码

void PWM0_Config(void)
{WDTCTL = WDTPW + WDTHOLD;  // 关闭看门狗P1DIR |=BIT2;              // 设置 P1.2为输出P1SEL |=BIT2;              // 设置 P1.2为TA0.2输出,外设功能模式P1DS |=BIT2;               //全力驱动,否则可能无法驱动电机TA0CCR0 = PWMPeriod;       // 设置PWM 周期TA0CCTL1 = OUTMOD_7;       // 设置PWM 输出模式为:7 - PWM复位/置位模式,即输出电平在TAR的值等于CCR2时复位为0,当TAR的值等于CCR0时置位为1,改变CCR2,从而产生PWM。其实模式2也可以TA0CTL= TASSEL_2 +MC_1;    // 设置TIMERA的时钟源为SMCLK, 计数模式为up,到CCR0再自动从0开始计数TA0CCR1=0;
}

定时器TA0有5个输出通道[0:4],这个定时器最多可以产生5路PWM。和基本的定时器配置类似,我们也需要设置时钟源、计数方式、以及比较值,在这里的这个比较值比较重要,它可以理解为PWM的周期,实际的
T=TA0CCR0∗fT=TA0CCR0 *fT=TA0CCR0∗f,f是定时器的计数频率。然后我们要设置另一个值TA0CCRx(CCR0是周期,CCR1是通道1的比较值,以此类推),这个值可以理解为PWM中高低电平的分割点,我们改变这个分割点的值就能改变高低电平的时间,这样就能改变占空比了。
这段程序中,先是设置了TA0的通道1的引脚P1.2为外设功能输出模式,然后TA0CCR0中写入计数最大值,也就是计数周期,接着TA0CCTL1设置为 OUTMOD_7,即下图中的111模式,从User’s Guide 中看到,当计时器计数到TAxCCRn值时,输出为低电平,当计时器计数为TAxCCR0值时,输出为高电平。

当然,仅凭这一段程序是不能产生脉冲波形的,因为我们还需要设置前面提到的TA0CCRx,来调整占空比,程序如下

int PWM0_State(unsigned int n)
{unsigned int v = 0;v = (n*PWMPeriod)/100;TA0CCR1=v;return 0;
}

总结

关于MSP430定时器部分就记录到这里,写了关于定时器中断和PWM产生的基本原理和配置方法,全部是自己的个人理解,如有错误请各位指出!

MSP430学习总结——定时器相关推荐

  1. MSP430学习笔记-定时器A

    16 位定时器 A 模块寄存器 TACTL TIMER_A 控制寄存器 15-10 9-8 Unused TASSELx 7-6 5-4 3 2 1 0 IDx MCx Unused TACLR TA ...

  2. spring 定时器设置停止_单片机MSP430入门-理论⑦--定时器模块-定时器A②

    单片机MSP430入门-理论⑦--定时器模块-定时器A② 上期大概给大家汇总介绍了,定时器模块中比较重要并且常用的定时器A,大概说了下定时器A的两种常用模式,比较模式和捕获模式 本期将继续介绍定时器A ...

  3. JavaScript学习05 定时器

    JavaScript学习05 定时器 定时器1 用以指定在一段特定的时间后执行某段程序. setTimeout(): 格式:[定时器对象名=] setTimeout("<表达式> ...

  4. MSP430学习心得

    MSP430学习心得 当初英国留学,第一次接触到MSP430这种类型的单片机,学习过程中遇到了各种问题,现在回想起来,如果当初有一位引路人的话,我当年的学习过程也许会轻松许多吧. 遥记得EE312这门 ...

  5. 嵌入式学习——使用定时器输出PWM波形,实现 LED呼吸灯的效果

    嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 目录 嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 1. 任务要求 2 PWM波介绍, 2.1 什么是PWM(Pu ...

  6. msp430学习书籍

    虽说接触了MSP430好久,但每次都是学了些入门皮毛,这次趁项目要深入研究一下了. 下面是在亚马逊上看到的几本MSP430的书: MSP430单片机原理与应用:MSP430F5xx/6xx系列单片机入 ...

  7. STM32CubeMX与HAL库学习--基本定时器定时中断

    STM32CubeMX与HAL库学习--基本定时器定时中断 背景 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 背景 本人小白,最近在学着使用STM32CubeMX与HAL库 ...

  8. 单片机MSP430入门-理论⑥--定时器模块-定时器A

    单片机MSP430入门-理论⑥--定时器模块-定时器A 上期大概给大家汇总介绍了,在MSP430环境下的定时器模块,其中主要又说了下看门狗定时器,这是一款比较特别的定时器,又能当定时器,又能当系统错误 ...

  9. nrf51822学习之定时器的探究

    SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机.32位ARM Cortex-M0处理器.128kB Flash存储器.以及丰富的数字接口.SYD8801片上集成了 ...

  10. MSP430学习笔记(2)定时器A

    欢迎访问我的个人网站:http://www.qingshuimonk.com/ 3.        定时器A: 所有MSP430系列的FLASH型单片机都含有定时器A(Timer_A),由一个16位定 ...

最新文章

  1. 20155222卢梓杰 实验三 免杀原理与实践
  2. cv2 imwrite中文路径_python3下使用cv2.imwrite存储带有中文路径图片的方法
  3. C语言的结构变量定义规则,嵌入式学习笔记:c语言结构体的定义和使用
  4. 用户可以通过软件对计算机,用户可以通过____软件对计算机软、硬件资源进行管理。...
  5. 文件(1):文本文件、二进制文件、文件编码
  6. mysql的month_MySQL MONTH()用法及代码示例
  7. 怎样使用计算机网络,手机使用电脑网络怎么操作 手机使用电脑网络操作方法...
  8. 掌上飞车-艳云脚本云控系统
  9. 北京移动长漫亲情省业务(长途、漫游超便宜)
  10. i.MX6ULL系统移植:Linux移植6 - Linux 内核移植
  11. Chrome实现独立代理
  12. Win10微软补丁KB5018410致金蝶客户端无法连接中间件
  13. php生成小学数学练习题
  14. 一条命令导出电脑中所有wifi账号密码
  15. TwinCAT3中授权码激活操作的详细步骤和注意事项
  16. 私有部署企业微信项目
  17. 2020年计算机应用基础本试卷号1200,计算机应用基础试卷2020年.pdf
  18. 青蛙有那么蠢吗?(转载)
  19. Ubuntu12.04下Android4.0.4源码的下载及其编译过程
  20. 电脑去水印工具哪个好用?

热门文章

  1. mysql 过滤微信昵称表情符号_js 过滤微信昵称的表情符号
  2. stm32开发环境搭建及应用
  3. linux用户起名,如何在Linux中重命名用户(也可以重命名组和主目录)
  4. fn映射 mac 键盘_fn键:Mac Fn组合按键功能与使用方法
  5. c语言摄氏度单位ascii,请问温度标识 ℃,ASCII码怎么写
  6. 计算机设置桌面文件夹,win10电脑怎么更改桌面文件夹路径
  7. freyja最重要的一个功能完成
  8. 人工智能--不确定性推理概述
  9. usb计算机采集卡,关于usb视频采集卡 hdmi设置你可能不知道
  10. 各种工作面板护眼模式颜色设置