2. GPIO输出控制LED

任务说明

本案例目标是在瑞萨RH850/F1L系列MCU上,将指定GPIO引脚配置为输出模式,通过软件延时控制LED以约1Hz频率闪烁。需要完成引脚复用功能选择、端口方向配置、输出数据寄存器操作,并验证LED实际闪烁行为。

硬件连接

以RH850/F1L的P5端口第0位(P50)连接LED阳极,阴极经330Ω限流电阻接地。P50引脚复用功能默认为GPIO,无需额外配置复用寄存器。LED点亮条件为P50输出高电平。

寄存器配置说明

RH850端口操作涉及三个关键寄存器:PMxx(端口模式寄存器,置0为输出)、Pxx(端口数据寄存器,写1输出高电平)、PODxx(端口输出数据寄存器,与Pxx功能等价)。本案例使用PM5和P5寄存器实现控制。

PM5 (端口模式) bit0 = 0 → 输出模式 P5 (端口数据) bit0 = 1 → LED亮 P50 引脚 输出高/低电平 软件延时实现 嵌套循环空操作:外层循环500次 × 内层循环1000次 ≈ 500ms(@20MHz主频)

代码实现

// main.c - RH850/F1L GPIO输出控制LED闪烁
#include "rh850f1l.h"  // 寄存器定义头文件

// 软件延时函数:约500ms(主频20MHz时)
void delay_ms(void) {
    volatile unsigned int i, j;
    for (i = 0; i < 500; i++) {
        for (j = 0; j < 1000; j++) {
            // 空操作,消耗CPU周期
        }
    }
}

int main(void) {
    // 1. 配置P50为输出模式
    PM5 &= 0xFFFFFFFE;   // PM5 bit0 = 0 → 输出
    
    // 2. 初始状态:LED熄灭
    P5 &= 0xFFFFFFFE;    // P5 bit0 = 0 → 低电平
    
    while (1) {
        // 3. LED点亮
        P5 |= 0x00000001;    // P5 bit0 = 1 → 高电平
        delay_ms();          // 延时500ms
        
        // 4. LED熄灭
        P5 &= 0xFFFFFFFE;    // P5 bit0 = 0 → 低电平
        delay_ms();          // 延时500ms
    }
}

代码说明

代码首先通过PM5 &= 0xFFFFFFFE将端口模式寄存器PM5的第0位清零,使P50工作在输出模式。主循环中交替对P5寄存器第0位写入1和0,配合延时函数实现LED周期性闪烁。延时函数采用双层空循环,在20MHz主频下实测约500ms(实际延时精度受编译器优化影响,可通过调整循环次数微调)。

编译与烧录

  1. 使用瑞萨CS+集成开发环境创建RH850/F1L工程,将上述代码替换main.c内容;
  2. 编译工程生成HEX文件;
  3. 通过E2仿真器连接开发板,执行烧录并启动调试。

验证方法

运行程序后观察LED状态:若LED以约1Hz频率(亮500ms、灭500ms)持续闪烁,说明GPIO输出配置正确,代码功能正常。可通过以下方式进一步验证:

  • 在调试器中暂停程序,检查PM5寄存器bit0是否为0(输出模式);
  • 单步执行,观察P5寄存器bit0在0和1之间切换;
  • 用示波器测量P50引脚波形,应为频率约1Hz的方波。

判定标准:LED按预期频率闪烁且无异常发热,即判定案例通过。