这次终于可以把这一篇给写了,因为CCS及其抽象的设计以及很多问题,导致包括本人在内的很多同志第一次使用德州仪器的官方嵌入式软件CCS一定会不知所措,报错满天飞,根本没法使用。而且关于这部分,网上资料太过松散和老旧,因此在本人经过一段时间的不懈努力下,算是稳定能使用MSP432E401Y创建工程以及调试到现在了。故这次一口气把我创建工程中遇到的种种问题,尽我所能的回忆且记录下来,让大伙可以安安心心使用这款软件进行德州仪器单片机开发板进行开发。

一.工作空间(Work Space)
       

        许多从Keil和IAR学习过来的大学生和新进开发者上手CCS的第一道门槛就是CCS的WorkSpace(工作空间)到底是怎么创建的?当我们每次打开CCS后,第一个跳出来的就是CCS的WorkSpace选择框。如下:

        和keil和IAR都不一样,CCS必须选择一个工作空间作为工程的基础,而不是简单的打开某个保存整个项目的源工程文件就可以导入所有代码和文件。(比如keil的.uvproj,IAR的.eww)这是因为,CCS的工作空间是以文件夹形式保存的。当我们初次进入时,最好选择一个单独的文件夹作为整个工作空间的保存位置。比如我这里选择了这个路径作为单独的工作空间:
E:\D\AllProject\CCS_Code_Project


之后,在这个CCS_Code_Project文件夹下,我们可以发现它生成了四个子文件夹(.jxbrowser.userdata、.metadata、dvt、RemoteSystemsTempFiles)


这四个文件夹的作用本质上就是存储用户信息和管理用户数据等等功能的。因为CCS其实是支持用户在不下载CCS软件本身进行云开发和调试的,这个工作空间中就储存有这些数据信息,但本文不考虑云开发,之后如果各位看官有兴趣也可以自己琢磨一番。

 打开工作空间后,界面如下:


如果你后期考虑需要更换工作空间,点击左上角File->Switch WorkSpace->Other即可:

 

二.新建工程(CCS Project)

        本次使用MSP432E401Y开发板作为例子进行工程创建。你可以点击快速启动页面(Getting Start)下的“New Project”进行工程创建,或者在左上角的Project按钮选择“New CCS Project”进行创建:

第一种方法
 


第二种方法

之后可以看到如下页面:

我们选择MSP432E401Y,选择完后如下:

补充:我们选择用USB线进行烧录,那么Connection那一栏就默认是USB线烧录就行了。

补充2:强烈建议CCS Project不要和Work Space放在一起!!!本人之前放在一起后,不清楚是否是BUG还是其他原因,选择了该Work Space后,原CCS Project它认不出来了(即使路径是正确的)。而且如果一旦不小心多选错一级目录,那么打开的工作空间就是新Work Space了,文件夹会巨乱。

现在我们的工作空间路径是:E:\D\AllProject\CCS_Code_Project
        CCS Projct工程路径是:E:\D\AllProject\Teach

创建完毕后界面如下:

 

在一个CCS Work Space下是可以拥有多个CCS Project的,但一次只会启动一个CCS Project作为调试。要看这个项目后面是否有“【Active - Debug】”字样,这说明当前激活的是该项目。

CCS Project项目出现路径变动的处理:
正常来说,Work Space是会记录CCS Project的原路径的,你每次打开Work Space后,CCS Project会自动在当前Work Space下显示。但当因为一些原因,CCS Project改变了原来的路径(这里我将整个CCS Project移动到了新路径:E:\D\AllProject\Test\Teach下),这时候我们打开工作空间,发现:



那么这个时候就要用到CCS的项目导入功能(Import CCS Project)来进行手动导入。

我们先删除现在这个不存在的项目,右键空项目,选择Delete即可删除。


(如果勾选方框则代表在磁盘中删除当前所有项目,这里这个项目的路径已经是空的了,所以无所谓。)

之后我们一样可以选择两个方式,快速启动界面上的Import Project,或者右上角的“Project->Import CCS Project"来进行项目导入。


第一种方法


第二种方法

点击后看到:


点击Finish即可导入。如下:


三.使用MSP432E401Y SDK开发包(路径导入和编译)

        接下来的步骤就稍微有点麻烦了,本人在这上面多次翻车,被折磨的痛不欲生。各位没有接触过CCS的新手估计都会在这上面翻过车,因为不像Keil和IAR,只需要简单的添加SDK API或者HAL库的.h、.c文件路径它就可以自行搜索到了,然后在编写程序的时候添加各种头文件直接引用。CCS的SDK是有好几种链接库文件互相进行支持和编译的。它的概念既有点像STM32开发板上的各种核心启动文件,不光光只是功能库文件。CCS有个独一无二的功能库桥梁链接文件,这种文件的作用是用于将各个SDK API接口或者HAL库的功能函数连接起来的文件,如果你少加了这个,那么你就无法关联到SDK API接口功能函数和HAL库的那些功能,比如SDK中支持的gpio、i2c这些。即使你已经在File Search里添加到了它们的查找路径。

        MSP432E401Y的SDK开发包在官网就可以下载到。



下载完后直接安装就行,安装路径默认在C:\ti上,笔者选择安装在自定义文件夹:E:\D\AllProject\MSP432E4-SDK


安装完后有下面三个文件:


其中sysconfig_1.5.0和xdctools_3_61_01_25_core文件夹按照能搜索到的信息,一个是图形化配置工具,一个是跟RTOS有关系的工具集,使用RTOS开发的话,可能需要用到第三个功能包。本人实力不足且原教旨主义,还是按传统编程思维来,先从这个simplelink_msp432e4_sdk入手。(顺便注意,这个文件夹里的SDK其实是有包含msp432e411y的相关API和HAL库的,我们只找401y用的就行。

回到CCS中,我们右键我们的项目找到Properties(属性):

接下来我们按顺序往三个选项中添加对应的路径,分别是:

Build->Arm Compiler->Include Options中的:

Add dir to #include search path(--include_path, -I) 

和 

Build->Arm Linker->File Search Path中的:

lnclude library file or command file as input (--library, -l)
Add <dir> to library search path (--search_path, -i)



Add dir to #include search path(--include_path, -I) 添加如下:
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source\ti\drivers
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source\ti\devices
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source\ti\devices\msp432e4\inc
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source\ti\devices\msp432e4\driverlib
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source\ti\devices\msp432e4\driverlib\inc

(相信大伙不难看出来,大部分都是source里面的东西,这也是你不用RTOS开发时,大部分功能库的来源,你想找的接口和API大部分在这里都能找到。)

lnclude library file or command file as input (--library, -l)添加如下:
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source\ti\grlib\lib\ccs\m4f\grlib.a
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source\ti\devices\msp432e4\driverlib\lib\ccs\m4f\msp432e4_driverlib.a

这两个.a文件(静态库文件)是非常重要的,一定要添加进来,这直接关系到了你上面那些source中的函数功能能否被正常查找和使用。

Add <dir> to library search path (--search_path, -i)添加如下:
E:\D\AllProject\MSP432E4-SDK\simplelink_msp432e4_sdk_4_20_00_12\source

 ①当你添加完Include OptionsAdd dir to #include search path(--include_path, -I) 后,你随便添加一个SDK的头文件(比如gpio.h),那么这时候你右键选择Open Declaration应该是会自动跳转和打开了。如果没添加到功能所在的路径,那么就会报错。


②当你添加完Arm Linkerlnclude library file or command file as input (--library, -l)我们随便引用SDK开发包中的任一头文件中的函数(比如sysctl.h中启用外围针脚的函数——SysCtlPeripheralEnable())。如果正常的话,编译将会通过无报错。如果没有正确添加,则会报错。(主要是.\source\ti\devices\msp432e4\driverlib\lib\ccs\m4f\msp432e4_driverlib.a这个一定要有!)


添加前


 

添加后
 

那么到此,最难搞的SDK包添加就弄完了。(只需要记住,SDK包下的./source/ti/......这个文件夹下全是功能API接口以及HAL库函数的定义。随着你开发进度的深入,你可能得在Include Option或者Arm Linker中进一步添加你要使用的功能。


三(2).CCS Project自建文件夹的导入和编译

        其实和上述内容大差不差,当我们要自己建立自定义文件夹管理我们自己的代码,我们这么做:
 

先在CCS Project那边右键->New->Folder



之后还得去Include Option添加自己的自定义文件夹路径才行,之后就没问题了。

添加完后,自定义代码放在自定义文件夹下,那么就可以通过编译,不然不行。



四.MSP432E401Y SDK包的其他部分粗讲

        回到simplelink_msp432e4_sdk_4_20_00_12文件夹下,example文件夹是存放的官方的代码例程。可能早年德州仪器主推MSP432E401Y开发板作为电赛用板时,很多大学生和开发者都是直接打开的这个例程进行代码修改完成的项目。时至今日,这个例程里也有不少非常好的代码可供学习和直接移植使用。(比如UART串口通信,里面有很多例程都提供了一个简化版本的“uartstudio.h”、“uartstudio.c”的API功能实现,这个是可以直接移植到当前你这个工程里面去的,一定要善加利用。)
        kernel文件夹主要是和单片机的内核驱动和RTOS(实时操作系统)启动开发有关的,如果需要用RTOS进行开发的话,可能需要用到里面的功能。
        tools文件夹也是一个额外的开发工具集,但笔者没有用过,感兴趣的读者可以自行尝试。


五.其他一些疑难杂症的追加讲解

1.看不到某些窗口(或者不小心点掉了)

解决:
最上方窗口,Window->Show View可以显示一切你想要看的面板。



2.关于在CCS中for循环的语法问题
有些同学或者开发者习惯写for循环的时候是这么写的:

这个在CCS的语法规范中是不允许的,不允许在for循环里写"int i"这种形式,写了会报错,如下:

你只能这么写:

只要不在for循环中出现"int i"这种写法,那么基本上编译就会通过。(无论它是全局变量还是局部变量)



3.变量声明定义问题(无图)
如果你在.h文件里声明了某些变量,.c文件里也声明定义了,但赋值或者放到某些函数里赋值后编译报错没法通过。那么你可以尝试在对应的.h文件中那些声明变量前加上extern关键字,这样应该会通过编译。


4.关于driverlib.h
这个头文件其实包含了常用的接口库文件,打开后可以看到它包含如下文件:


也就是说如果你include了driverlib.h,那么大多数时候就不用再找一些接口功能它到底在哪个头文件里了。但是请注意,这样做会导致额外的性能开销!建议多了解一些头文件里函数的功能,并正确引用它们。


以上!这就是我现在所回想起来的,加油吧,各位!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐