OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕摘要 本文简单介绍如何操作 I2C 去显示 OLED 屏幕 并且实现动画播放 中文英文显示 绘图等功能 适合群体 适用于润和 Hi3861 开发板 L0 轻量系统驱动开发 文中所有代码仓库 https gitee com qidiyun hihope 3861 smart home kit

大家好,我是讯享网,很高兴认识大家。

摘要:本文简单介绍如何操作I2C去显示OLED屏幕,并且实现动画播放、中文英文显示、绘图等功能

适合群体:适用于润和Hi3861开发板,L0轻量系统驱动开发

文中所有代码仓库:https://gitee.com/qidiyun/hihope-3861-smart-home-kit 

本文参考许思维老师的文章,许思维老师主页是:

https://harmonyos.51cto.com/user/posts/ 

感谢许思维老师~

7.1实验效果

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

以下是移植效果:


讯享网

接口:I2C

使用引脚:HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14

7.2代码

这里我直接用许思维老师之前移植好的代码,不过由于鸿蒙版本更新过快,许思维老师之前的代码是基于1.0版本,直接拿到3.0以上版本编译会出错,这里我修改了编译错误。放在我的仓库中。

整个代码目录如下:

  

主要是3个文件夹:

(1)examples

测试代码,里面有一个ssd1306_demo.c文件,是我们的入口函数。

(2)libm_port

从musl libc中抽取的`sin`和`cos`的实现。

(3)ssd1306

相关驱动代码部分。

接下来我们来重点看下代码部分:

(1)初始化入口函数

入口函数是 Ssd1306TestDemo ,它创建了Ssd1306TestTask线程,所以我们重点看 Ssd1306TestTask线程。

void Ssd1306TestTask(void* arg) { (void) arg; //先初始化引脚 IoTGpioInit(HI_IO_NAME_GPIO_13); IoTGpioInit(HI_IO_NAME_GPIO_14); //将引脚功能设置为I2C引脚 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); //初始化I2C0 IoTI2cInit(0, OLED_I2C_BAUDRATE); //WatchDogDisable(); usleep(20*1000); //初始化SSD1306 ssd1306_Init(); //全部清空 ssd1306_Fill(Black); ssd1306_SetCursor(0, 0); //显示 Hello HarmonyOS! ssd1306_DrawString("Hello HarmonyOS!", Font_7x10, White); uint32_t start = HAL_GetTick(); ssd1306_UpdateScreen(); uint32_t end = HAL_GetTick(); printf("ssd1306_UpdateScreen time cost: %d ms.\r\n", end - start); TestDrawChinese1(); TestDrawChinese2(); TestGetTick(); while (1) { //进行所有用例测试 ssd1306_TestAll(); usleep(10000); } }

讯享网

(2)I2C发送函数

我们要操作OLED屏幕,就需要使用I2C发送数据给OLED屏幕,代码使用

ssd1306_SendData函数发送I2C数据,该函数原型如下,直接调用的hi3861的i2c接口函数:

讯享网static uint32_t ssd1306_SendData(uint8_t* data, size_t size) { int id = SSD1306_I2C_IDX; return IoTI2cWrite(id, SSD1306_I2C_ADDR, data, size); }

(3)修改 usr_config.mk文件

注意,默认代码是没有打开i2c功能的,直接编译会提示相关的i2c函数没有定义,我们需要打开i2c的功能,具体是修改usr_config.mk文件 ,目前版本(3.1)的路径是:

device\soc\hisilicon\hi3861v100\sdk_liteos\build\config\usr_config.mk

但是代码结构可能会调整,路径可能会变。

增加 CONFIG_I2C_SUPPORT=y

 

小讯
上一篇 2025-02-23 08:09
下一篇 2025-04-06 20:48

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54275.html