当前位置: 首页 > news >正文

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

相关文章:

【单片机】MSP430MSP432入门

文章目录 0 前言1 开发方式选择2 CCS和开发相关软件3 Keil开发MSP4324 IAR for 430开发MSP4305 总结 0 前言 最近因为想学DSP,所以把之前卸载的CCS给装回来了,手头也还有之前电赛剩下的MSP430和MSP432的板子,由于年代久远,想着花点…...

货车一键启动无钥匙进入手机远程启动的正确使用方法

一、移动管家货车无钥匙进入系统的使用方法 基本原理:无钥匙进入系统通常采用RFID无线射频技术和车辆身份识别码识别系统。车钥匙需要随身携带,当车钥匙靠近货车时,它会自动与货车的解码器匹配。开门操作:当靠近货车后&#xff0…...

自学c++之类、对象、封装

class 类名{int a;//属性 public://权限操作; } 1、权限 public(公共权限)类内可以访问,类外可以访问protected(保护权限)类内可以访问,类外不可以访问(儿子可以访问父亲中的保护内容&#xf…...

在VSCode中安装jupyter跑.ipynb格式文件

个人用vs用的较多,不习惯在浏览器单独打开jupyter,看着不舒服,直接上教程。 1、在你的环境中pip install ipykernel 2、在vscode的插件中安装jupyter扩展 3、安装扩展后,打开一个ipynb文件,并且在页面右上角配置内核 …...

SQL_优化

1 SQL优化 (1) 数据读取 ①分区裁剪:使用时只读取需要的分区. ②列裁剪:读取操作(select、where、join、group by、sort by等),不读取不需要的列,减少IO消耗. (2) 数据筛选 ①分区先过滤,区分度大的字段先过滤. ②不在筛选字段上使用函数和表达式. (3) 分组聚合 ①使用窗口函数…...

Neo4j使用neo4j-admin导入csv数据方法

在neo4j desktop里创建project,创建dbms,创建database。 将csv文件放入如下import路径中,然后就可以使用相对路径来使用csv了。 在neo4j desktop中打开Terminal 键入导入数据语句: neo4j-admin database import full --nodes&qu…...

Node.js 登录鉴权

目录 Session express-session 配置 express-session 函数 ts 要配置声明文件 express-session.d.ts express-session 使用 express-session 带角色 Token 什么是 JWT token jsonwebtoken 使用 jsonwebtoken 带角色 Session express 使用 express-session 管理会话&…...

内存泄漏指什么?常见的内存泄漏有哪些?

内存泄漏是指程序在运行过程中,由于某些原因导致程序无法释放已经不再使用的内存,使得这部分内存持续被占用,最终可能导致系统可用内存逐渐减少,严重时会影响系统性能甚至导致程序崩溃。(内存泄漏是指程序中已经分配的…...

【PromptCoder】使用 package.json 生成 cursorrules

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

STM32的C语言软件延时函数

STM32的延时方法很多,其中采用定时器延时,可以得到较为精确的延时,但是有时对延时精度要求不高的场合,采用软件延时,也是必须的。特别是在RTOS系统中,使用SysTick的普通计数模式对延迟进行管理,…...

【洛谷排序算法】P1012拼数-详细讲解

洛谷 P1012 拼数这道题本身并非单纯考察某种经典排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序等)的实现,而是在排序的基础上,自定义了排序的比较规则,属于自定义排序类型的题目。不过它借助了标准库中…...

在WINDOWS系统使用CMake gui编译NLopt配合VSCode使用

1. 准备工作 安装CMake:从CMake官网下载并安装CMake。下载Nlopt源码:从Nlopt官网或GitHub仓库下载Nlopt源码。安装编译器:确保已安装Visual Studio或其他支持的编译器(如MinGW)。 2. 配置CMake 方式1 打开CMake GU…...

angular生命周期

ngOnChanges:当组件的输入属性(Input)发生变化时调用。 ngOnInit:在组件的输入属性初始化后调用,但此时视图尚未加载。 ngAfterContentInit:在组件的内容投影(ng-content)初始化后…...

[AI概念域] AI 大模型是如何被训练出来的?(通俗解读)

说明:这里使用 学生成长五部曲 比喻带你理解大模型如何从零开始学会思考。 AI大模型的训练过程可分为四个核心阶段: 首先进行海量数据收集与清洗,如同为“学生”准备涵盖各领域知识的教材库;接着通过预训练让模型完成“填空题”…...

Mellanox的LAG全称是什么?网卡的创建机制如何?(Link Aggregation Group 链路聚合组)

背景 对于双端口的网卡,有时候有将链路聚合的需求。在Mellanox网卡上通过LAG提供。对于RoCE的报文在Mellanox上也可以通过LAG来完成报文收发,叫做RoCE over LAG。但是仅仅适用于双端口卡。 关键点 LAG: Link Aggregation Group (LAG) 链路…...

【最大通过数——二分】

题目 代码 #include<bits/stdc.h> using namespace std; using ll long long;const int N 2e510;int n, m, k; ll a[N], b[N];bool check(int mid) {for(int i 0; i < mid; i){if(i > n) break;if(mid-i > m) continue;if(a[i] b[mid-i] < k) return tr…...

Liunx系统中FTP与NFS

目录 一、FTP文件传输协议 1.1、FTP工作原理 1.2、FTP状态码 1.3、FTP用户类型 1.4、FTP软件vsftpd 1.4.1、安装vsftpd 1.4.2、vsftpd配置文件 二、NFS网络文件系统 2.1、NFS工作原理 2.2、NFS软件 2.3、NFS共享配置文件格式 2.4、NFS相关命令 2.4.1、exportfs 2.…...

uniapp 测试 IPA 包安装到测试 iPhone

将uniapp测试IPA包安装到测试iPhone有以下几种方法&#xff1a; 使用Xcode安装 确保计算机上安装了Xcode&#xff0c;并将iOS设备通过数据线连接到计算机。打开Xcode&#xff0c;在菜单栏中选择Window->Devices and Simulators&#xff0c;在设备列表中找到要安装的iPhone…...

结构体指针传递给函数注意事项

在 C 语言中&#xff0c;传递结构体指针给函数是一种常见且高效的编程方式。不过&#xff0c;在实际操作时&#xff0c;有一些重要的注意事项需要留意&#xff0c;下面为你详细介绍&#xff1a; 1. 避免空指针引用 在函数内部使用结构体指针前&#xff0c;要先检查该指针是否为…...

mfy学习笔记

创建表并导入数据 CREATE TABLE sales (id INT,salesperson STRING,region STRING,sales_amount INT,sale_date DATE );INSERT INTO sales (id, salesperson, region, sales_amount, sale_date) VALUES (1, Alice, North, 1000, 2023-01-01), (2, Bob, South, 1500, 2023-01-0…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...