1. 点亮LED灯

点亮LED灯 学习卡片

任务说明

本案例目标是在CMS32L051开发板上,通过GPIO输出功能点亮一颗LED灯。需要完成:配置GPIO引脚为推挽输出模式,设置输出电平为低(LED通常为低电平点亮),并验证LED实际点亮。

硬件连接

开发板LED电路采用低电平驱动方式:LED阳极通过限流电阻接VDD,阴极连接MCU的GPIO引脚。当引脚输出低电平时,LED导通点亮。本案例使用P1.2引脚控制LED,对应CMS32L051的GPIO端口1第2脚。

CMS32L051 GPIO Port1 P1.2 R 330Ω VDD GND 限流电阻 LED(低电平点亮) P1.2输出低电平 → LED导通点亮

代码实现

以下代码完成GPIO初始化与LED点亮控制,基于CMS32L051标准外设库编写:


#include "CMS32L051.h"

void GPIO_Init(void)
{
    // 使能GPIO端口1时钟
    SYSREG->CLK_EN1 |= SYSREG_CLK_EN1_GPIO1_EN;
    
    // 配置P1.2为推挽输出模式
    GPIO1->MODE &= ~(0x3U << (2 * 2));   // 清除P1.2模式位
    GPIO1->MODE |= (0x1U << (2 * 2));    // 设置为输出模式
    
    // 配置P1.2为推挽输出(非开漏)
    GPIO1->ODCTL &= ~(0x1U << 2);        // 0=推挽输出
    
    // 配置P1.2为通用IO功能(非复用)
    GPIO1->AFS0 &= ~(0x1U << 2);
    GPIO1->AFS1 &= ~(0x1U << 2);
}

int main(void)
{
    GPIO_Init();
    
    // 输出低电平,点亮LED
    GPIO1->DATA &= ~(0x1U << 2);         // P1.2 = 0
    
    while(1)
    {
        // 保持点亮状态
    }
}

代码说明

初始化流程包含四个关键步骤:首先通过SYSREG->CLK_EN1寄存器使能GPIO1端口时钟;然后配置GPIO1->MODE寄存器将P1.2设为输出模式;接着通过GPIO1->ODCTL选择推挽输出类型;最后清除AFS0/AFS1复用功能选择位,确保引脚作为通用IO使用。主函数中通过清零GPIO1->DATA寄存器对应位,使P1.2输出低电平,从而点亮LED。

编译与烧录

使用Keil MDK或IAR for ARM创建工程,选择CMS32L051器件,添加上述代码并包含CMS32L051标准外设库头文件。编译生成HEX文件后,通过CMS-ICE仿真器或串口烧录工具下载到开发板。

验证方法

烧录完成后,按下开发板复位键或重新上电。观察连接在P1.2引脚的LED灯是否点亮。若LED正常发光,说明GPIO配置与输出操作正确,案例验证通过。若LED未点亮,可使用万用表测量P1.2引脚电压,正常应为低电平(接近0V);若测得高电平,则检查GPIO模式配置是否正确。