想了解更多内容,请访问:
创新互联专注于企业成都全网营销、网站重做改版、思明网站定制设计、自适应品牌网站建设、H5技术、购物商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为思明等各大城市提供网站开发制作服务。
和华为官方合作共建的鸿蒙技术社区
https://harmonyos.
由于Neptune开发板openharmony SDK版本的更新,我发现在之前示例代码中驱动OLED屏幕显示以在现版本中无法使用,故此修改示例代码以支持对当前版本(openharmony V1.1.0 LTS)IoT接口使用I2C驱动OLED屏幕显示,并把修改代码和调试过程中出现的一些问题在做说明。
1.1 开发环境、编译环境搭建,参考官方文档,参考链接如下:
Neptune开发板的环境搭建及使用
1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取:
- git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git
3.1 IoT相关基础知识介绍
openHarmony IoT硬件子系统提供了一些外设相关的接口,目录位于:
- base/iot_hardware/peripheral/interfaces/kits
I2C相关接口,接口头文件为iot_i2c.h,其中I2C写入函数接口为:
- unsigned int IoTI2cWrite(unsigned int id, unsigned short deviceAddr, const unsigned char *data, unsigned int dataLen)
3.2 获取HiHope官方Neptune开发板OLED示例程序
Neptune开发板OLED示例程序
3.3将OLED示例程序复制到 openharmony V1.1.0 LTS 版本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
- #define OLED_I2C_IDX 0
(3)修改I2cWiteByte函数->oled_ssd1306.c
- static uint32_t I2cWiteByte(uint8_t regAddr, uint8_t byte)
- {
- uint8_t buffer[] = {regAddr, byte};
- return IoTI2cWrite(0,OLED_I2C_ADDR,buffer,sizeof(buffer));
- }
(4)修改IIC初始化函数->oled_ssd1306.c
- IoTI2cInit(OLED_I2C_IDX, OLED_I2C_BAUDRATE);
(5)将WIFI_IOT_SUCCESS修改为IOT_SUCCESS
(6)修改头文件->oled_demo.c
- #include
- #include
- #include "ohos_init.h"
- #include "cmsis_os2.h"
- #include "oled_ssd1306.h"
(7)修改BUILD.gn
- static_library("oled_sample") {
- sources = [
- "oled_demo.c",
- "oled_ssd1306.c",
- ]
- include_dirs = [
- "//utils/native/lite/include",
- "//kernel/liteos_m/kal/cmsis",
- "//base/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函数:
- static uint32_t I2cWiteByte(uint8_t regAddr, uint8_t byte)
- {
- uint8_t buffer[] = {regAddr, byte};
- IoTI2cWrite(0,OLED_I2C_ADDR,buffer,sizeof(buffer));
- tls_os_time_delay(1); //此函数大概延时2ms
- }
修改WriteCmd与WriteData函数:
- static uint32_t WriteCmd(uint8_t cmd)
- {
- I2cWiteByte(OLED_I2C_CMD, cmd);
- }
- static uint32_t WriteData(uint8_t data)
- {
- I2cWiteByte(OLED_I2C_DATA, data);
- }
4.4、编译将固件烧录到Neptune开发板中
OLED能正常显示,串口无异常情况产生。
以上,完成一个基于openharmony V1.1.0 LTS 版本 Neptune开发板I2C驱动OLED屏幕显示示例代码的修改以完成,对于其中所产生的一些问题做了解决,同时还发现一些问题,例如延时函数时间过长,使OLED屏幕刷新过慢,在一定条件下显示不流畅,对此产生的问题我将延时函数以降至us级别,达到流畅显示的目的。限于篇幅,延时函数就不介绍了,还没整理先在gitte新建一个库,后续会把代码上传gitte地址
以下是本次修改的代码:
oled_sample.rar
想了解更多内容,请访问:
和华为官方合作共建的鸿蒙技术社区
https://harmonyos.
标题名称:OpenHarmonyNeptune开发板I2C驱动OLED屏幕显示
网站地址:http://www.shufengxianlan.com/qtweb/news11/132211.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联