HarmonyOS技术社区 · 2020年10月09日

I2C驱动 Hi3861 驱动OLED屏幕显示

Hi3861 OLED驱动

可以看附件视频详细说明

Hispark WiFi开发套件又提供一个oled屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。

图片.png

经过一晚上的调试,现在终于在鸿蒙系统上实现OLED屏幕的显示了,效果如下:
图片.png

这里记录一下移植的过程

(1)编写驱动代码

首先在
└── applications

└── sample
    └── wifi-iot
        └── app

新增应用:oled_demo,源码已经放在附件,大家自己下载。

(2)设置I2C引脚复用

确定i2c引脚,查看原理图,可以看到OLED屏幕使用到的是I2C0,引脚是GPIO13、GPIO14
图片.png

所以我们需要修改源码,在vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c 文件中,初始化I2C引脚的代码修改成如下:

#ifdef CONFIG_I2C_SUPPORT
    /* I2C IO复用也可以选择3/4; 9/10,根据产品设计选择 */
    hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_13_I2C0_SDA);
    hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_14_I2C0_SCL);
#endif

复制代码

(3)开启I2C功能

修改文件:vendor\hisi\hi3861\hi3861\build\config\usr_config.mk
增加 CONFIG_I2C_SUPPORT=y

以上修改变完成了,重新编译即可看到OLED能成功驱动。

(4)OLED屏幕驱动讲解

入口函数:

void my_oled_demo(void)
{
    //初始化,我们使用的是I2C0

    I2cInit(WIFI_IOT_I2C_IDX_0, 100000); /* baudrate: 100000 */
    led_init();
    OLED_ColorTurn(0);//0正常显示,1 反色显示
    OLED_displayTurn(0);//0正常显示 1 屏幕翻转显示
    OLED_ShowString(8,16,"hello world",16);

    OLED_Refresh();
}

I2C写函数:

u32 my_i2c_write(WifiIotI2cIdx id, u16 device_addr, u32 send_len)
{
    u32 status;
    WifiIotI2cData es8311_i2c_data = { 0 };

    es8311_i2c_data.sendBuf = g_send_data;
    es8311_i2c_data.sendLen = send_len;
    status = I2cWrite(id, device_addr, &es8311_i2c_data);
    if (status != 0) {
        printf("===== Error: I2C write status = 0x%x! =====\r\n", status);
        return status;
    }

    return 0;
}

源码及视频资源包点击下方链接,跳转至原网站查看
转自https://harmonyos.51cto.com/p...

推荐阅读
关注数
3010
内容数
446
华为鸿蒙相关技术,活动及资讯,欢迎关注及加入创作
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息