




根据原理图LED连接到了P106,在 FSP 配置界面里面点开 “Pins”-> “Ports”-> “P1”-> “P106”, 然后将连接到LED灯的 IO 引脚的 “Mode” 属性配置为 “Output mode (Initial Low)”, 表示该引脚默认输出低电平,其他的属性默认即可。

IO配置:
Pin Configuration 页面的 IOPORT 属性介绍:
[size=0.9]IOPORT 属性
[size=0.9]描述
[size=0.9]Mode
[size=0.9]IO引脚的工作模式,包括输入模式和输出模式,选择输出模式时可以设置引脚的初始输出电平。
[size=0.9]Pull up
[size=0.9]IO引脚是否上拉。
[size=0.9]Drive Capacity
[size=0.9]IO引脚的驱动能力设置。
[size=0.9]Output type
[size=0.9]IO引脚的输出类型。可以选 CMOS 推挽输出或开漏输出。

因此时钟配置选择内部晶振:

配置完成之后按下快捷键 “Ctrl + S” 保存,最后点右上角的 “Generate Project Content” 图标, 让软件自动生成配置代码即可。
从keil左侧“项目资源管理器”打开工程目录下的 “Flex Software/pin_data.c” 源文件, 就会看到 g_bsp_pin_cfg_data 数组中已经加入了LED引脚的配置数据。 在 IOPORT 初始化的时候,它们会被用来对引脚进行初始化配置。当没有使用 RTOS 时,C语言程序的入口函数 main 函数调用了 hal_entry 函数。 打开 “Renesas RA Smart Configurator:Common Sources/hal_entry.c” 文件,在 hal_entry 函数里面编写代码。
void hal_entry(void){ /* TODO: add your own code here */ R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg); while(1) { R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_06, BSP_IO_LEVEL_LOW); R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_06, BSP_IO_LEVEL_HIGH); R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }
复制代码串口数据收发
瑞萨 RA6M4的串口叫做SCI(Serial Communications Interface),意为串行通信接口, 是相对与并行通信的概念,是串行通信技术的一种总称,包括了UART,SPI等串行通信技术。在 FSP 配置界面里面点开 “Pins”-> “Peripherals”-> “Connectivity:SCI”-> “SCI7” 来配置SCI模块, 配置为 “Asynchronous UART” 模式,并选择开发板所使用的串口引脚

在配置界面底部点击 “Stack”,加入串口UART:

点击刚刚加入的窗口,在左下角的“属性”窗口中配置 名字(name)、通道(Channel)、回调函数(Callback)名字即可, 引脚(Pins)、波特率(Baud Rate)等其他的属性按照默认的配置即可。
使用 printf 函数时,需要使用到堆,默认情况下堆的大小为0,因此我们需要修改堆的大小。 可以在 FSP 配置界面中的“BSP”属性栏的“RA Common”中通过修改“Heap size”来设置堆区大小。 这里需要设置为 8 的整数倍,对于RA6M4推荐至少为4K(0x1000)

FSP 配置并生成代码之后,首先需要使用 R_SCI_UART_Open 函数打开 SCI7 UART 模块。
串口中断回调函数
在前面的 FSP 配置步骤的时候,设置了串口中断回调函数的名字为: uart7_callback。 设置这么一个函数的原因是:每当串口发送或者接收完成一个字符时,都会默认触发串口的中断, 而在串口中断中会调用函数 uart7_callback,在函数里需要根据不同的中断情况进行相应的处理。
/* 发送完成标志 */volatile bool uart_send_complete_flag = false; /* 串口中断回调 */ void uart7_callback (uart_callback_args_t * p_args) { switch (p_args->event) { case UART_EVENT_RX_CHAR: { /* 把串口接收到的数据发送回去 */ R_SCI_UART_Write(&g_uart7_ctrl, (uint8_t *)&(p_args->data), 1); break; } case UART_EVENT_TX_COMPLETE: { uart_send_complete_flag = true; break; } default: break; } }
复制代码重定向 printf 输出
int fputc(int ch, FILE *f){ (void)f; R_SCI_UART_Write(&g_uart7_ctrl, (uint8_t *)&ch, 1); while(uart_send_complete_flag == false); uart_send_complete_flag = false; return ch; }
复制代码hal_entry入口函数
C语言程序的入口函数 main 函数调用了 hal_entry 函数。 在 hal_entry 函数里面编写我们的应用代码。

USB转串口模块连接到串口7:

调用 printf 输出提示信息到串口:
