1 开箱

为马年特殊版购置了一块I2C OLED屏幕

屏幕亮了之后是这样子的

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章 开发环境搭建与体验 | 百问网

3 生成自己的工程
3.1 使用RA Smart工具建立自己的工程
3.1.1 打开RA Smart Configurator

3.1.2 输入工程名称及路径

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

3.1.4 选择裸机开发

3.1.5 完成后的界面

3.2 根据原理图配置
3.2.1 调试口


3.2.2 晶振
板子是贴片的YXC-24MHz晶振


3.2.3 LED

3.2.4 两个按键

3.2.5 串口

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


3.2.6 I2C

3.2.7 生成代码

这是生成代码的结构,编译无错无警告

3.3 添加stack
3.3.1 串口
修改名字和通道

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


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;
}
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);
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_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);
}
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));