【MSP430趣谈】MSP430第三讲
不知道前两讲中有没有对430有一个大概的概念和印象。
今天就先谈谈我学习的单片机的一些想法和经验吧。我想写这个的原因主要还是希望面对初学单片机的人来说的,对于初学的话我们经常都会去看一些参考书啊,之类的。找各种资料,对于刚刚接触电子行业的话我们所先学的可能都会是51之类的,并且对于学校的教学也基本以51为基础来讲。51也会让你了解底层的东西具体的运作方式等等。而我想通过430的原因是它是一款非常优秀的单片机,性能也比51好很多,同时对于430来说他的低功耗非常的出色。大家选择这个作为自己的单片机入门也是不错的。但是有个问题就是430的板子相对而言资料比较少,而且相对而言资料也大部分是英文的。所以说可能选择这款单片机的话相比51有点门槛,所以说希望这个教程帮助大家能够更好的入门430。
对于430内部的资源介绍以及他相关优秀的地方我们在这里就不介绍了,大家可以通过相关的书籍了解到,也可以通过去TI的官方网站他也有说到,这里我们就不过多去描述这些东西,我们在这里更多的话是注重他的应用,我们也希望通过这个教程大家能够熟悉单片机的一些想通的地方,那么当你真正理解了一款单片机,那你在接触新的单片机,那么你就需要一到两个礼拜就可以入门了。
当然对于单片机的特性和资源构造我们也需要去了解的,我们这一讲在最后会附上TI官方给出的FR5969的官方视频教程,对于初学者来说可能有点吃力,会出现很多专有名词听不懂的情况,当然你如果已经有了模电数电的基础的话那么相对就容易理解很多。
废话讲够了,我们正式进入今天的一讲哈!
今天我们所涉及的就是GPIO的使用了,通过我们上次说的点亮一个LED的演示大家就有一点印象,但上次我们是通过直接调用CSS所自带的sample所生成的代码,不是通过我们自己的书写代码得到结果,这里也需要提醒大家说,就是市面上有很多开发板会在销售的时候总是会带有他们的配套代码,经过测试可以使用的代码。但是这样我们往往说会编译他的代码,下进去,咦,可以用了就跳过这个部分了,相当于学会了,但并不是这样的,只有当你自己去做的时候你才会发现,自己遗漏了多少细节,多少的错误,这样才算是一个好的学习过程。但这其中的方法具体是什么我也说不清,也有很多学完单片机后去做项目,这也算是最好的检验你有没有学会这款单片机最好的办法了。
我们后期也会加入具体的案例,案例具体是什么大家可以征集一下哈,看大家想利用430去做什么。另外我这里用的TI官方给的FR5969的开发板的话外设比较少,我们也将通过自己画板子的方式来自己制作一些外设模块,到时也会开源给大家。
不多说了,我们开始吧!
同样第一步选择工作空间,这里说一下,CSS是基于Eclipse进行开发的,所以大家之后对于Eclipse的强大感到震撼,他既可以进行开发STM32,Freescale,以及Java应用,以及安卓等等。(这其中对应的Eclipse的版本不同,具体的话百度哈!!)
OK后进入主页。
选择New Project建立工程,具体方法我们上次说过了哈,这里不再累述。
有两个区别这里说明一下。一个是我们的工程存放的位置改了,方便我们管理,另外一个就是我们建立的工程师Empty Project(with main.c)。
点击Finish完成工程的建立。
得到这里的代码,main.c中有这样一行代码,我们来解释一下这是啥哈。
通过后面的英文注释我们明白这是要停止看门狗时钟,引出几个疑问,看门狗是啥,为什么要禁止呢?
学习就是发问的过程哈!建议大家就是能够有一个自己的笔记本,来记一下这些知识点,会比较好,养成这个习惯,这里只是建议哈,看个人的学习方法哈。
这里需要借助我们第一讲分享给大家的资料哈!
这里我们大概看一下这几份文档是什么
1.MSP-EXP430FR5969 LaunchPad Development Kit Quick Start Guide.pdf
这一份是我们板子中拿到时当中的宣传页,里面解释说明了板子的特性等,以及板子中一些管教定义。
2. MSP430FR5969 LaunchPad Development Kit (MSP-EXP430FR5969) User's Guide.pdf
这个文档是对我们使用的FR5969板子的整体介绍,包括一些硬件构造,以及相关的原理图介绍。后续我们需要对硬件的修改可以在这里找到参考信息。
3. MSP430FR59xx 混合信号微控制器.pdf
这个是我们器件的数据手册,其中相关的一些内部设计以及相关的设计资源都会在这个文档中阐述。
4. MSP430FR58xx, MSP430FR59xx, MSP430FR68xx, and MSP430FR69xx Family User's Guide.pdf
这个文档的话就是我们的接下来比较经常使用的文档,之后要用到的相关寄存器定义之类的我们都会在这里找到。
5. MSP430 Hardware Tools User's Guide.pdf
430硬件工具使用指南等等。这些参考的文档是我们在官网上可以找到的,那我们该如何去使用这些东西呢?也不要太过于担心,一开始确实会很不清楚为什么这个寄存器是这样,这样写的道理在那里,随着大家的深入学习会慢慢了解的。
好了,我们懂得了参考资料的相关的内容,那么接下来我们来看看该如何使用了。大家也一定要注意,很多资料都是英文的,当然能够找到中文的那更好,但也洗完大家能够养成一个看英文资料的习惯。
看到第一行代码:
这里我们理解一下看门狗是什么,英文全称为:Watch Dog Timer,是单片机非常重要的一个片内外设,那么它是用来干嘛的呢?(这里解释一下外设的意思,就是单片机其实说白了就是一个内核和一些外设构建而成,内核大概就是运算器和控制器,言语可能不大合理,但基本结构大家了解一下)说白了他就是一个定时器,定时器的概念就是可以和闹钟定时一个道理,到了时间我们就应该起床,单片机也是一样,到了定时这个时间去做其他的事。但是看门狗这个“定时器”和其他定时器不一样在于他的定时时间到了会使得系统进行复位。从而我们可以利用该特性对系统进行监控,设定一些相关的标志位进行检测系统是否正常工作,同时要在看门狗设定时间内对他的计数值进行清零,否则当它到达计数时间之后他就会清零了。同时如果系统的标志位不正常我们也可以设定让其复位。
那我们来看一下为什么要用这三个英文单词分别代表什么。
我们打开该文件,MSP430FR58xx, MSP430FR59xx, MSP430FR68xx, and MSP430FR69xx Family User's Guide.pdf
找到标签中的
该文档会给出看门狗内部的构造以及相关的介绍,这里我们暂时不细说,我们先看下我们这里改怎么使用和配置。
在图上的的红色方框中给出了看门狗定时器的寄存器框图,这里也给出了每一位的定义,可以看出看门狗的配置是由一个16位的寄存器来配置的。同时文档给出了每一位的介绍,给出他们的功能和使用方式。
我们这里要关闭看门狗,通过下面的描述,我们需要输入看门狗的“密码”,因为看门狗的寄存器是被锁定的,从文档中可以找到他的说明,就是我们下面的红色所话的地方。
所以也就是说我们要修改看门狗,首先是需要输入“密码”,才可以进行配置。
所以我们的第一句代码就是要:
WDTCTL = WDTPW; //这里就是进行“开锁”的代码
好了下面我们可以修改里面的值了,从上面的表格中我们可以看到WDTHOLD位是用来关闭它的。所以我们下一行就是:
WDTCTL = WDTHOLD; //关闭看门狗。
这样我们就完成了第一行代码了。
但是他这里为什么是一个“+”号呢?这是二进制的运算,我们这里不再解释哈,大家有兴趣的可以右键定义名找到他的16进制数,然后去计算下就明白了。这里我们演示一个例子,希望大家下次可以自己去摸索一下。
双击定义名,右键红色框,跳到下面。
这里宏定义了相关的430内部的一些寄存器,通过这些定义帮助我们更好的进行开发,想想你要是全部用右边的16进制代码,可能你一开始心情愉悦,搞两天430你就心灰意冷了。
好了,这样我们的430就不会自动进行复位了。接下来我们需要进行控制IO口了,首先我们先来明白一下控制一个IO口需要做什么?第一步我们需要对IO进行功能配置,其中包括把它设置为基本IO,不是什么IIC,UART这类的复用功能,现在说这些可能大家还不太明白,但是可以先了解下。第二步就是设置基本的输入输出了,然后就是IO的应用了。大概是这样的过程,类推到其他单片机上也基本类似,有的还需要配置时钟等等,这个等大家自己去应用其他单片机的时候再去看。这里我们解释一下430的IO使用。
返回我们刚刚打开的PDF文档。
打开第十章,在I/O Configuration中有一个这样的顺序。
(都是英文的啊,所以英文还是很重要的,要好好学)
翻译过来
1.第一步我们要初始化IO口,配置相关的寄存器,包括PxDIR,PxREN,PxOUT,PxIES。
我们这里解释一下这四个寄存器:
(1)PxDIR 方向设置寄存器
(2)PxREN 上拉或下拉电阻使能寄存器
解释下上拉下拉电阻:
上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下拉同理,也是将不确定的信号通过一个电阻钳位在低电平。这里我们可能解释的下需要比较大的篇幅,大家可以去专门查一下这个,相对比较容易理解。上拉的话就是电阻连接信号线到VCC,下拉的话电阻连接到GND。
(3)PxOUT 设置输出寄存器,可以在这里设置输出高或低
(4)PxIES 设置中断边沿选择寄存器,可设置为上升沿或者下降沿触发
2. 清除LOCKLPM5
需要关闭LPM5的模式,这是FR5969的几个低功耗模式中的一种,这里我们暂时不解释这个,这里我们只需明白没有关闭这个模式的话,我们对IO口的设置是无效的。
3. 如果没有从LPMx.5中唤醒,这里我们需要清除PxIFGs来避免错误的端口中断。
4.使能端口中断,寄存器为PxIE。
好了,现在我们应该明白了该怎么写了吧。
我们先关闭LPM5。
在2.3.4章节中我们找到PM5CTL0的寄存器说明。红色边框中说明了设置端口需要解锁这个位。所以代码如下:
PM5CTL0 &= ~LOCKLPM5;
这里我们看到使用了&和~的符号,这是为什么呢?从寄存器描述上我们看到LOCKLPM5这个位需要设置为0,右键找到定义LOCKLPM5的数值为:
去反之后为0x111E(二进制数为1111_1111_1111_1110)然后再和PM5CTL0按位与。
这样有什么好处?这样可以保证其他位不发生改变。举个例子:
(PM5CTL0 = 1110 1101 0110 1101) & 1111 1111 1111 1110 =
1110 1101 0110 1100;
可以明显看到,其他位不发生改变只改变其中一位!
接下来我们需要设置端口:
MSP430FR5969 LaunchPad Development Kit (MSP-EXP430FR5969) User's Guide.pdf
需要打开这个文件,找到原理图,在文件的最后几页,找到下图:
我们看到LED2连接到P1.0。我们这里是需要P1.0设置为输出同时输出高点平,延时一点时间变为低电平。
第一步:将端口设置为输出。
P1DIR |= 0x01; 这里用“|”的作用同上面的去反后相与的相同,不改变其他位的原来数据。
第二步:设置输出的高低电平。最后我们得到下面代码。
这里说一个小技巧:
打开CCS中的windows菜单下的preference
按照1.2.3步骤可以设置代码自动补全的功能。
好了编译下载进去,我们就可以看到灯一闪一闪。
之后大家可以试下分别点亮开发板子上面的两个灯,交替闪试一下。
欢迎观看