1. 点亮LED灯

点亮LED灯 学习卡片

任务说明

本案例目标是在中微CMS32系列车规MCU上,通过配置GPIO为推挽输出模式,控制一个LED灯的点亮与熄灭。你需要完成:初始化GPIO时钟、配置引脚为输出模式、编写延时函数实现LED周期性闪烁,从而掌握CMS32 HAL库的GPIO基本操作流程。

硬件连接

LED正极通过330Ω限流电阻连接至PB5引脚,LED负极接地。当PB5输出高电平时LED点亮,输出低电平时LED熄灭。

代码实现


#include "CMS32L051.h"

/* 延时函数:约1ms @ 48MHz主频 */
void delay_ms(uint32_t ms) {
    uint32_t i, j;
    for (i = 0; i < ms; i++) {
        for (j = 0; j < 12000; j++) {
            __NOP();
        }
    }
}

int main(void) {
    /* 1. 使能GPIOB时钟 */
    SYS_Enable_Clock(SYS_CLK_GPIOB);
    
    /* 2. 配置PB5为推挽输出模式 */
    GPIO_SetMode(PB, GPIO_PIN5, GPIO_MODE_OUTPUT);
    GPIO_SetOutputMode(PB, GPIO_PIN5, GPIO_PUSH_PULL);
    
    while (1) {
        /* 3. 点亮LED */
        GPIO_SetPin(PB, GPIO_PIN5);
        delay_ms(500);
        
        /* 4. 熄灭LED */
        GPIO_ResetPin(PB, GPIO_PIN5);
        delay_ms(500);
    }
}

代码说明

代码首先通过SYS_Enable_Clock使能GPIOB外设时钟,这是所有GPIO操作的前提。随后使用GPIO_SetMode将PB5配置为输出模式,并通过GPIO_SetOutputMode设置为推挽输出——推挽模式可提供足够的灌电流和拉电流驱动LED。主循环中交替调用GPIO_SetPin和GPIO_ResetPin控制引脚电平,配合软件延时实现500ms间隔的闪烁效果。

编译与烧录

在Keil MDK或IAR中创建工程,选择CMS32L051芯片型号,添加上述代码并编译。使用中微提供的CMS32系列烧录工具(如CMS-ICE仿真器)通过SWD接口连接目标板,将生成的hex文件烧录至芯片。

验证方法

烧录完成后,观察LED是否以约1Hz频率(亮500ms、灭500ms)闪烁。若LED常亮或常灭,检查PB5引脚连接是否正确、限流电阻是否合适,以及GPIO时钟是否已使能。若LED完全不亮,可用万用表测量PB5引脚电压,正常工作时该引脚应在0V与3.3V之间交替变化。

CMS32L051 PB5 330Ω LED GND GPIO输出高电平 → LED点亮 GPIO输出低电平 → LED熄灭

判定标准

LED以约1Hz频率稳定闪烁即判定案例通过。若需验证推挽输出特性,可在PB5输出高电平时测量引脚对地电压,应接近VDD(3.3V);输出低电平时接近0V。