
为马年特殊版购置了一块I2C OLED屏幕
屏幕亮了之后是这样子的
仿真器的线序和板子不一样,需要调整一下线序。
使用POWER1这个接口
安装setup_fsp_v4_5_0_rasc_v2023-04.exe,并把RA Smart工具集成到keil环境
把RA集成到keil的方法可以参考百问网,3.4.1 获取RASC和MDK的安装软件







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




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




这是生成代码的结构,编译无错无警告
修改名字和通道
参考“7.1 sci_uart模块的使用,7.1.1 使用RASC配置”,第7章 UART | 百问网


基础代码
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;
}
R_SCI_I2C_Open(&g_i2c3_ctrl, &g_i2c3_cfg);
OLED_Init();
/* 读按键状态 */
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);
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));
更多回帖