Energia使用入门 MSP432P401R
写在前面的话
因为要参加TI杯电赛所以开始学习使用德州仪器的MSP432P401R系列M4F单片机,无奈TI的库比较难读,队友也水平有限,所以就打算寻找一些简单快捷的编程方式(毕竟四天的比赛谁能写出高质量代码呢,快速且能用才是做重要的),而且我希望能对得起这个赞助厂家和参赛同学们,并不想搞那些夹层内藏Arduino板子的骚操作(据说还得了奖)。
等等。。。。MSP432能不能用Arduino编程呢?于是我找到了这样一款软件
Energia IDE
软件官网链接: https://energia.nu/
软件为绿色软件,无需安装
自带MSP430系列支持包,MSP432系列等支持包需要在线安装并且有墙
相信玩过Arduino的同学一定不陌生这个外形(其实就是Arduino改了名字和颜色)
官网介绍:
Energia是罗伯特·韦塞尔斯(Robert Wessels)于2012年1月启动的开源电子原型平台,目标是将Wiring和Arduino框架引入基于Texas Instruments MSP430的LaunchPad。 Energia IDE是跨平台的,并且在Mac OS,Windows和Linux上受支持。 Energia使用Peter Bigot的mspgcc编译器,并且基于Wiring和Arduino框架。 Energia包含一个集成的开发环境(IDE),该环境在Processing IDE中具有基础(Processing→Wiring→Arduino→Energia)。 Energia还是一个可移植的框架/抽象层,可以在其他流行的IDE中使用。通过dev.ti.com上的Texas Instruments CCS Cloud或TI功能强大的CCS Desktop IDE,利用基于Web浏览器的环境。
Energia和Arduino的基础是由Hernando Barragan开发的Wiring框架。该框架经过精心设计,并牢记设计师和艺术家的精神,以鼓励社区中来自世界各地的初学者和专家分享想法,知识和他们的集体经验。 Energia团队采用边做边学的理念,并努力使直接使用硬件变得容易。 Energia为微控制器带来的易用性使专业工程师,企业家,制造商和学生都能从中受益。
Energia最初将Wiring和Arduino框架引入了德州仪器(TI)MSP430 LaunchPad。德州仪器(TI)提供了MSP430,MSP432x,TM4C,C2000,CC32xx和CC13xx LaunchPad。 LaunchPad是德州仪器(TI)生产的低成本微控制器板。 Energia的最新版本支持大多数LaunchPad产品。
LaunchPad与Energia一起可用于开发交互式对象,从各种开关或传感器获取输入,并控制各种照明,电机和其他物理输出。 LaunchPad项目可以是独立的(仅在目标板上运行,即您的LaunchPad),也可以与计算机(主机PC)上运行的软件通信。您还可以添加无线模块,以支持通过各种类型的RF进行通信,包括Wi-Fi,NFC,蓝牙,Zigbee,蜂窝等。
可以在TI网站上找到有关LaunchPad的更多信息:www.ti.com/launchpad
来自谷歌翻译
Github:https://github.com/energia/Energia
Energia可以说是Arduino的一个分支,只支持TI的板子
编程方法
与Arduino完全相同,大家可以去看Arduino的教程视频
对Arduino的偏见
我最开始入门的单片机是51,依靠大学那点C语言基础自学。看了很多开发板配套的教程感觉质量不差,就是老掉牙了,大部分都是89C52时代的产物,急需一些新东西!现在都2020年了,STC都有硬件I2C和USB了,可惜没人教。
所以我想推荐STC15系列的手册给入门的同学(12系列写的很乱,8系列有些基础的东西没有)。教学视频可能看不懂,读手册一定是一目了然。
关于对Arduino的偏见,我确实有。我觉得Arduino的程序就是一间彩钢房,一切都是预制好的程序零件,像是积木。
但我承认,Arduino的底层程序确实写的很好。我并不认为Arduino是玩具,但如果你想要一间精致的房子,还是C和汇编好一些。
我的认识是,Arduino更像是一个操作系统,用户程序就像任务进程一样运行,开放给用户的是一个状态机。
Energia的缺点
- 教程、资源少之又少
基本只有43oh之类的论坛有比较深入的讨论,Arduino社区只有冷清的几个提问,但这一切的有限的活跃都开始且结束在几年前,现在更是没几个人用。 - 库太少且和Arduino不通用
只有个位数的官方库,连SSD1306 OLED的库都没有,但是和Arduino不通用是最大的缺点。移植对新手来说很不友好,编译器的报错功能太简陋 - 开发板贵
其实也不算缺点(因为根本没人买),竞赛可以免费申请,其他途径基本没人会买 - 编辑器相当简陋
这算是继承了Arduino的缺点,以后大概率会制约Arduino平台的发展
基础操作之I2C基础读写(以读取ID为例)
关于Arduino的基础程序这里就不再赘述,Arduino和Energia官网都可以找到
这里我的板子是MSP432P401R,以后也是
- 首先找到I2C端口,连接好MSP432开发板和FDC2214开发板的I2C的线
上面两张图片来自Energia官网
注意:官方的图I2C口顺序标反了,1号口其实才是默认口
这里我们使用默认I2C口(即P6_5和P6_4),3.3v给2214供电,并且共地
至于其他端口功能都写得很详细,大家可以自己尝试
实现程序
#include<Wire.h> //基础的I2C库
void setup()
{
Serial.begin(9600); //选择默认串口0,直连调试器的虚拟串口,波特率9600
Wire.begin(); //选择默认口0,主机模式不填地址
}
void loop()
{
Serial.println("satrt"); //串口发出start
Serial.flush(); //等待串口发送完毕
uint16_t data;//接收的两字节数据
Wire.beginTransmission(0x2A); //请求对地址为0x2a的设备发送写数据请求
//(会自动等待应答)注:FDC2214开发板不同,该地址可能为0x2b
Wire.write(0X7E); //发送要读的寄存器地址,就是2214手册里的MANUFACTURER_ID
Wire.endTransmission(false); //结束发送,自动发送停止信号,不会发送下一次的开始信号
delay(2); //等一下
Wire.requestFrom(0X2A,2); //请求对地址为0x2a的设备发送读2个字节数据请求
//(同样会自动等待应答)注:等待应答时程序会停下等待
while (!Wire.available());//如果收到数据,就先读一个字节(读完数据就消失)
data = Wire.read(); //存进去
data <<= 8; //移动8位,给下一个字节腾位置
while (!Wire.available()); //又检测到发过来一个字节的数据了,
data |= Wire.read(); //在读
Wire.endTransmission(false); //发出终止信号
Seria.println(data,HEX); //串口以16进制发送出刚才I2C口读到的数据
Seria.println("end"); //串口发出end
delay(1000); //延时一秒,进入下一次循环
}
串口数据
0x7e位置的数据正是0x5449
读数据成功,程序重复执行,无输出的同学可以检查接线,直到有输出为止
该寄存器值可以在初始化之前读取,确定FDC2214电路是否正常连接,以及芯片是否正常工作。
Energia的优势
使用Arduino开发相比CCS、Keil、IAR等用SDK库开发确实比较简单也简陋,但是对学习过的同学非常友好,没有学习过的同学也可以很快掌握,特别对电赛这种限时的比赛用处比较大,以后可能会有很多竞赛的同学使用。