
#2020征文-开发板#基于鸿蒙OS移植OLED驱动程序
硬件连接
通过万用表测量,得到I2C总线的oled屏的引脚连接情况如上图所示,对比原理图,OLED屏幕的I2C总线使用到的是I2C0,SDA引脚对应GPIO13,SCL引脚对应GPIO14。
OLEDHi3861最小系统板备注
GNDGND
VCC3V3
SCLI2C0_SCLGPIO14
SDAI2C0_SDAGPIO13引脚映射引脚映射定义的位置如下所示:
/* I2C MUX: */
#ifdef CONFIG_I2C_SUPPORT
/* The I2C I/O multiplexing mode can also be 3/4 or 9/10 based on the product design. */
hi_io_set_func(HI_IO_NAME_GPIO_0, HI_IO_FUNC_GPIO_0_I2C1_SDA);
hi_io_set_func(HI_IO_NAME_GPIO_1, HI_IO_FUNC_GPIO_1_I2C1_SCL);
#endif
文件所在路径:vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c
└── vendor
└── hisi
└── hi3861
└── hi3861
└── app
└── wifiiot_app
└── app_io_init.c
同时要把支持I2C的宏定义打开,该宏定义所在位置为:
CONFIG_I2C_SUPPORT=y
vendor\hisi\hi3861\hi3861\build\config\usr_config.mk
修改为如下:
OLED驱动移植
我们之前分享过使用STM32驱动SPI总线的0.96寸OLED屏,网文链接如下:
STM32驱动0.96寸OLED液晶屏
OLED液晶屏如何显示中文呢?
今天我们在上面的基础上,完成鸿蒙OS对OLED的驱动。
(1)拷贝文件
将原工程目录HARDWARE目录下的OLED文件夹整体拷贝到鸿蒙系统的如下路径下:
└── applications
└── sample
└── wifi-iot
└── app
拷贝的OLED文件夹:
拷贝完毕,鸿蒙OS下工程目录结构如下:
(2)封装I2C操作函数
因为之前分享的网文是SPI总线与ssd1306控制器交互,这回改成了I2C总线,所以我们要重写下面的封装函数:
void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
具体实现如下:
(3)修改OLED_Init函数
修改OLED_Init函数,删除STM32 GPIO初始化代码,修改后的代码如下所示:
(4)入口函数
将之前STM32工程的main函数改名为:void OLED_Demo(void) ,放置在oled.c文件底部,作为入口函数,该函数的具体实现如下所示:
(5)oled.h文件中删除STM32相关代码
(6)编译验证
修改BUILD.gn文件:
OLED文件夹下面的BUILD.gn文件修改如下:
上级目录(即app文件夹)下的BUILD.gn文件修改如下:
编译并下载
编译和下载固件参考下面网文操作:
鸿蒙系统固件编译及烧写——通过AT命令完成WLAN模组Hi3861联网
结果展示
上图可以正常显示文字,证明鸿蒙OS驱动OLED移植成功,由上可以看出整个移植过程还是比较简单的,只需要将OLED_WR_Byte函数改写即可完成此部分工作,主控芯片换成其他芯片,比如51单片机、msp430等等移植方法都是类似的,大家可以试试哈。
