更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com前言由于Neptune开发板openharmonySDK版本更新,发现之前示例代码中驱动OLED屏显示不能在当前版本使用,所以修改示例代码,支持当前版本(openharmonyV1.1.0LTS)使用I2C驱动OLED屏显示IoT接口,并将修改后的代码和调试过程中出现的一些问题进行说明。一、环境准备1.1开发环境、编译环境搭建,参考官方文档,参考链接如下:Neptune开发板环境搭建与使用1.2Neptune开发板openharmonyV1.1.0LTS版本获取:gitclonehttps://gitee。com/hihopeorg_group/neptune-harmony-os1.1-iot.git2。材料准备NeptuneHarmonyOSIoT物联网模块0.96寸OLED显示屏(SSD1306)多条杜邦线3.开发调试3.1IoT相关基础知识介绍openHarmonyIoT硬件子系统提供了一些Peripheral相关的接口,目录位于:base/iot_hardware/peripheral/interfaces/kitsI2C相关接口,接口头文件为iot_i2c.h,I2C写函数接口为:unsignedintIoTTI2cWrite(unsignedintid,unsignedshortdeviceAddr,constunsignedchar*data,unsignedintdataLen)3.2获取HiHope官方Neptune开发板OLED示例程序Neptune开发板OLED示例程序3.3将OLED示例程序复制到openharmonyV1.1.0LTS版本SDK中3.4修改示例程序(1)修改头文件->oled_ssd1306.c#include#include#include"oled_ssd1306.h"#include"iot_i2c.h"#include"iot_errno.h"#include"oled_fonts.h"(2)修改OLED_I2C_IDX定义->oled_ssd1306.c#defineOLED_I2C_IDX0(3)修改I2cWiteByte函数->oled_ssd1306.cstaticuint32_tI2cWiteByte(uint8_tregAddr,uint8_tbyte){uint8_tbuffer[]={regAddr,byte};returnIoTI2cWrite(0,OLED_I2C_ADDR,buffer,sizeof(buffer));}(4)修改IIC初始化函数->oled_ssd1306.cIoTI2cInit(OLED_I2C_IDX,OLED_I2C_BAUDRATE);(5)将WIFI_IOT_SUCCESS改为IOT_SUCCESS(6)修改headerfile->oled_demo.c#include#include#include"ohos_init.h"#include"cmsis_os2.h"#include"oled_ssd1306.h"(7)修改BUILD.gnstatic_library("oled_sample"){sources=["oled_demo.c","oled_ssd1306.c",]include_dirs=["//utils/native/lite/include","//kernel/liteos_m/kal/cmsis","//基础/iot_hardware/peripheral/interfaces/kits",]}3.5。编译烧写固件到Neptune开发板(BUG)烧写固件到开发板后,按RST键,串口返回错误指令,OLED屏不显示四、问题解决4.1.问题分析:由于我们使用的是IOT接口的I2C驱动,考虑串口返回ACK错误,可能是I2C连续写时序问题………………...4.2。查找问题原因:用逻辑分析仪分析I2C信号,找到I2C连续写入的时序问题。因为I2C的连续写入速度太快,没有适当的延时导致ACK答案是错误的,这张图逻辑分析仪捕获I2C信号:4.3,解决问题:修改I2cWiteByte函数:statuint32_tI2cWiteByte(uint8_tregAddr,uint8_tbyte){uint8_tbuffer[]={regAddr,byte};IoTI2cWrite(0,OLED_I2C_ADDR,buffer,sizeof(buffer));tls_os_time_delay(1);//这个函数延时2ms左右}修改WriteCmd和WriteData函数:statuint32_tWriteCmd(uint8_tcmd){I2cWiteByte(OLED_I2C_CMD,cmd);}staticuint32_tWriteData(uint8_tdata){I2cWiteByte(OLED_I2C_}4DATA,编译烧写固件到Neptune开发板,OLED可以正常显示,串口无异常。5.To综上所述,完成了基于openharmonyV1.1.0LTS版Neptune开发板I2C驱动OLED屏显示的示例代码修改,解决了部分产生的问题,也发现了一些问题,比如延迟fu功能如果时间过长,OLED屏幕的刷新会过慢,在某些情况下会出现显示不流畅的情况。对于由此带来的问题,我会把延迟函数降低到us级别,以达到显示流畅的目的。限于篇幅,延时功能就不做介绍了。整理之前先在gitte中新建一个库,然后把代码上传到gitte地址。以下是修改后的代码:oled_sample.rar更多内容请访问:andHuawei鸿蒙官方技术社区https://harmonyos.51cto.com