3. 开发环境搭建与第一个工程
在开始 SAM 工业控制产品开发之前,先把工具链搭起来,是后续所有工作的前提。本节以 SAM 系列(如 SAM D5x/E5x、SAM RH71 等 Cortex-M 器件)为例,完整走一遍从安装 MPLAB X IDE、配置 Harmony 3、连接编译器与调试器,到新建工程、点亮 LED、串口打印,并理解工程目录结构与构建配置的全过程。文中出现的器件型号、引脚号、时钟频率、波特率等均为教学示例,实际使用时请以所选 SAM 器件的数据手册和开发板原理图为准。
一、工具链组成与安装顺序
Microchip 的 SAM 开发工具链由四部分组成:MPLAB X IDE(集成开发环境,基于 NetBeans)、XC32 编译器(针对 32 位 ARM Cortex-M 的 GCC 工具链)、Harmony 3(外设库与中间件框架,通过 MCC 内容管理器配置)、以及调试器/编程器(PICkit 4、Atmel-ICE、J-Link 等)。安装顺序建议为:先装 MPLAB X IDE,再装 XC32 编译器,最后在 IDE 内通过 Tools → Embedded → MPLAB Harmony 3 Content Manager 安装 Harmony 3 包。Harmony 3 采用“内容包 + 代码生成”的方式,安装后会在本地形成 csp、core、bsp 等仓库目录,供 MCC 在新建工程时引用。
调试器方面,PICkit 4 通过 ICSP 接口连接 SAM 的 SWDIO/SWCLK;Atmel-ICE 支持 SWD 与 JTAG,常用于 SAM 系列;J-Link 在 SEGGER 驱动下也可被 MPLAB X 识别。三者都需在 IDE 的 Project Properties → Conf: [default] → Hardware Tool 中选择对应型号,并确认目标板供电与参考电压(VREF)匹配,否则会出现“Target device not found”或“Device ID 读取失败”。
二、新建 SAM 工程与 Harmony 3 配置
在 MPLAB X IDE 中执行 File → New Project,选择 “32-bit MPLAB Harmony 3 Project”,然后指定 Harmony 3 内容包的本地路径(例如 C:\harmony3)。接着选择目标器件,例如 ATSAME54P20A,工具会自动生成一个包含 firmware、src、config 等目录的工程骨架。此时工程还没有外设初始化代码,需要打开 MCC(Tools → Embedded → MPLAB Harmony 3 Configurator)进行图形化配置。
在 MCC 中,先配置时钟:以 SAME54 为例,假设外部晶振为 12 MHz,通过 DFLL 倍频到 120 MHz 作为主时钟,再分频给外设。然后配置 GPIO:把连接 LED 的引脚(示例为 PA14)设为输出,初始电平为低;把 UART 的 TX/RX 引脚(示例为 PB24/PB25)设为 SERCOM 功能。最后配置 SERCOM 为 UART 模式,波特率设为 115200,数据位 8,无校验,1 位停止位。点击 “Generate Code” 后,MCC 会在 config/default 下生成 initialization.c、pin_manager.c、peripheral 等文件,并在 src 下生成 main.c 的框架。
三、GPIO 点灯与串口打印
生成的 main.c 中,SYS_Initialize() 会依次调用时钟、引脚、外设初始化。我们只需在 while(1) 循环里加入 LED 翻转和串口打印。示例代码如下(引脚与延时均为教学示例):
#include "definitions.h"
int main(void)
{
SYS_Initialize(NULL);
while (1)
{
LED_Toggle(); // PA14 翻转
SYSTICK_DelayMs(500); // 500 ms 延时
printf("SAM GPIO blink, tick=%lu\r\n", (unsigned long)SYSTICK_GetTick());
}
}
其中 LED_Toggle() 是 MCC 为 PA14 生成的宏或函数,SYSTICK_DelayMs() 基于 SysTick 实现毫秒延时,printf 需要重定向到 UART。重定向方法是在工程中实现 _mon_putc() 或 _write(),把字符写入 SERCOM 的发送寄存器。若使用 Harmony 3 的 stdio 服务,也可在 MCC 中勾选 “STDIO Redirect to UART”,自动生成重定向代码。
烧录后观察现象:LED 以约 1 Hz 频率闪烁(亮 500 ms、灭 500 ms),串口助手在 115200 波特率下应看到类似 SAM GPIO blink, tick=500 的循环输出。如果 LED 不亮,先检查引脚方向是否设为输出、驱动能力是否足够;如果串口无输出,先确认 TX/RX 是否接反、波特率是否一致、SERCOM 时钟是否使能。
四、工程目录结构与构建配置
Harmony 3 工程的典型目录结构如下:src 存放用户代码(main.c、app.c);config/default 存放 MCC 生成的初始化代码与配置头文件;firmware 存放 Harmony 3 的库文件(csp、core、bsp 等);nbproject 存放 MPLAB X 的工程配置。构建配置在 Project Properties 中管理,关键项包括:编译器优化等级(-O1 或 -Os)、是否启用 -Wall、链接脚本(.ld)选择、堆栈大小、以及调试器型号。对于工业控制产品,建议在开发阶段使用 -O1 并开启警告,发布阶段再切换到 -Os 以减小代码体积。
config 目录下的文件,用户逻辑应写在 src 下的独立文件中,避免在生成文件里直接修改,否则重新生成时会丢失。