先实现一个LED闪烁:选择芯片型号
1.png

2.png

3.png

4.png

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

111.png

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 推挽输出或开漏输出。
根据原理图,开发板是没有焊接外部晶振的:


屏幕截图 2023-06-14 222329.png
因此时钟配置选择内部晶振:
222.png
配置完成之后按下快捷键 “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 函数里面编写代码。
  1. void hal_entry(void)
  2. {
  3.     /* TODO: add your own code here */
  4. R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
  5.        
  6.          while(1)
  7.      {                 
  8.          R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_06, BSP_IO_LEVEL_LOW);
  9.          R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
  10.          R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_06, BSP_IO_LEVEL_HIGH);
  11.          R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
  12.      }
  13.                  
  14. #if BSP_TZ_SECURE_BUILD
  15.     /* Enter non-secure code */
  16.     R_BSP_NonSecureEnter();
  17. #endif
  18. }

串口数据收发
瑞萨 RA6M4的串口叫做SCI(Serial Communications Interface),意为串行通信接口, 是相对与并行通信的概念,是串行通信技术的一种总称,包括了UART,SPI等串行通信技术。在 FSP 配置界面里面点开 “Pins”-> “Peripherals”-> “Connectivity:SCI”-> “SCI7” 来配置SCI模块, 配置为 “Asynchronous UART” 模式,并选择开发板所使用的串口引脚
33.png
在配置界面底部点击 “Stack”,加入串口UART:
44.png
点击刚刚加入的窗口,在左下角的“属性”窗口中配置 名字(name)、通道(Channel)、回调函数(Callback)名字即可, 引脚(Pins)、波特率(Baud Rate)等其他的属性按照默认的配置即可。
使用 printf 函数时,需要使用到堆,默认情况下堆的大小为0,因此我们需要修改堆的大小。 可以在 FSP 配置界面中的“BSP”属性栏的“RA Common”中通过修改“Heap size”来设置堆区大小。 这里需要设置为 8 的整数倍,对于RA6M4推荐至少为4K(0x1000)
55.png
FSP 配置并生成代码之后,首先需要使用 R_SCI_UART_Open 函数打开 SCI7 UART 模块。
串口中断回调函数
在前面的 FSP 配置步骤的时候,设置了串口中断回调函数的名字为: uart7_callback。 设置这么一个函数的原因是:每当串口发送或者接收完成一个字符时,都会默认触发串口的中断, 而在串口中断中会调用函数 uart7_callback,在函数里需要根据不同的中断情况进行相应的处理。
  1. /* 发送完成标志 */
  2. volatile bool uart_send_complete_flag = false;
  3. /* 串口中断回调 */
  4. void uart7_callback (uart_callback_args_t * p_args)
  5. {
  6.    switch (p_args->event)
  7.    {
  8.       case UART_EVENT_RX_CHAR:
  9.       {
  10.             /* 把串口接收到的数据发送回去 */
  11.             R_SCI_UART_Write(&g_uart7_ctrl, (uint8_t *)&(p_args->data), 1);
  12.             break;
  13.       }
  14.       case UART_EVENT_TX_COMPLETE:
  15.       {
  16.             uart_send_complete_flag = true;
  17.             break;
  18.       }
  19.       default:
  20.             break;
  21.    }
  22. }

重定向 printf 输出
  1. int fputc(int ch, FILE *f)
  2. {
  3.    (void)f;
  4.    R_SCI_UART_Write(&g_uart7_ctrl, (uint8_t *)&ch, 1);
  5.    while(uart_send_complete_flag == false);
  6.    uart_send_complete_flag = false;
  7.    return ch;
  8. }

hal_entry入口函数
C语言程序的入口函数 main 函数调用了 hal_entry 函数。 在 hal_entry 函数里面编写我们的应用代码。
屏幕截图 2023-06-14 223450.png
USB转串口模块连接到串口7:
屏幕截图 2023-06-14 222302.png
调用 printf 输出提示信息到串口:
屏幕截图 2023-06-14 223334.png