1. 点亮LED灯

点亮LED灯 学习卡片

任务说明

本案例目标是在S32K144微控制器上完成第一个GPIO工程:配置PTD0引脚为推挽输出模式,通过写寄存器控制该引脚输出低电平,从而点亮连接在PTD0与VCC之间的LED灯(低电平点亮)。同时熟悉S32 Design Studio IDE的工程结构、启动文件与链接脚本的基本作用。

硬件连接

  • LED正极 → 3.3V电源(通过限流电阻)
  • LED负极 → S32K144的PTD0引脚(第76脚)
  • 若使用开发板板载LED,请查阅原理图确认对应引脚,修改代码中的引脚号即可

工程创建与配置

在S32 Design Studio中新建S32K144空工程(Empty Project),编译器选择“GCC for ARM”。本案例不使用Processor Expert自动生成代码,直接操作寄存器,以便理解GPIO底层工作原理。工程需包含以下文件:

  • startup.c — 系统启动与时钟初始化
  • main.c — 主程序

代码实现

以下为完整可编译的代码。启动文件完成必要的系统初始化后跳转至main函数。

// 文件:startup.c
#include "S32K144.h"

// 简单延时函数(非精确,仅用于视觉观察)
static void delay_volatile(void) {
    volatile uint32_t i;
    for (i = 0; i < 2000000U; i++) {
        __asm volatile ("nop");
    }
}

// 系统初始化:配置时钟为默认FIRC(48MHz),使能PORTA时钟
void SystemInit(void) {
    // 默认芯片上电后使用FIRC 48MHz,无需额外配置
    // 使能PORTA、PORTD时钟(PORTD用于LED)
    PCC->PCCn[PCC_PORTD_INDEX] = PCC_PCCn_CGC_MASK;
}

int main(void);

// 启动入口:关闭看门狗,调用SystemInit,进入main
void startup(void) {
    // 关闭看门狗(WDOG)
    WDOG->CNT = 0xD928C520U;  // 解锁时序1
    WDOG->CNT = 0xD928C520U;  // 解锁时序2
    WDOG->TOVAL = 0xFFFFU;
    WDOG->CS = 0x0000U;       // 禁用WDOG

    SystemInit();

    // 调用主函数
    main();

    while (1) {
        // 主函数不应返回
    }
}

// 文件:main.c
#include "S32K144.h"

// 延时函数声明(在startup.c中定义)
void delay_volatile(void);

int main(void) {
    // 1. 使能PORTD时钟(已在SystemInit中完成,此处再次确认)
    PCC->PCCn[PCC_PORTD_INDEX] |= PCC_PCCn_CGC_MASK;

    // 2. 配置PTD0为GPIO功能(ALT1)
    PORTD->PCR[0] = PORT_PCR_MUX(1);

    // 3. 设置PTD0为输出
    PTD->PDDR |= (1U << 0);

    // 4. 输出低电平,点亮LED(低电平点亮)
    PTD->PCOR = (1U << 0);   // 写0到PDOR对应位

    while (1) {
        // 保持点亮状态
        delay_volatile();
    }
}

代码说明

上述代码中,PCC->PCCn[PCC_PORTD_INDEX]用于使能PORTD模块时钟。引脚控制寄存器PCR[0]的MUX字段设为1,将PTD0复用为GPIO功能。数据方向寄存器PDDR的bit0写1使该引脚为输出模式。最后通过PCOR寄存器(输出清零)将PDOR的bit0置0,引脚输出低电平,LED导通点亮。

编译与烧录

  1. 在S32 Design Studio中导入上述两个源文件到工程src目录;
  2. 工程属性中确认链接脚本使用S32K144_64_flash.ld(默认包含);
  3. 点击“Build”编译工程,生成.elf文件;
  4. 使用S32K144EVB板载OpenSDA调试器,点击“Debug”将程序下载至芯片并运行。

验证方法与判定标准

程序下载后,观察LED状态:

  • 若LED正常点亮并保持常亮,说明GPIO配置正确,工程创建成功;
  • 若LED不亮,依次检查:硬件连接方向是否正确、PTD0引脚是否与原理图一致、调试器是否成功烧录(观察IDE控制台无报错)。

判定标准:LED持续点亮即视为本案例通过。可通过修改PTD->PSOR = (1U << 0)(输出置1)验证LED熄灭,从而确认引脚控制有效。

S32K144 GPIO点亮LED — 引脚连接与寄存器配置 S32K144 PORTD模块 PCR[0] MUX=1 PDDR bit0 = 1 PCOR bit0 = 1 PTD0 LED 低电平点亮 R 3.3V GND 寄存器操作顺序 ① PCC使能PORTD时钟 → ② PCR[0]设MUX=1 → ③ PDDR设输出 → ④ PCOR输出低电平

常见问题排查

  • 编译报错找不到头文件:确认工程属性中已包含S32K144的CMSIS头文件路径(S32K144.h位于SDK的devices目录);
  • LED不亮但程序已运行:用万用表测量PTD0引脚电压,应为0V;若为3.3V说明输出高电平,检查PCOR写入是否正确;
  • 烧录后程序不运行:确认调试器连接正常,检查启动文件中的看门狗关闭代码是否在main之前执行。