【单片机】MSP430MSP432入门

文章目录

    • 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在各个平台下的开发方式和基本开发流程,芯片外设和库的使用也只是起了一个头,后续如果有机会会再更新相关的外设使用以及实际代码编写等内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24936.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[记录贴] 火绒奇怪的进程保护

最近一次更新火绒6.0到最新版,发现processhacker的结束进程功能无法杀掉火绒的进程,弹窗提示如下: 可能是打开进程时做了权限过滤,火绒注册了两个回调函数如下: 但奇怪的是,在另外一台机器上面更新到最新版…

跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)

飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案: 一、背景痛点与解决方案 在技术文档创作中,数学公式的跨平台渲染一直存在三大痛点: 飞书云文档:原生KaTeX渲染与导出功能存在语法限制微软Word:Math…

【Linux】基于UDP/TCP套接字编程与守护进程

目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…

ue5 3dcesium中从本地配置文件读取路3dtilles的路径

关卡蓝图中获得3dtiles的引用 拉出设置url 设置路径 至于设置的路径从哪里来 可以使用varest读取文件里的接送字符串 path中配置地址 path变量的值为: Data/VillageStartMapConfig.json此地址代表content的地下的data文件夹里的config.json文件 {"FilePath": &quo…

渗透测试(WAF过滤information_schema库的绕过,sqllib-46关,海洋cms9版本的注入)

1.sqlin-lib 46关 打开网站配置文件发现 此网站的对ID进行了排序,我们可以知道,order by接不了union ,那我们可以通过测试sort,rond等函数,观察网页的反馈来判断我们的盲注是否正确 我们发现 当参数有sort来排序时&…

CSS笔记一

一、语法 选择器{属性&#xff1a;属性值&#xff1b;属性&#xff1a;属性值} 二、书写分类 行内样式&#xff1a;直接通过style属性写在标签上 <p style"font-size80px">123456</p> 页内样式&#xff1a;在html页面创建style标签 外链样式&…

Flutter: TextEditingValue的实现

文章目录 TextEditingValue一、fromJSON二、text、selection、composing、empty三、isComposingRangeValid四、replaced TextEditingValue /// The current text, selection, and composing state for editing a run of text. immutable class TextEditingValue {const TextEd…

Web开发:ORM框架之使用Freesql的导航属性

一、什么时候用导航属性 看数据库表的对应关系&#xff0c;一对多的时候用比较好&#xff0c;不用多写一个联表实体&#xff0c;而且查询高效 二、为实体配置导航属性 1.给关系是一的父表实体加上&#xff1a; [FreeSql.DataAnnotations.Navigate(nameof(子表.子表关联字段))]…

RAG(检索增强生成)原理、实现与评测方法探讨

RAG是什么&#xff1f; 看一下RAG的英文全称&#xff1a;Retrieval-Augmented Generation&#xff0c;建索、增强、生成&#xff1b;一句话串起来就是通过检索增强模型的生成&#xff0c;是的&#xff0c;这就是RAG。 RAG怎么做&#xff1f; 目前比较通用的套路是这样的&#x…

【嵌入式Linux应用开发基础】网络编程(4):UDP协议

目录 一、UDP 协议概述 二、UDP 协议特点 三、UDP协议的字段格式 四、UDP协议的数据传输过程 五、嵌入式UDP编程核心API 六、UDP 在嵌入式 Linux 中的编程实现 6.1 UDP 服务器代码示例 6.2 UDP 客户端代码示例 七、UDP 协议的应用场景 八、UDP 协议的优缺点 8.1 优点…

视频字幕识别和翻译

下载的视频很多不是汉语的&#xff0c;我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费&#xff0c;但是低版本还是没有问题。 如果想要非汉语字幕转成中文&#xff0c;剪映低版本不提供这样功能。但是&#xff0c;用剪映导出识别字幕&am…

小迪安全-24天-文件管理,显示上传,黑白名单,访问控制

上节课回顾&#xff0c;token问题 没有更新token值&#xff0c;造成了复用 加上这段代码就好了&#xff0c;就不会复用了 文件管理-文件上传 upload.html文件&#xff0c;找ai生成就行 uoload.php接受文件上传的信息 这里在写个临时文件存储换个地方 因为上面临时文件存在c盘…

单入单出队列性能优化(Lock-Free)

摘要&#xff1a;文中首先介绍了有锁线程安全循环队列的基本实现&#xff0c;然后探讨了使用原子变量实现 Lock-Free 队列的优势&#xff0c;能够减少线程之间的数据竞争。接着&#xff0c;介绍了数据对齐的策略&#xff0c;以降低伪共享的概率&#xff0c;随后引入了索引缓存来…

java项目之网络游戏交易系统源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络游戏交易系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 本网络游戏交易系统分为管理员…

PyTorch 源码学习:GPU 内存管理之深入分析 CUDACachingAllocator

因引入 expandable_segments 机制&#xff0c;PyTorch 2.1.0 版本发生了较大变化。本文关注的是 PyTorch 原生的 GPU 内存管理机制&#xff0c;故研究的 PyTorch 版本为 2.0.0。代码地址&#xff1a; c10/cuda/CUDACachingAllocator.hc10/cuda/CUDACachingAllocator.cpp 更多内…

【PromptCoder】使用 package.json 生成 cursorrules

【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中&#xff0c;效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器&#xff0c;正在彻底改变我们的编程方式。但如…

学习路程五 向量数据库Milvus操作

前序 前面安装好了docker且成功拉取Milvus镜像&#xff0c;启动。通过python成功连接上了数据。接下来就继续更多Milvus的操作 在开始之前&#xff0c;先来简单了解一下向量数据库内一些东西的基本概念 概念描述数据库&#xff08;Database&#xff09;类似与MySQL的database…

SpringBoot 热部署

1、添加 DevTools 依赖 <!-- 热部署依赖 --> <dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId> </dependency>2、在IDEA的菜单栏中依次选择“File”→“Settings”&#x…

SOC-ATF 安全启动BL1流程分析(1)

一、ATF 源码下载链接 1. ARM Trusted Firmware (ATF) 官方 GitHub 仓库 GitHub 地址: https://github.com/ARM-software/arm-trusted-firmware 这是 ATF 的官方源码仓库&#xff0c;包含最新的代码、文档和示例。 下载方式&#xff1a; 使用 Git 克隆仓库&#xff1a; git…

汽车无钥匙进入一键启动操作正确步骤

汽车智能无钥匙进入和一键启动的技术在近年来比较成熟&#xff0c;不同车型的操作步骤可能略有不同&#xff0c;但基本的流程应该是通用的&#xff0c;不会因为时间变化而有大的改变。 移动管家汽车一键启动无钥匙进入系统通常是通过携带钥匙靠近车辆&#xff0c;然后触摸门把…