文章目录
- 0 前言
- 1 开发方式选择
- 2 CCS和开发相关软件
- 3 Keil开发MSP432
- 4 IAR for 430开发MSP430
- 5 总结
0 前言
最近因为想学DSP,所以把之前卸载的CCS给装回来了,手头也还有之前电赛剩下的MSP430和MSP432的板子,由于年代久远,想着花点时间回忆一下,顺便整理之前乱七八槽的文件资料,以作备忘。
不得不说,随着学习的深入,面对新的事物,已经没有之前的迷茫和冲动了,从容不迫才是学习的最高境界。
1 开发方式选择
对于新手来说,可能会非常纠结这个工具的选择,因为在开发过程中难免会有找到好用的例程但是是基于其他平台这样的经历,但其实,不同的平台只不过是采用的编辑器和UI交互不一样罢了,内部的编译链接以及仿真等都是一致的(工具链可能不同,但结果是差不多的)。所以不同的平台有必要了解吗?还是有必要的,尤其是项目起步阶段,如果有一个完善的例程,直接换个平台先验证一下非常有利。
言归正传,通过查阅TI官方的资料,得知目前MSP430的开发方式主要有:TI官方出品的Code Composer Studio,即CCS;开源的Energia(基于GCC工具链实现的类似于Arduino的代码框架);和Keil齐名的IAR,不过是For MSP430。而MSP432由于是基于ARM内核(Cortex-M4F),所以可以使用Keil(需要先安装一个固件包)或者IAR(ForARM);或者其他ARM内核相关工具链的IDE;以及官方自己的CCS。
其中,由于最早Keil和IAR比较流行,而且当年TI自己的工具并不是特别完善,所以形成了早期用IAR开发MSP430、用Keil开发MSP432的大致格局。这也就是为什么在找MSP430的相关资料时,大都是各种古老的文档,配上一个IAR的例程。因为MSP430是16bit的RISV芯片,年代可以说比较久远了,然而现在大都是用32bit的单片机,所以感觉专业开发这些芯片的人并不是很多。
虽然说可以继续以IAR和Keil作为IDE主力,但随着TI官方的CCS不断完善,界面也越来越好看,加上eclipse本身的编辑器就比Keil/IAR要好用,而且还支持其他的如DSP系列芯片,所以还是有必要学习使用CCS,当然,Keil和IAR在后面也有介绍。下面分别阐述。
2 CCS和开发相关软件
这一节可能是最重要的了,直接关系到对整个开发框架的理解
以前年少无知,现在重新来审视这个CCS,就感觉CCS这个软件的组织架构就很奇怪,且听我来细细吐槽。
由于只需要适配自家的芯片,所以在软件安装阶段直接勾选对应的芯片型号即可,这个没啥毛病。比如,如果要开发430和432,那么可以勾选这两个:
如果还要开发28335/2812等DSP芯片,可以再加上这个:
TM320F2812/28335芯片竟然叫做C2000系列。。。
这里安装的包决定了后面新建项目时可以选哪些芯片型号。如果已经安装好了软件,还想要更新的话,可以再次运行安装程序来实现增加组件。
但是安装好之后,就会发现,虽然说可以新建项目了,也可以正常编译下载了,但只提供了寄存器式的代码!?可能也是历史原因,对于早期开发者来说,SDK可能就是指芯片的寄存器库。。。这是怪异点之一。显然,TI官方也意识到了这个问题,所以 为开发者再次封装了一下寄存器操作,命名为driverlib
,和STM32的Pack包很像,也是一堆库函数封装加上一堆零散例程。但是怪的点又来了,可能是觉得只有库函数和例程不太够,为了让大家都来用我的芯片,我得同时照顾初学者和高级用户呀!所以在库里面加上整合度更高的例程以及一些文档资料,比如guid,get start之类的,还有一些高级的组件等等,又给取了一个名字,叫做xxxxWare
,如MSP430Ware
, MSP432Ware
。有一说一,这个做法还是非常好的,但是就会让人感觉很绕——我在安装软件的时候都勾选了这个芯片,为什么不能一次性都给我装上?不说高级组件,至少基本的函数库得安排上呀。还只装一个寄存器库,如果开发者不知道有库函数这个东西,岂不是要一直都用寄存器开发?
可能是受STM32CubeIDE/CubeMX的影响,CCS也有一个下载安装并管理软件包的东西,叫做Resorce Explorer
,就是点开之后可以访问官方的一个在线资源服务器,这个想法也非常好,即需要啥直接在软件里面下载即可,不需要就卸载,节约空间。然后第三个问题来了——这个resource explorer经常出问题,比如一直loading的,完全空白的,点开之后报错然后告诉你从一个使用手册上找解决方法的等等。其实大概率就是网络的问题,包括是否要挂代理都有可能影响,对国内用户可以说很不友好。另外,就是这个resource explorer的结构,我印象中之前刚接触CCS的时候目录很乱,现在不知道是不是有改进了,目录结构还是很明确的:
但是,相比于STM32每一个芯片系列就对应一个包那种非常清晰明了的结构,这个还是不够直观,比如Wireless Connectivity,mmWave xxxx,大概知道是适合做这类项目的芯片,但问题来了——为什么要在IDE里面放解决方案呢?为什么不能在放在官网,然后提供参考手册加例程,这不比放在这清晰?
当然,这个resource explorer我感觉最大的好处可能就是这些软件包里面有一些例程可以直接Import Project,不用自己挨个目录去找然后复制文件之类的操作。这可能是唯一的好处了吧,相比于单独安装这些软件(后面再说)。
另外,是关于这个软件版本的问题,为了找到一个可以同时开发MSP430/432以及TMS320F2812/28335的版本,我花了一整天的时间尝试各种版本,汇总一下我遇到的问题:
-
v10.4 安装C2000组件之后发现新建项目搜索不到28335,而且resource explorer点开是空白,遂放弃。
-
v20 是跨平台的版本,原来截至v12都是基于eclipse平台,而v20是eclipse的一个进阶版,叫做Theia,界面和VSCode非常相似,也可以安装VSCode下的一些插件(有兴趣可以看一下这个介绍)。新建项目时,可以搜到28335以及相关的开发板,但新建项目不成功,没有细究,而且无法搜索到MSP432P401,后来得知是这一系列芯片停产了,然后新版的软件也移除了对这个芯片的支持!?
多插一句:由于是在线的资源包,所以各个软件版本访问的都是同一个数据库,所以最新版的软件对这个支持得最好,旧版打不开好像也挺合理?
-
后来尝试换v12.6,听说v12.6还可以支持MSP432P401,但是在安装过程中进度条走到最后时出现了那个论坛很多人提问的
Child killed xxxx unknown signal
,先后尝试装C盘(原来装D盘)、删除install-log、关闭Windows Defender等操作,均不好使,所以这个版本咋样也没试。 -
最后,还是决定降低版本,安装了v9.0,发现可以正常搜索到28335,然后resource explorer也相对正常(不能开启全局代理访问),但无法安装里面的那些软件包,报错
{"code":"ECONNRESET","errno":"ECONNRESET","syscall":"read"}
既然内部无法安装,那咱索性直接下载安装程序来单独安装,无非就是一堆文件嘛,大不了手动复制到项目里面。
- MSP430Ware.exe
- MSP432Ware.exe
- C2000Ware.exe
下载之后,建议还是安装到CCS同级的目录,如下所示
后面无论是在CCS里面使用,还是Keil/IAR,都可以从这里复制文件,所以关键就是理解这个Ware的文件结构。这里以MSP430为例,来看一下其目录结构
如前所述,这个MSP430Ware是在driverlib的基础上新增了一大堆东西,可以看到有dsplib(数字信号处理库),grlib(图形库)以及pmbus,smbus等通信相关的库。所以理论上需要啥都可以从这里复制。再来单独看一下driverlib:
这个结构是不是很眼熟?和STM32的固件库是差不多的,一个lib,加上一些例程,使用的时候先把lib复制到项目底下,然后参考例程的使用方式进行开发,这就是最有效最好的开发方式。
点开lib,可以发现,这里还区分的不同的芯片系列,但好像没有入门款G2系列?emmmm,可能是太基础了没有库吧,hh。但如果真想用我觉得也可以参考库组织的方式,毕竟很多寄存器还是一致的。
在example里面随意点开一个项目,发现都兼容了三种平台,还是非常完善的。
因为是外部安装,所以在CCS软件里面不会显示已经安装这个软件包,如果要使用的话,建议还是手动把文件复制过去,可以参考这篇文章介绍的方法,步骤还是很明确的。
小结一下
以上就是CCS平台下芯片开发的各个组件的作用和关系了,剩下的就是各个库和组件的使用了,好在都提供了文档和例程,认真研究,关键是需要时间和项目的磨练。
3 Keil开发MSP432
和上面一样,还是打开msp432ware里面的driverlib,先查看一下例程:
打开Keil项目文件,发现其使用了RTE里面的Core,这也是很多型号单片机的一个特点,非常合理,也少复制几个文件,这里也采用相同的方式。
首先,肯定是安装pack,这里推荐直接在Keil里面安装,相比于前面提到的resource explorer模糊的状态,这个pack installer的状态就非常确定——必须得科学上网。
安装好包之后,新建项目就可以选择对应的芯片型号了,接下来就是传统的那一套:建立文件夹和group并一一对应、在group中添加文件,这里重点介绍一下需要添加哪些文件。
-
core
这个driverlib里面好像是没有的,只提供了头文件,所以需要使用Keil的RTE:
关于RTE的介绍可以参考我之前的一篇博客
-
lib
这个没啥好说的,直接添加到项目中即可,然后记得设置C++包含路径 -
system文件
就是上面那张图提到的例程下的system_msp432p401r.c
-
启动文件(.s)
也在例程下,startup_msp432p401r_uvision.s
到此就建立好了一个工程模板,记得在main函数中包含以下内容:
#include "msp.h" // 各种寄存器
#include "driverlib.h" // 库
另外,如果是使用那块经典的MSP432P401R LaunchPad板子,仿真可以直接选择DAP-Link,亲测可以正常下载和仿真。Reference
4 IAR for 430开发MSP430
由于没有找到适配IAR WorkBench 8.3的软件包,所以这里不再详细介绍,大抵和上面Keil开发类似。
【如何在一个IAR里面开发多种芯片】
已获取的消息:
- 7.12 对应WorkBench 8.0
- 8.10 目前最新版对应Workbench 9.1
所以我需要的版本大抵是7.20或者7.21
链接:https://updates.iar.com/?product=EW430 把后面的产品改成别的即可查看别的软件各版本情况
5 总结
本文主要是介绍了MSP430和MSP432在各个平台下的开发方式和基本开发流程,芯片外设和库的使用也只是起了一个头,后续如果有机会会再更新相关的外设使用以及实际代码编写等内容。