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寄存器实现控制。
代码实现
// 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(实际延时精度受编译器优化影响,可通过调整循环次数微调)。
编译与烧录
- 使用瑞萨CS+集成开发环境创建RH850/F1L工程,将上述代码替换main.c内容;
- 编译工程生成HEX文件;
- 通过E2仿真器连接开发板,执行烧录并启动调试。
验证方法
运行程序后观察LED状态:若LED以约1Hz频率(亮500ms、灭500ms)持续闪烁,说明GPIO输出配置正确,代码功能正常。可通过以下方式进一步验证:
- 在调试器中暂停程序,检查PM5寄存器bit0是否为0(输出模式);
- 单步执行,观察P5寄存器bit0在0和1之间切换;
- 用示波器测量P50引脚波形,应为频率约1Hz的方波。
判定标准:LED按预期频率闪烁且无异常发热,即判定案例通过。