[MSP430G2 LaunchPad入门系列] 第1篇 - MSP430简介及CCS开发环境

[复制链接]

6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
查看: 352回复: 10 发表于 2019-1-14 17:03:12   只看该作者
本章中将对MSP430系列做总体介绍,并帮助大家熟悉MSP430的开发环境——CCS。

本章目录如下:
章节题目
1.1 MSP430简介
1.2 MSP430G2 LaunchPad介绍
1.3 CCS的安装
1.4 首次使用CCS
1.5 使用CCS创建工程
1.6 导入现有CCS工程
1.7 单片机C语言入门

MSP430G2 LaunchPad 相关资源链接:
本章内容PDF下载: 第一章-MSP430简介及CCS开发环境.pdf (1.76 MB, 下载次数: 15)

6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-14 17:08:01   只看该作者
本帖最后由 Shuyang 于 2019-1-14 17:11 编辑

1.1 MSP430简介

单片机是一个集成电路芯片,是包括了CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能并将其集成到一块硅片上构成的一个小而完善的微型计算机系统。一般把单片机也称为Microcontroller,或MCU。

单片机的应用极其广泛,大到汽车、工业,小到家电、个人消费电子品,里面都有单片机的身影。可以说凡是要进行控制和运算的应用,都有单片机的用武之地。

MSP430是16位的单片机,发展到现在MSP430已有多个系列共500多种型号。不同的MSP430系列集成了不同的外设,主要包括有Flash、RAM、定时器、GPIO、ADC、串行通信模块等。

MSP430以低功耗而闻名,其低功耗水平在业界领先,非常适用于电池供电设备等对于功耗要求较高的领域。
1.png

MSP430G2553是MSP430家族中最适合入门的型号。G2系列在MSP430产品线中具有很高的性价比,价格低廉但是资源丰富,单片机上常用的外设一个不少。目前市面上有大量基于MSP430G2553的资料和书记,并且TI官方的LaunchPad可以帮助开发者快速入门。

MSP430G2553的主要特性如下:
    - 高达 16MHz 的 CPU 速度
    - 1.8V至 3.6V 工作电压
    - 16KB Flash,512字节RAM
    - 模拟与数字外设的广泛性能
    - 推出电容式触摸感测 I/O 端口
1.2.jpg

MSP430G2553中集成的外设包括GPIO、定时器、ADC、比较器、USCI串行通信、电容触摸等。我们将在后面分别介绍各个外设的使用。


6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-14 17:20:53   只看该作者
本帖最后由 Shuyang 于 2019-1-14 17:23 编辑

1.2 MSP430G2 LaunchPad介绍

MSP430G2LaunchPad是基于TI MSP430G2553单片机的口袋实验板。此板麻雀虽小,五脏俱全。除了排针扩展芯片引脚之外,板上还有两个按键、两个LED,另外板上带有板载仿真器,只需要一根USB线就可以直接连接电脑进行编程和仿真。
1.3(1).png

拿到MSP430G2 LaunchPad之后,首先看到板子分为上下两个区域。上边区域是板载仿真器,用于向单片机下载程序以及进行在线仿真;下边区域包括单片机主芯片MSP430G2553,左右两排插针分别对应单片机的20个引脚。

LaunchPad下方有几个可以由用户编程实现自定义功能的输入/输出接口。左下方按钮连接单片机的P1.3口,可以作为输入按键使用;两个LED分别通过跳线帽连接P1.0和P1.6,可以作为输出。如需断开LED和引脚的连接,只要拔掉跳线帽即可。

芯片旁边还留出了外部晶振的焊盘,LaunchPad包装中预先准备了晶振,如果需要使用外部晶振,只要将包装中的晶振焊接到焊盘上即可。

MSP430G2LaunchPad相关文档下载

6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-14 17:30:51   只看该作者
本帖最后由 Shuyang 于 2019-1-14 17:33 编辑

1.3 CCS的安装

开发MSP430推荐首选TI官方的Code ComposerStudio集成开发环境,简称CCS。作为TI官方开发工具,CCS中集成了官方最新的编译器版本、代码库和各种支持工具。

在TI官网上(www.ti.com.cn)可以免费下载CCS安装文件。从官网首页“工具与软件”下方选择Code ComposerStudio – IDE即可进入下载页面。
0.png

目前CCS共有两个版本,除了传统的安装包外,还有在线版本CCS Cloud。如果想体验CCS Cloud,可以直接点击“Launch CCS Cloud”,然后按照提示操作即可。不过针对经常开发大量代码的用户,建议还是安装离线的CCS。点击“Get Code Composer Studio”可以进入离线版CCS下载页面。

进入页面后即可下载最新版本的CCS。如果想要下载其他历史版本的CCS,可以从CCS Wiki页面获得下载链接:http://processors.wiki.ti.com/index.php/Download_CCS

我该选择哪个版本的CCS
对于MSP430G2553的开发来说,CCS 5.0以上的版本均可以支持。需要注意的是,CCS 6.2.0版本可以算是一个分水岭,在6.2.0之后CCS中的TI官方资源库(Resource explorer)变成了在线版,这也就意味着新版本中要查看例程库必须联网。如果要脱离网络使用Resource explorer,那么请选择6.1.3或以下的版本。

CCS安装注意事项:不要使用中文路径!
在CCS安装过程中最常见的问题就是使用含有中文字符的路径所导致的错误。切记,CCS的安装路径和使用过程中所有工程的存放路径都不可以含有中文字符或其他非ASCII字符。以下列出一些常见的错误:
  • 错误一:CCS安装文件的存放路径含有中文,例如C:\user\我的下载
  • 错误二:CCS安装的目标路径含有中文,例如D:\MSP430资料\CCS
  • 错误三:Win10用户名含有中文,在这种情况下由于CCS会使用到Win10系统的环境变量,也会导致CCS运行时出错;
  • 错误四:用户代码的存放路径含有中文,例如C:\CCS例程
总而言之,在使用CCS的过程中,请确保与CCS有关的一切路径都不要包含中文字符。


6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-14 17:46:29   只看该作者
1.4 首次使用CCS

1)  打开CCS,会弹出一个对话框请用户选择workspace的路径,可以选择任意一个文件夹,但请注意路径必须为全英文,不能有中文字符。下方的“Use this as the default anddo not ask again”不建议勾选,如果勾选CCS之后将把此路径作为默认workspace路径不再更改。选择好workspace之后单击OK进入CCS。
1.10.jpg

Workspace文件夹中包含所有的CCS设置,包括工程的设置和视图,这样workspace再次打开时可以看到上一次关闭时的工程。Workspace中还包含所有工程的列表,当CCS关闭时workspace会被自动保存。

2)  接下来应该可以看到TIResource Explorer窗口出现在CCS中。TI Resource Explorer中包含了各种文档和例程,我们将会在后面的章节讨论。现在请先点击TI Resource Explorer标签上的X关闭此窗口。

3)  现在应该可以看到一个空白的CCS工作区窗口,如下图。
1.11.jpg

请注意右上角的“CCS Edit”按钮,CCS提供了两种工作区模式,现在我们看到的工作区是在“CCS Edit”模式下的,此时各功能区布局、工具栏、菜单等都如上图所示,是为了方便创建、编写、及编译程序所设的。另外还有一个“CCS Debug”模式,当用户点击debug按钮时,CCS会自动进入此模式,此时会出现一排debug工具栏,方便用户进行调试。

6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-14 17:56:57   只看该作者
本帖最后由 Shuyang 于 2019-1-14 18:02 编辑

1.5 使用CCS创建工程  
     
1.5.1 创建一个新工程(Project

在CCS工程中包含了所有源文件以及输出的可执行文件(.out文件)。要创建一个CCS工程,请点击:File ->New -> CCS Project

出现如下对话框。Project name中填写项目名称(不能有中文),Device菜单中选择芯片型号MSP430G2553,项目模板选择EmptyProject (with main.c),然后点击Finish。

1.12.png

CCS的workspace中会出现刚刚新建的工程,单击工程名称,会出现active字样,代表正在对当前工程进行操作。

1.13.png


1.5.2 编辑源代码

接下来,我们就可以在main.c文件中加入源代码。例如如下代码:
  1. #include <msp430.h>

  2. int main(void)
  3. {
  4.     WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  5.     P1DIR |= 0x01;                            // Set P1.0 to output direction

  6.     for (;;)
  7.     {
  8.         volatile unsigned int i;

  9.         P1OUT ^= 0x01;                          // Toggle P1.0 using exclusive-OR

  10.         i = 50000;                              // Delay
  11.         do (i--);
  12.         while (i != 0);
  13.     }
  14. }
复制代码

1.5.3 编译并运行程序

1)  点击像小虫子一样的“Debug”按钮,CCS会自动保存当前源代码,完成程序编译,并将程序下载到LaunchPad中。如果出现Ultra-Low-Power Advisor (ULP Advisor) 的提示窗口,点击Proceed即可。程序下载结束后,CCS会自动进入Debug视图。

2)  在Debug视图下,可以看到下图所示的调试工具按钮。点击运行(Resume)按钮 ,程序将开始运行。如一切正常,将会看到LaunchPad上的红色LED灯以一定频率闪烁。

如果想暂停程序,可以点击暂停(Suspend)按钮 。点击停止(Terminate)按钮 ,程序会停止运行且CCS将退出Debug视图,但请注意程序将会保持在单片机的flash存储器中,下次上电时程序仍将从头开始执行。

1.14.png



6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-14 18:05:49   只看该作者
本帖最后由 Shuyang 于 2019-1-17 15:03 编辑

1.6导入现有CCS工程

在CCS菜单中选择Project->ImportExisting CCS Eclipse Project,点击Browse找到CCS workspace所在文件夹,点击OK,CCS会自动将所选文件夹及其子文件夹下所有的CCSProjects列出。从列表中找到您想要导入的工程,点击Finish即可导入此工程。

在导入工程时有一个选项是“Copy projects into workspace”,如果勾选,工程文件将会被复制到workspace文件夹中。
1.16.png

为何有些工程无法导入?

在导入工程时,有时会发现有些工程是灰色的,无法勾选(如下图所示)。这是因为workspace中已有同名的工程了(无论内容是否完全一致)。如果是自己重复导入工程,把之前的工程文件删除即可;如果确实重名了,解决办法只能是修改其中一个工程的名称。
1.17.png

导入MSP430ware例程

在CCS中有一个非常实用的资源库叫做MSP430ware,其中有MSP430系列所有芯片的文档资料,以及丰富的例程。用好这个资源库可以让我们的MSP430学习之旅事半功倍。

在CCSv5.x中打开View->TIResource Explorer菜单,在package处选择MSP430ware,即可打开资源库主界面。在主菜单中共有3个功能,分别是Device、Development Tools和Libraries。(请注意,在CCS 6.2.0以上的版本中,ResourceExplorer已经改为在线版,需要联网才能使用。另外也可以直接访问TI的Resource Explorer网站来浏览其中的内容:http://dev.ti.com/tirex/#/
1.18.png

展开Device菜单,找到要编程的目标芯片(MSP430G2xx),再展开Code Examples并找到MSP430G2x53,单击芯片名称后右侧会出现例程的列表。其中包括工程名称和描述。仔细看一下,工程名称是以“芯片名+外设名+序号”来命名的,也就是说每一个外设都有多个例程。为什么会有这么多例程呢?看一下右边的描述就会发现一个外设下不同的例程是根据外设的不同模式来编写的,例如GPIO例程有4个,分别是针对输出、输入、中断等不同的模式。
1.22.png

下面用一个简单的例子来说明怎么把例程导入到workspace中。请在例程列表中找到“msp430g2xx3_1”这个工程,看右边的描述就知道这个例程是一个简单的切换I/O口状态的例程,可以实现P1.0对应的LED闪烁。点击工程名,在出现的菜单中选择芯片MSP430G2553,然后单击OK,左边的工程列表中就会出现对应的工程了。
1.23(1).png

MSP430ware中的例程不仅数量多,而且程序规范、注释完整,是我们学习单片机编程的好帮手。在学习单片机的各个外设时,不妨先到MSP430ware的例程库中看一看对应的例程,对于我们理解和掌握MSP430单片机大有帮助。

6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-16 15:20:48   只看该作者
本帖最后由 Shuyang 于 2019-1-17 15:02 编辑

1.7 单片机C语言入门       
   
1.7.1 单片机的寄存器
   
在前面的示例程序中我们发现对单片机进行编程实际上就是改写寄存器的值。单片机各个外设的功能其实是预先固定的,而寄存器就像是这些功能的控制接口,通过改变寄存器的值就可以在这些功能中进行选择。还有一些寄存器直接对应引脚的状态,例如GPIO的输入/输出寄存器。像以下语句:

P1OUT = 0x01;

这句话其实就是赋值给P1OUT这个寄存器,这个寄存器是GPIO的输出寄存器,赋值之后对应引脚的输出状态就会发生改变。

P1OUT寄存器共有8位,分别是从P1.0-P1.7。要给这个寄存器赋值,其实就是写入一个8位的二进制数值,例如00000001。在C语言中,为了尽量精简代码,一般把这个8位二进制数换算成2位16进制数,前面加上“0x”表示这是一个16进制的值。这样二进制的00000001也可以表示为0x01,那么上面一句P1OUT =0x01实际上是把P1.0赋值为1,P1.1-P1.7赋值为0。

1.24.jpg

每次上电之后,寄存器都会回到它们的初始值。MSP430G2系列单片机中所有寄存器的说明都在“MSP430x2xx Family User's guide”这篇文档中。使用哪个外设,就到文档对应章节中去查找寄存器的定义。


1.7.2 MSP430的位操作

上一节的例子中我们发现MSP430单片机的寄存器赋值都是直接给整个寄存器赋值,如

P1OUT = 0x01;

那如果只想给寄存器其中的一位赋值,能否直接对某位进行操作呢?答案是不可以。因为MSP430属于RISC精简指令集单片机,它有一个特点就是不能进行位操作。那么如果只想操作某一位,而不关心其它位,例如我只想把P1.0赋值为1,但我不知道也不想改变P1.1-P1.7的状态,该怎么办呢?下面就来介绍MSP430中进行位操作的办法。

1)写位操作

在对某字节使用“=”进行写操作时,所有位的值都将被改变。如果先将原字节读出来,再使用按位操作符对原字节进行赋值,则可“等效”实现对单个位的写操作。下面举例来说明MSP430中最重要的3个写位操作语句。

例:P1.01P1.10P1.2取反,不影响其他位。
  1. P1OUT |= 0x01;            //按位“或”,相当于置1        
  2. P1OUT &= ~0x02;         //取反后再按位“与”,相当于置0
  3. P1OUT ^= 0x04;           //按位“异或”,相当于取反
复制代码

在CCS新建工程时,都会包含“MSP430.h”,这个头文件其实相当于一个目录,会根据当前工程所选的芯片型号链接到对应的头文件,例如MSP430G2553芯片就会链接到“MSP430G2553.h”。这些头文件都在“C:\ti\ccsv5\ccs_base\msp430\include”目录下,其中包含了许多宏定义,利用这个宏定义可以帮助我们用更直观的方式来写寄存器,不用每次都把要写的值换算成16进制了。

例如MSP430G2553.h中有如下宏定义:
  1. #define BIT0                   (0x0001)
  2. #define BIT1                   (0x0002)
  3. #define BIT2                   (0x0004)
  4. #define BIT3                   (0x0008)
  5. #define BIT4                   (0x0010)
  6. #define BIT5                   (0x0020)
  7. #define BIT6                   (0x0040)
  8. #define BIT7                   (0x0080)
  9. #define BIT8                   (0x0100)
  10. #define BIT9                   (0x0200)
  11. #define BITA                   (0x0400)
  12. #define BITB                   (0x0800)
  13. #define BITC                   (0x1000)
  14. #define BITD                   (0x2000)
  15. #define BITE                   (0x4000)
  16. #define BITF                   (0x8000)
复制代码

有了BIT0-BITF的宏定义,上面例子中的语句就可以改写为
  1. P1OUT |= BIT0;            //按位“或”,相当于置1        
  2. P1OUT &= ~BIT1;         //取反后再按位“与”,相当于置0
  3. P1OUT ^= BIT2;           //按位“异或”,相当于取反
复制代码

另外,也可以用加号对多位同时操作。例如要将P1.0、P1.1、P1.2均置1,不影响其他位,可以写
  1. P1OUT |= BIT0 + BIT1 + BIT2;
复制代码

请注意,采用按位操作并不意味着MSP430具备了位操作能力,按位操作实际上对整个字节的8位都进行了操作,只不过对其中7位的值没影响而已。

2)读位操作

读位操作主要是通过if语句判断的方式得到的。同样,这种变通的方法不意味着MSP430单片机可以对位进行读取,这种方法同样需要对1个字节的8位都操作。

例:P2.0的输出设置成P1.1输入相反,读取P1.0输入状态到变量temp
  1. unsigned char temp = 0;
  2. if((P1IN&BIT1) == 0)    P2OUT |= BIT0;        //读P1.1 写P2.0
  3. else                    P2OUT &= ~BIT0;
  4. if(P1IN&BIT0)           temp = 1;                    //读P1.0 写temp
  5. else                    temp = 0;
复制代码


1.
7.3 MSP430寄存器的宏定义配置方法


上一节提到了MSP430G2553.h这个头文件,实际上里面除了BIT0-BITF的宏定义之外还有很多的宏定义。这是因为MSP430的片上外设极为丰富,因此也有大量的寄存器来配置功能。MSP430上有数百个寄存器和近千个控制位,如果靠记忆这些寄存器的每一位的定义是不现实的,因此头文件的宏定义能帮助我们以更直观的方式来写程序。

例如下图中给出了BCSCTL2寄存器中DIVMx控制位的位置,下方代码中给出了MSP430头文件中两种DIVMx的宏定义,即DIVM0/1和DIVM_0/1/2/3。图中rw-0表示该位可读可写,复位后初始值为0。

1.29.png
  1. #define DIVM_0                 (0x00)         /* MCLK Divider 0: /1 */
  2. #define DIVM_1                 (0x10)         /* MCLK Divider 1: /2 */
  3. #define DIVM_2                 (0x20)         /* MCLK Divider 2: /4 */
  4. #define DIVM_3                 (0x30)         /* MCLK Divider 3: /8 */
复制代码

这个8位寄存器中的DIVMx是用来控制MCLK的分频系数的,分频系数依次为1/2/4/8。例如我们要设置MCLK的时钟8分频,下列3条代码均可实现该功能:
  1. BCSCTL2 |= 0x30;               //人脑记忆+数脚趾头,最笨的方式
  2. BCSCTL2 |= BIT5 + BIT4;    //需记忆DIVMx在寄存器中的位置,不推荐
  3. BCSCTL2 |= DIVM_3;          //简洁明了,力荐
复制代码

6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-16 15:37:26   只看该作者
本帖最后由 Shuyang 于 2019-1-17 15:00 编辑

本章参考资料:     
  
1.     《从零开启大学生电子设计之路--基于MSP430 LaunchPad口袋实验平台》,杨艳,傅强编著,北京航空航天大学出版社,2014年8月第1版。
2.     “MSP Design Workshop” by TexasInstruments, Version 4.60, May 2016, http://processors.wiki.ti.com/index.php/MSP_Design_Workshop
3.     “Getting Started with the MSP430G2553Value-Line LaunchPad Workshop” by Texas Instruments, Version 2.22, July 2013, http://processors.wiki.ti.com/index.php/Getting_Started_with_the_MSP430G2553_Value-Line_LaunchPad_Workshop
5.     MSP430x2xxFamily User's Guide, SLAU144J, http://www.ti.com/cn/lit/pdf/slau144
6.     MSP-EXP430G2LaunchPad Evaluation Kit User's Guide, SLAU318G, March 2016, http://www.ti.com/cn/lit/pdf/slau318


6

主题

36

帖子

48

积分

一粒轻沙

Rank: 1

积分
48
发表于 2019-1-17 09:54:10   只看该作者
本帖最后由 Shuyang 于 2019-1-17 15:01 编辑

以上为本章全部内容

快速回复 返回顶部 返回列表