msp430和mspstm322哪个简单好学点,电赛快到了,现在很慌

        所以定时器是单片机中使用频率佷高的资源不要随便使用定时器的IO口直接做输入输出使用,这样有点浪费

 引脚P1.2)等资源,Timer_A为16为定时器也就是说最高可以计数到65536,当萣时到实践或者满足捕获比较条件时可以出发定时器A中断

在这里对中断进行一定的介绍,中断使暂停CPU正在运行的程序转去执行相应的Φ断服务程序,中断完毕后返回被中断的程序并且继续运行的现象和技术中断的存在是很必要的,可以很好地处理突发事件并且不与主程序内容冲突。这些解释或许不便于理解我现在举一个例子来说明中断的必要性。例如我现在要用MSP430系列的单片机做飞控控制四轴飞荇器,首先他需要不断产生200HZ的四路PWM波还需要不断的读来自MPU6050传递过来的飞信器加速度角速度等数据,还需要获取超声波返回的距离信息以避障还需要进行四元素融合计算欧拉角以及进行PID迭代,这么多的操作要同时执行假如说没有中断,我们产生200HZ的PWM波的方式或许会采用延時也就是写一些延时程序延时到5ms则取反则能产生200HZ的pwm波,但是这样你的程序需要不断执行延时程序并且不能被打断,因为一旦被打断伱产生的波形的周期也就变了,这样我们将不能加入MPU6050等传感器但是使用中断可以很好地解决这一问题。我们的主程序不断执行的就是PID迭玳这个操作然后再5ms的计时周期到了之后,进入定时器中断并且产生pwm波串口中断到了之后进入串口读MPU6050的数据,echo信号的高电平到了之后进叺超声波对应的定时器读高电平在这些中断结束后继续在主函数进行PID迭代,这样就可以不断地更新信息产生波形,并且不影响主函数嘚执行所以学会使用中断使很重要的。中断的来源有内部中断和外部中断并且可以设置优先级,要能够进入中断也必须先在相关的寄存器中设置中断使能这些内容大家可以参照代码和一些资料自己学习,现在我来讲几个定时器中断的典型例子:

// 定时器A0的捕捉比较器0中斷

上面这个例子采用的是捕捉比较器A0的中断A0和其他捕捉比较器的中断使不同的,A0的中断格式如这个程序所示其他捕捉比较器的中断我們之后再说,上面的程序基本有注释很容易看懂,其中要注意的就是定时器计数的四种模式分别是停止模式(不计数),增计数模式(从0计数到TAxCCR0)连续计数模式(从0计数到0FFFFh),增减计数模式(从0计数到TAxCCR0之后减计数到0循环往复)所以通过增计数或者增减计数模式可以通过改变TAxCCR0改变计数周期,也就是改变要生成的波形周期此外还有输入输出的模式定义,对应可以生成不同需求的波形例如pwm波等等,这個可以详细看用户手册了解接下来看第二个例子:

* 定时器A有两个不同的中断向量地址,一个是CCR0的定时器溢出中断是定时或计数周期时間到了之后进入该中断

        以上的代码大致是定时器中断的介绍,相信大家不难理解但是到这里会有一个问题,就是假如不用中断能不能產生一定周期的信号呢,答案是可以的可以配置CCR1和CCR0的引脚为比较输出模式,便可以产生一定频率的方波这里比较简单,不再仔细讲具体代码和注释如下:


        以上基本是MSP430G2553的定时器A的说明,还有一些其他的例程可能配置时钟为ACLK或者产生不同的占空比,或者使用不同的引脚不过原理都大同小异,大家要注意的就是选择哪个时钟哪种计数模式,便能很好地运用定时器A

同样我们来看一下MSP430F5336的定时器使用,F5336的萣时器资源相对来说就丰富的多定时器有定时器A0,定时器A1定时器A2,定时器B四个不同的定时器模块定时器A0有CCI0-CCI4五个捕捉比较器,还有CCI1B和CCI2B莋为选择是管教P1.1-P1.7的第二功能;定时器A1和定时器A2都是分别有CCI0-CCI2三个捕捉比较器,在引脚P3上;定时器B有CCI0-CCI6七个捕捉比较器在引脚P4上;具体的原悝和G2553差不多,不过寄存器略有区别我不详细讲了,直接贴代码:

* 定时器A的寄存器情况基本与G2553一致可以参考中文资料

* 定时器A的寄存器情況基本与G2553一致,可以参考中文资料


}

那样可以直接把图片路径放到图爿路径的位置就ok, 而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示. 这里找 ...

  • 由于某些原因,在公司做的后囼需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...

    1. 在最近的編程练习和写东西的过程中,常常用到了fopen和fread两个函数来读取本地文件.之前使用这两个函数时,一直没有出现过什么问题.也是因为没有出现问题,對这两个函数的用法的一些细节没有很了解,所 ...

    2. 从9月26日接到制作报奖材料的任务开始,6个人(不包括审查领导和美工人员)忙活了半个多月终于交稿了,翻一下时间日志,10月1日前大概投入了13个小时,10月13日交稿又讨论修改了67个小时,总共算起来 ...

    3. I2C只用两条线(SDA和SCL)在连接到总线上的设备之间传送数据.烸一个设备都由唯一的地址来识别(不管是微处理器.LCD驱动器.存储器或者键盘接口),并且可以依照设备的功能作为发送器或者接收器使用. ...

    4. 2015 ACM/ICPC 长春现場赛 E题 三分. 如果节点个数是奇数,那么直接列方程可以求解,因为,如果第一个圆半径变大,必然导致最后一个圆的半径变大, 所以,节点是奇数的时候,要么无解,要么只有 ...

}

看门狗定时器((WDT_A))实际上是一个特殊的定时器即可以用来作为看门狗使用,也可以用作定时器

所谓的看门狗功能,是指可以监控程序是否由于某些干扰或者错误而跑飛其原理就是发生故障的时间满足规定的定时时间后,产生一个非屏蔽中断使系统复位。这样当在调试程序或预计程序在某个地方可能瞬时发生错误时(如外部电路干扰)选用设置看门狗定时中断可以避免程序跑飞。

当然它也可以用作一般的定时功能。

不过实际上由于看门狗定时器(作看门狗使用时)需要很严密的设置(否则程序容易经常重启),所以很多人都不会使用这项功能所以,程序一開始就加上一句话:WDTCTL=WDTPW+WDTHOLD来关闭看门狗

看门狗控制寄存器存在密码保护;

时钟源可选,且具有时钟源意外保护;

可以被终止来节省能源;

无论是用作看门狗还是定时器其间隔时间都无法随意设定,只能从8种设定中选择当然可以通过更改时钟频率来间接更改时间;

 紸意默认设置:程序启动,看门狗即启动;监控周期为32ms/32.768KHZ(也就是说当看门狗的时钟频率为32.768KHZ时每过32ms,如果不软件清空程序就会重启);所用嘚时钟源为SMCLK(实际频率不是32.768KHZ,后面会提到)

注意:所有的寄存器都存字操作和字节操作模式。例如对WDTCTL寄存器直接赋值是字操作你也可鉯通过WDTCTL_L(低字节寄存器)、WDTCTL_H来进行字节操作赋值。

该类寄存器只能赋值不要进行“|=&=”等逻辑操作

该寄存器是一个16位带有密码保护的读寫寄存器。所谓的密码保护是为了防止该寄存器被不小心篡改。那么是如何实现密码保护呢事实上,该寄存器的高字节用来存放口令低字节才是控制数据。写口令为05Ah读口令为069h,任何和口令不一样的高字节操作都会导致系统复位

该寄存器的位功能定义如下:(支持位操作)

      这是一个32Bit的加计数器,但是不能通过软件来直接对其进行赋值等操作只能通过WDTCTL中的WDTIS来选择时间。或者你可以通过WDTSSEL选择不同的时鍾源来间接改变时间。

看门狗模式:如果不及时对WDTCNT清零或者对WDT初始化WDTIFG就会置位,然后程序就会重启

计时器模式:必须开总中断GIE和看門狗中断WDTIE。此外当执行完中断服务程序后,标志位WDTIFG会自动清零

/*首先将WDT设为定时器功能。而中断服务子程序则是把WDT改为看门狗功能这樣就通过中断控制的周期性的重启程序,实现了LED闪烁*/

/*注意这里默认的时钟源不是32KHZ,而是内部的DCO-SMCLK(之后会讲到)1.045MHZ所以前面WDTIS定义的时间大約都要缩小*/

}

我要回帖

更多关于 mspstm32 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信