说明
- 可以使用keil5和ccs开发,这里ccs使用不惯,因此采用keil5开发
- 一个工程模板test,已经将启动文件、头文件和源文件添加进入
资料源
工程示例:链接:https://pan.baidu.com/s/1707PoqR2LP44s1vLjzPH4w
提取码:fghj
文档资料:链接:https://pan.baidu.com/s/1-GMRFdwazVyhh0X0NFi09A
提取码:utsx
Pack:链接:https://pan.baidu.com/s/1lPpLdrVs3TGVh5ob8Zja9w
提取码:ppa6
E4_SDK:链接:https://pan.baidu.com/s/1GFnti2RfJ97SyIHFn4pZ_Q
提取码:wpd0 (如果有需要P4 SDK请自行翻看上一篇)
问题解决
- MSP432E401YSDK下载,以下是TI官网的SDK下载地址
https://www.ti.com.cn/tool/cn/SIMPLELINK-MSP432-SDK?keyMatch=MSP432E401Y
安装SDK的方法请自己解决 - 板子开发所需要的Keil支持包DFP,在以下keil官网找ti对应板
https://www.keil.com/dd2/Pack/#!#third-party-download-dialog
共有两个:TexasInstruments.MSP432.1.0.2.pack
TexasInstruments.MSP432E4_DFP.3.2.6.pack - 一个工程模板的移植,在下面详解
移植模板
E4_SDK\simplelink_msp432e4_sdk_4_20_00_12\examples\nortos\MSP_EXP432E401Y\driverlib 一般在这个目录下是ti提供的msp432e4例程
但是会有一个缺陷,是引入的一个板子的开发库,里面只能查看头文件,不能查看源文件,对学习不利,除非习惯于arduino的开发模式
所以接下来自己配置一个工程模板,利于之后的开发
-
在keil里新建一个工程,在我们安装了以下两个包之后
TexasInstruments.MSP432.1.0.2.pack
TexasInstruments.MSP432E4_DFP.3.2.6.pack
就可以选择ti的msp432e401y的芯片
-
接下来点击在keil魔术棒的旁边的图案,新建几个工程文件夹,并且在main文件夹下添加main.c文件
-
之后任意找一个例程,将startup_msp432e401y_uvision.s也就是启动文件复制在自己工程目录下,然后导入source文件下
接下来把E4_SDK\simplelink_msp432e4_sdk_4_20_00_12\source整个复制过来,大概300多M(这样导致工程占内存很大,正在尝试将其固定位置引入,减小空间占用),也是复制在自己工程目录下
在keil魔术棒里导入头文件路径
-
然后就可以往include文件里导入各种自己所需的源文件,路径在source\ti\devices\msp432e4\driverlib中
然后在keil里将Debug里修改为CMSIS-DAP Debugger,点击旁边的setting,Port可以任意,但是Max Clock一定要改为小于等于1MHz,然后会导致烧录失败
一个简单的点灯程序(所谓软件的Holle World)
#include "ti/devices/msp432e4/driverlib/driverlib.h"
#include <stdint.h>
#include <stdbool.h>
int main(void)
{
uint32_t systemClock;
// systemClock =
MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480), 120000000);
// Configure the device pins.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPION)){}
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF)){}
GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_1);
GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_0);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_4);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);
//
// Initialize the UART.
//
while(1)
{
GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0, GPIO_PIN_0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_PIN_0);
// Delay for a bit.
for(systemClock = 0;systemClock<2000000;systemClock++);
// SysCtlDelay(systemClock / 10 / 3);
// Turn off D1.
GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, 0x0);
GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0, 0x0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, 0x0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0x0);
// Delay for a bit.
for(systemClock = 0;systemClock<2000000;systemClock++);
// SysCtlDelay(systemClock / 10 / 3);
}
}
void SystemInit()//自定义一个SystemInit函数,函数体为空,这样错误即可消除
{
}