瑞萨单片机论坛
直播中

米兰的无线电

10年用户 12经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[经验]

【RA-Eco-RA4M2开发板评测】+ 开发环境搭建及外设初体验

1 开箱

image-20260330222128063.png

为马年特殊版购置了一块I2C OLED屏幕
image-20260330222213307.png

屏幕亮了之后是这样子的
image-20260330222307692.png

2 开发环境

2.1 硬件

2.1.1调试器使用野火CMSIS-DAP仿真器

仿真器的线序和板子不一样,需要调整一下线序。

2.1.2 供电及USB调试口

使用POWER1这个接口

2.2 软件

安装setup_fsp_v4_5_0_rasc_v2023-04.exe,并把RA Smart工具集成到keil环境

把RA集成到keil的方法可以参考百问网,3.4.1 获取RASC和MDK的安装软件

第3章 开发环境搭建与体验 | 百问网
image-20260321153108662.png

3 生成自己的工程

3.1 使用RA Smart工具建立自己的工程

3.1.1 打开RA Smart Configurator

image-20260321150113538.png

3.1.2 输入工程名称及路径

image-20260321150150572.png

3.1.3 选择芯片型号和开发环境

image-20260321150326357.png

3.1.4 选择裸机开发

image-20260321150420394.png

3.1.5 完成后的界面

image-20260321150527165.png

3.2 根据原理图配置

3.2.1 调试口

image-20260321151104330.png

image-20260321151127371.png

3.2.2 晶振

板子是贴片的YXC-24MHz晶振
image-20260321152621413.png

image-20260321152606009.png

3.2.3 LED

image-20260321150856513.png

3.2.4 两个按键

image-20260321150727169.png

3.2.5 串口

image-20260321152652065.png

引脚上右键可以看这是串口几

image-20260321152747235.png
image-20260321152902386.png

3.2.6 I2C

image-20260321183448972.png

3.2.7 生成代码

image-20260321152940552.png

这是生成代码的结构,编译无错无警告
image-20260321153220555.png

3.3 添加stack

3.3.1 串口

修改名字和通道
image-20260321172429398.png

参考“7.1 sci_uart模块的使用,7.1.1 使用RASC配置”,第7章 UART | 百问网

3.3.2 I2C

image-20260321183550175.png
image-20260321183706347.png

4 部分测试代码

4.1 串口测试

基础代码

static volatile int g_uart9_tx_complete = 0;
static volatile int g_uart9_rx_complete = 0;
void uart9_callback(uart_callback_args_t * p_args)
{
    switch (p_args->event)
    {
        case UART_EVENT_TX_COMPLETE:
        {
            g_uart9_tx_complete  = 1;
            break;
        }
        case UART_EVENT_RX_COMPLETE:
        {
            g_uart9_rx_complete = 1;
            break;
        }
        default:
        {
            break;
        }
    }
}
void uart9_wait_for_tx(void)
{
    while (!g_uart9_tx_complete);
    g_uart9_tx_complete = 0;
}
void uart9_wait_for_rx(void)
{
    while (!g_uart9_rx_complete);
    g_uart9_rx_complete = 0;
}
//主函数里面调用
/* 配置串口 */
err = g_uart9.p_api->open(g_uart9.p_ctrl, g_uart9.p_cfg);
/* 启动发送字符 */
g_uart9.p_api->write(g_uart9.p_ctrl, "100ask\r\n", 8);
/* 等待发送完毕 */
uart9_wait_for_tx();

串口重定向代码

#include <stdio.h>
int fputc(int ch, FILE * f)
{
    (void)f;
​
    /* 启动发送字符 */
    g_uart9.p_api->write(g_uart9.p_ctrl, (uint8_t const * const)&ch, 1);
​
    /* 等待发送完毕 */
    uart9_wait_for_tx();
​
    return ch;
}
​
/* 重写这个函数,重定向scanf */
int fgetc(FILE *f)
{
    uint8_t ch;
​
    (void)f;
​
    /* 启动接收字符 */
    g_uart9.p_api->read(g_uart9.p_ctrl, &ch, 1);
​
    /* 等待接收完毕 */
    uart9_wait_for_rx();
​
    /* 回显 */
    {
        fputc(ch, NULL);
​
        /* 回车之后加换行 */
        if (ch == '\r')
        {
            fputc('\n', NULL);;
        }
    }
​
    return (int)ch;
}

4.2 I2C测试

R_SCI_I2C_Open(&g_i2c3_ctrl, &g_i2c3_cfg);
OLED_Init();

4.3 按键亮灯

/* 读按键状态 */
g_ioport.p_api->pinRead(&g_ioport_ctrl, KEY1, &level);//KEY1=BSP_IO_PORT_00_PIN_05
/* 根据按键状态设置LED */
g_ioport.p_api->pinWrite(&g_ioport_ctrl, LED1, level);

5 U8G2移植

U8G2移植参考

【RA-Eco-RA6M4开发板评测】2、I2C外设驱动OLED屏幕和移植u8g2 - 瑞萨单片机论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!

#include "u8g2.h"
extern uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
extern uint8_t u8x8_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
void u8g2Init(u8g2_t *u8g2)
{
    //初始化u8g2实例,注册自定义的接口函数
    u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2,U8G2_R0,u8x8_i2c,u8x8_gpio_and_delay);
    u8g2_InitDisplay(u8g2); // 根据所选的芯片进行初始化工作,初始化完成后,显示器处于关闭状态
    u8g2_SetPowerSave(u8g2, 0); // 打开显示器
    u8g2_ClearBuffer(u8g2);
​
    R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
​
    u8g2_DrawLine(u8g2, 0, 0, 127, 63);
    u8g2_DrawLine(u8g2, 127, 0, 0, 63);
    u8g2_SendBuffer(u8g2);
    R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
}
/*官方提供的Logo绘制demo*/
void draw(u8g2_t u8g2)
{
    u8g2_InitDisplay(&u8g2);        // 根据所选的芯片进行初始化工作,初始化完成后,显示器处于关闭状态
    u8g2_SetPowerSave(&u8g2, 0);    // 打开显示器
    u8g2_SetDrawColor(&u8g2, 0);  //设置绘制颜色(反色)
    u8g2_ClearDisplay(&u8g2); // 清除显示数据及屏幕
    u8g2_ClearBuffer(&u8g2);//清空缓冲区的内容
    u8g2_SetFont(&u8g2,u8g2_font_10x20_mr);//设置英文字体
    u8g2_DrawStr(&u8g2,20,15,"HELLO MILAN");//输出固定不变的字符串
    u8g2_SetFont(&u8g2,u8g2_font_7x14_mr);//设置英文字体
    u8g2_DrawStr(&u8g2,0,40,"DNS:218.203.59.116");//输出固定不变的字符串
    u8g2_DrawStr(&u8g2,0,60,"Ping Domain Name:");//输出固定不变的字符串
    u8g2_DrawStr(&u8g2,20,80,"www.baidu.com");//输出固定不变的字符串
    u8g2_DrawStr(&u8g2,0,100,"DNS GetIP:");//输出固定不变的字符串
    u8g2_DrawStr(&u8g2,0,140,"PING SUCCESS!");//输出固定不变的字符串
    u8g2_SendBuffer(&u8g2);//绘制缓冲区的内容    
}
//主循环调用
u8g2Init(&u8g2);
u8g2_FirstPage(&u8g2);
do
{
draw(u8g2);
} while (u8g2_NextPage(&u8g2));

更多回帖

发帖
×
20
完善资料,
赚取积分