1、驱动LCD
上一节已经实现了串口下载固件,继续往下走。当前计划使用IIC驱动一款显示屏,驱动的显示屏选择:oled12864,如图:
I2C的资料也可以参考野火,他也有RA系列相关的教程,链接:2. 如何安装e2 studio/Keil开发环境 — [野火]瑞萨RA系列FSP库开发实战指南——基于野火启明开发板 文档
从教程中得知,不能使用DAP仿真器(那基本上ST-LINK就更不要想了):
设置IIC功能:
安装资料包中的PPT,针对IIC外设的使用,基本操作都讲到了。按照教程,增加IIC外设→属性:
当前P400引脚上没有输出信号:
将OLED的初始化放到相关任务后,发现LED就不亮了;注释掉OLED操作的香瓜代码后,LED正常闪烁。最有可能是IIC的操作有错误,导致程序卡死了。现在没有初始化串口,所以暂时使用LED的亮灭状态来调试代码。
接上oled能够在示波器上看到IIC相关波形,如图:
所以,推测IIC初始化肯定成功了,只需要排除接线问题。果然,排除接线问题后,oled12864显示正常,如图:
这里的OLED驱动代码暂时也是使用的资料包里面的例程,后面会上U8G2显示库。
2、驱动温度传感器
刚好有一个LM75温度传感器。简单看了一下时序:
简单看了设置寄存器,在这里并不想使用输出报警功能,只要能够读取实时温度就行。
正常的IIC通信时序:IIC的通信知识点有点陌生了,找了几张图补充了一下知识点:
寄存器地址:
应该连起来看,首先是设置指针寄存器,然后就可以随便读取温度了。
尝试定义多个IIC对象
在这里OLED和LM75都是使用的硬件IIC,所以尝试定义多个IIC对象:
这里定义了2个IIC对象,结果发现固件下载后,直接异常了,OLED不显示,温度不能采集:
所以只能换一种方式,点击相关属性的感叹号,能够找到一主多从的解析:
抓取了部分代码:
/* Send data to I2C slave on the same channel */
err = R_IIC_MASTER_SlaveAddressSet(&g_i2c_device_ctrl_2, I2C_SLAVE_DISPLAY_ADAPTER, I2C_MASTER_ADDR_MODE_7BIT);
assert(FSP_SUCCESS == err);
g_i2c_tx_buffer[0] = 0xAA; // NOLINT
g_i2c_tx_buffer[1] = 0xBB; // NOLINT
g_i2c_callback_event = I2C_MASTER_EVENT_ABORTED;
timeout_ms = I2C_TRANSACTION_BUSY_DELAY;
err = R_IIC_MASTER_Write(&g_i2c_device_ctrl_2, &g_i2c_tx_buffer[0], 2U, false);
assert(FSP_SUCCESS == err);
while ((I2C_MASTER_EVENT_TX_COMPLETE != g_i2c_callback_event) && timeout_ms)
{
R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MILLISECONDS);
timeout_ms--;;
}
if (I2C_MASTER_EVENT_ABORTED == g_i2c_callback_event)
{
__BKPT(0);
}
显示温度效果:
视频效果(温度采集后直接显示,没有滤波,各位将就看):
相关链接:
【瑞萨 RA2E1】+ 点亮LED(1)
【瑞萨 RA2E1】+ 硬件IIC驱动LCD和LM75温度传感器(2)
【瑞萨 RA2E1】+ 基于U8G2显示菜单(3)
【瑞萨 RA2E1】+ 红外解码(4)
【瑞萨 RA2E1】+ 红外发射(5)
【瑞萨 RA2E1】+ 空调控制项目-总结帖(6)