配置FSP库
在fsp库中配置IO为输入模式
配置后生成代码
# 编写IO控制代码
IO的函数讲解在03点灯大师中有描述
初始化
本工程配置了LED,在LED的初始化中调用了IO的初始化函数,故不需要二次初始化(STM32需要对再订端口或者指定引脚进行初始化,瑞萨则不需要)
/* LED初始化函数 */
void LED_Init(void)
{
/* 初始化配置引脚(这里重复初始化了,可以注释掉) */
R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}
编写按键读取函数
bsp_key.h
/* 两个按键引脚定义 */
#define KEY1_PIN BSP_IO_PORT_02_PIN_01
#define KEY2_PIN BSP_IO_PORT_02_PIN_00
/* 定义宏 KEY_ON 表示按键按下
定义宏 KEY_OFF 表示按键没有按下
*/
#define KEY_ON 1
#define KEY_OFF 0
/* Key初始化函数 */
void Key_Init(void);
uint32_t Key_Scan(bsp_io_port_pin_t key);
bsp_key.c
uint32_t Key_Scan(bsp_io_port_pin_t key)
{
bsp_io_level_t state;
// 读取按键引脚电平
R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
if (BSP_IO_LEVEL_HIGH == state)
{
return KEY_OFF; //按键没有被按下
}
else
{
do //等待按键释放
{
R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
} while (BSP_IO_LEVEL_LOW == state);
}
return KEY_ON; //按键被按下了
}
在主函数中调用
while(1)
{
if(Key_Scan(KEY1_PIN) == KEY_ON)
{
LED1_TOGGLE;
}
if(Key_Scan(KEY2_PIN) == KEY_ON)
{
LED2_TOGGLE;
}
}