zsy-s 发表于 2024-11-16 12:23

【Follow me第二季第3期】ek-ra6m5 led 和按钮的接口使用

本帖最后由 zsy-s 于 2024-11-29 23:16 编辑

# 备忘
活动地址:https://www.eeworld.com.cn/huodong/digikey_follow_me_2024_03/
# 日志输出
由于使用usb接口模拟串口代码量太大,所以使用rtt输出日志比较方便。
本次使用了例程:gpt_ek_ra6m5_ep
查看项目文件可知,启动包含SEGGER_RTT,官方已经添加进去对rtt的支持,可支持使用
例程已经封装了rtt的接口,实际不能输出。
打开编译成果,打开.map文件,找到.bss._SEGGER_RTT,复制结果到 J-Link RTT Viewer里的地址,就能输出日志了。
难受的很,每次编译,rtt的地址都变化,每次都查询,累得很。





# api 介绍
R_ICU_ExternalIrqOpen() 用于打开一个外部中断模块实例。
R_ICU_ExternalIrqEnable() 用于使能外部中断,使能后即可触发产生外部中断。
控制引脚
```c
R_BSP_PinAccessEnable();        //开启PFS registers
R_BSP_PinWrite(pin1, BSP_IO_LEVEL_HIGH);        //写高电平
R_BSP_PinWrite(pin2, BSP_IO_LEVEL_LOW);        //写低电平
R_BSP_PinAccessDisable();        //禁止PFS registers
```

# 代码

查看按钮和led引脚
有两个按钮,三个led灯。


配置引脚
```c

static const uint16_t g_bsp_prv_leds[] =
{
    (uint16_t) BSP_IO_PORT_00_PIN_06,///< LED1
    (uint16_t) BSP_IO_PORT_00_PIN_07,///< LED2
    (uint16_t) BSP_IO_PORT_00_PIN_08,///< LED3
};
const bsp_leds_t g_bsp_leds =
{
    .led_count = (uint16_t) ((sizeof(g_bsp_prv_leds) / sizeof(g_bsp_prv_leds))),
    .p_leds    = &g_bsp_prv_leds
};

```
最方便简单的方法通过官方提供的工具配置引脚
如下

项目中已配置按键引脚为输入,开启中断服务函数,三个led为输出。
链接文件,写的好复杂

启动入口函数: Reset_Handler


system.c 文件中声明函数:void R_BSP_WarmStart(bsp_warm_start_event_t event) __attribute__((weak));
标记为weak。在我们的主文件 hal_entry.c文件中,重新定义了函数R_BSP_WarmStart。
程序启动过程中,启动文件会调用 函数 R_BSP_WarmStart。

配置引脚中断,需要把此引脚的inpu配置取消掉,此处按照下图模式改掉。

如下图所示,增加一个中断


写代码,开启我们配置的中断。

# 烧录固件
编译程序,生成hex格式的固件。
打开flash lite 工具,如下图。

选中设备,找到生成的hex固件,点击 ‘programe device’,烧录下固件,如下图。


使用另一个按钮,开启中断,并控制另外一个led绿灯,效果如下
820e1ce69d7a5ee48f0337d9de4f56e0<br/>

#疑难问题
如果中断的配置,没有找到属性窗口,可以如下,调出来


# 代码


wangerxian 发表于 2024-11-30 16:06

<p>rtt输出日志确实方便,而且还能省一个串口。</p>
页: [1]
查看完整版本: 【Follow me第二季第3期】ek-ra6m5 led 和按钮的接口使用