1. 点亮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之间交替变化。
判定标准
LED以约1Hz频率稳定闪烁即判定案例通过。若需验证推挽输出特性,可在PB5输出高电平时测量引脚对地电压,应接近VDD(3.3V);输出低电平时接近0V。