本文主要是介绍Renesas MCU之IO应用介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
概述
1 软硬件环境
1.1 软件版本信息
1.2 硬件接口介绍
2 FSP配置项目
2.1 项目参数配置
2.2 生成项目框架
3 IO OutPut功能
3.1 IO输出功能实现
3.2 IO输出功能测试代码
4 IO InPut功能
4.1 IO Input功能实现
4.2 测试代码实现
5 测试结果
概述
本文主要介绍Renesas MCU之IO的应用方法,包括输出和输入两种使用方式。笔者使用FSP工具配置项目,生成代码。并编写测试函数验证了输出和输入的功能。
1 软硬件环境
1.1 软件版本信息
软硬件信息 | 版本信息 |
---|---|
Renesas MCU | R7FA4M2AD3C |
Keil | MDK ARM 5.38 |
FSP 版本 | 4.0.0 |
调试工具:st-link | ST-LINK/V2-1 |
1.2 硬件接口介绍
MCU接口 | IO属性 | 功能 |
---|---|---|
P405 | 输出接口 | 控制LED-1 |
P404 | 输出接口 | 控制LED-2 |
P002 | 输出接口 | 控制LED-3 |
P005 | 输入接口 | 控制按键SW-1 |
P006 | 输入接口 | 控制按键SW-2 |
硬件连接图如下:
2 FSP配置项目
2.1 项目参数配置
1)配置系统时钟
笔者使用的开发板上配置的晶振为12M Hz,在Clock时钟蓝选择该型号的时钟配置参数
2)配置debug接口,选择swo类型
3)配置IO输出属性
以P404为例介绍IO配置为输出接口的方法,P405和P002的配置方法和P404相同
4)配置IO输入属性
以P005为例介绍IO配置为输出接口的方法,P006的配置方法和P005相同
2.2 生成项目框架
完成项目参数配置之后,点击Generate Project,生成项目框架。使用Keil打开项目,在pin_data.c中定义IO_pin的初始化配置参数
3 IO OutPut功能
3.1 IO输出功能实现
在FSP project项目框架中,IO初始化的函数不用程序调用,在hal_entry.c中的R_BSP_WarmStart函数已经调用。
3.2 IO输出功能测试代码
控制LED1,使其按照1s的周期进行翻转,代码实现如下:
代码15~17行: 关闭LED
代码23行: 调用LED初始化函数,关闭LED
代码28行:LED1翻转功能
源代码:
void bsp_Init( void )
{LED1_OFF;LED2_OFF;LED3_OFF;
}void hal_entry(void)
{/* TODO: add your own code here */bsp_Init();GPT_PWM_Init();while(1){LED1_TOGGLE; R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);}
#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}
在bsb_led.h中定义LED操作的接口
/*FILE NAME : bsp_led.cDescription: led io portAuthor : tangmingfei2013@126.comDate : 2024/06/03*/#ifndef BSP_LED_H#define BSP_LED_H#include "hal_data.h"/* turn on led */
#define LED1_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_05, BSP_IO_LEVEL_HIGH)
#define LED2_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_HIGH)
#define LED3_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_HIGH)/* turn off led */
#define LED1_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_05, BSP_IO_LEVEL_LOW)
#define LED2_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_LOW)
#define LED3_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_LOW)/* trigger led */
#define LED1_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_05 & 0xFF)
#define LED2_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_04 & 0xFF)
#define LED3_TOGGLE R_PORT0->PODR ^= 1<<(BSP_IO_PORT_00_PIN_02 & 0xFF)#endif /* BSP_LED_H */
4 IO InPut功能
4.1 IO Input功能实现
采用硬件检测方法,读取IO的状态,以判断是否有按键按下,根据IO-KEY硬件电路可得,按键按下时,IO检测到低电平
源代码如下:
/*FILE NAME : bsp_pwm.cDescription: generate pwm by timerAuthor : tangmingfei2013@126.comDate : 2024/06/03*/
#include "bsp_key.h"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;
}/* End of this file */
4.2 测试代码实现
在hal_entry.c文件中实现按键触发函数,
当KEY_1按下时,触发LED-1
当KEY_2按下时,触发LED-2
源代码
void hal_entry(void)
{/* TODO: add your own code here */timer1_Init();GPT_PWM_Init();bsp_Init();while(1){if( Key_Scan(KEY1_SW2_PIN) == KEY_ON ) {LED1_TOGGLE; }if( Key_Scan(KEY2_SW3_PIN) == KEY_ON ){LED2_TOGGLE; }}
#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}
5 测试结果
这篇关于Renesas MCU之IO应用介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!