前言
近期准备电赛在用TI的MSPM0G3507这款单片机,这个型号的性能相对强一些,而且片上模拟外设很丰富,用来打电赛挺合适的。但是M0系列单片机还很新,网上相关教程资料都很少,我在前几个月刚上手的时候遇到了挺多问题,基本只能在官网给的资料里找解决方案。于是就产生了写学习笔记的想法,暑假这阵打算把M0的常用功能都调试一下,然后记录下实现过程,随缘更新。
这篇文章简单写下我学习M0单片机的资料来源和环境配置。
MSPM0 VS STM32
去年电赛和备赛时用过MSP430和STM32,今年蓝桥杯用的是STM32,所以我其实对于STM32更加熟悉一些,也很喜欢STM32的CubeIDE和CubeMX工具。现在用MSPM0主要是因为电赛是TI赞助的,会指定一题必须用TI的单片机,所以老师建议我用它备赛,正好也是个不错的学习机会。用了一阵,简单谈下我的看法吧。
- 相对于MSP430系列,MSPM0系列的进步很大,不仅芯片价格更低,性能更强,而且在开发上有了System Configuration这个图形化工具来生成初始化代码,极大地方便了开发;
- 而相对于STM32单片机,MSPM0的优势并不明显:
- 对于开发环境来说,TI这边的System Configuration工具对标ST的CubeMX工具,实际用下来倒是问题不大,熟悉一阵即可上手,两者的风格以及对细节的处理有所不同。我更喜欢CubeMX的带引脚功能标注的芯片示意图,对于引脚分配和电路设计很有利;同时我更喜欢System Config的可展开的详细说明;
- 对于硬件来说,MSPM0系列官方对标的是STM32G0系列,但就实际芯片价格来看,MSPM0系列应该对标的其实是STM32G4系列。MSPM0和STM32G4芯片价格相当,但前者是Cortex-M0+内核,后者却是Cortex-M4内核,性能不是一个等级的,而且STM32G4有更高的主频和更丰富的外设;
- 对于程序开发来说,STM32有HAL库和LL库,HAL库封装程度较高,很易于上手;MSPM0的非RTOS例程给的是基于DriverLib的程序,类似于STM32的LL库,是对寄存器操作的初步封装,对初学者相对不友好。不过也各有利弊,之前就遇到了STM32 HAL库的SPI通信速度太慢的问题,发现是HAL库做了太多的参数检查,直接操作寄存器后快了很多;MSPM0这边的多数库函数就短短几句内容,不用担心它影响速度。
资料来源
M0系列作为TI的单片机,官方资料还是很完善的,在TI官网搜索对应型号即可找到。
这里搜索MSPM0G3507,芯片页面点进去能看到数据手册、参考手册等资料的下载。下面硬件开发部分有官方的评估板LP-MSPM0G3507的资料。软件开发部分有MSPM0-SDK,SDK里面有官方的测试例程,对于我们学习M0单片机的使用十分重要,不过这个SDK不用单独下载,安装好CCS之后可以在CCS中查看。另外重要的就是CCSTUDIO Code Composer Studio 集成式开发环境 (IDE)。
数据手册
M0芯片数据手册主要介绍了M0单片机的硬件特性,在设计开发板的时候需要仔细阅读。对于使用来说,我们主要需要阅读的是数据手册的极限参数(绝对额定最大值)和引脚功能部分,前者能防止我们烧坏单片机,后者对于我们分配引脚功能有必要。
参考手册
M0的参考手册对于单片机程序开发很重要,这里详细介绍了M0单片机内部的模块和外设,以及它们的使用方法,这种手册的篇幅都很长,但一般没必要通篇阅读,用到哪个功能,就去这个手册里读一遍相关内容即可。
TI的中文手册一般翻译得都还不错,但之前用MSP430的时候发现过中文手册的问题,怀疑手册翻译有问题的时候,还得以英文手册为准。
环境配置
下面来介绍下我开发M0单片机的环境配置,这里我并不会详细说明软件安装和使用等问题(毕竟我也懒得重装截图),但会记录一下重要的以及我遇到问题多的地方。
开发板硬件
我后续开发会使用MSPM0G3507这款芯片,开发板是我和老师为电赛设计的一款开发板,用了TI标志性的红色阻焊,所以取名叫“番茄派”。工程分享在了嘉立创开源平台,有兴趣可以看看:番茄派MSPM0G3507开发板
目前番茄派开发板已经小批量生产了一些用于我们学院的电赛培训,板上除了MSPM0G3507最小系统,还有USB转串口、RGB LED、串口屏接口、按钮和旋转编码器等模块。现在已经用了两个多月,感觉挺棒的~
开发环境
CCS还是CCS-Theia?
去年我开发MSP430单片机的时候用的是CCS,今年发现TI新出了个CCS-Theia。CCS-Theia基于Theia,界面跟VS Code挺像的,乍一看比基于Eclipse的CCS简洁舒服很多,但用了几天我发现它的一些功能有些问题,尤其是DriverLib代码的函数定义跳转不了,所以还是用回了传统的CCS。
CCS
CCS是免费的IDE,TI官网就能下载,离线安装包和在线安装包均可,安装也很简单,不再赘述。之前我把CCS调成深色风格了,代码高亮也手动调了一遍,看起来还是挺好看的。感觉我对Eclipse框架的IDE最适应不了的是代码补全要按快捷键才能显示,还是更适应VS Code那种边输入边显示补全列表的形式,所以我后面敲工程的主要代码的时候,更喜欢拿VS Code打开工程编辑。目前我用的CCS版本是12.7.0。
CCS中找不到单片机型号
如果你像我这样安过旧版本的CCS,那么可能在新建工程的时候找不到M0系列的单片机,这时去官网下载安装文件,在原路径重新安装CCS即可,安装程序会提示选择单片机型号,将M0选中然后继续安装,即可添加M0系列单片机。
添加或更新SDK
若CCS中没有M0的SDK,或者SDK版本不正确,可以在CCS的Resource Explorer中下载或更改。
可以看到这里目前最新的SDK是2.01.00.03,但我并没有这个版本,这里可以直接下载,点击下载后,任务会在后台启动,好像没有任何进度提示一类的东西,一般等待1分钟左右即可安装好。如果需要切换到其它版本,点开Manage Versions选择即可。
后续我应该会使用2.01.00.03这个版本的SDK。CCS工程对于SDK版本要求似乎挺严格的,如果你拿到别人的工程导入没法跑,很可能是SDK版本不一致导致的。
VS Code
前面说过对于代码编写,我习惯用VS Code,为了让VS Code更适合编辑M0单片机的工程,除了安装C/C++一套扩展外,还可以改改其它设置。
CCS不像STM32CubeIDE那样能自动把驱动库中需要的文件拷贝到工程中(至少我还没发现怎么操作),而是会默认包含SDK的路径,所以用VS Code直接打开CCS的工程,SDK中的函数会因找不到而报错,可以将SDK的路径写在VS Code的包含路径中,并且根据单片机型号添加宏定义,即可让VS Code正确找到SDK。
当然由于M0的很多DriverLib函数是内联函数,VS Code并不能全都找到这些函数,所以对于单片机本身外设的操作函数,VS Code很难进行补全。于是我对于这些单片机外设本身的开发,是先在CCS中编写的(乐)。好在这些代码都相对固定,熟练之后不用花费太多时间,其余大量的主体代码逻辑在VS Code中编写是很舒服的。
结语
没想到写了这么长,也是侧面反映了资料查找和环境配置对于学习单片机的重要性,很多问题其实都是因为没仔细读手册或者开发环境不正确导致的。下一篇就让M0单片机实际跑起来~