电子产业一站式赋能平台

PCB联盟网

搜索
查看: 724|回复: 1
收起左侧

第6节 Hi3861 OLED屏幕驱动 基于鸿蒙系统

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-10-2 23:56:45 | 显示全部楼层 |阅读模式
第6节 Hi3861 OLED屏幕驱动 基于鸿蒙系统,   
本帖最后由 jf_39160458 于 2020-10-2 22:37 编辑



Hi3861 OLED驱动

Hispark WiFi开发套件又提供一个oled屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。 经过一晚上的调试,现在终于在鸿蒙系统上实现OLED屏幕的显示了,效果如下:

ca25b9167be023837abeebef4570f65.png (265.19 KB, 下载次数: 0)

下载附件  保存到相册  

1 小时前 上传

这里记录一下移植的过程 (1)编写驱动代码 首先在 └── applications     └── sample         └── wifi-iot             └── app 新增应用:oled_demo ,源码已经放在附件,大家自己下载。

(2)设置I2C引脚复用 确定i2c 引脚,查看原理图,可以看到 OLED 屏幕使用到的是 I2C0 ,引脚是 GPIO13 、 GPIO14

ac413f8eb6098de509df688098458c9.png (504.99 KB, 下载次数: 0)

下载附件  保存到相册  

1 小时前 上传

所以我们需要修改源码,在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
      

  •   
  •     hi_i2c_init(HI_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 写函数:

  • hi_u32 my_i2c_write(hi_i2c_idx id, hi_u16 device_addr, hi_u32 send_len)
      

  •   
  • {
      

  •   
  •     hi_u32 status;
      

  •   
  •     hi_i2c_data es8311_i2c_data = { 0 };
      

  •   

  •   

  •   
  •     es8311_i2c_data.send_buf = g_send_data;
      

  •   
  •     es8311_i2c_data.send_len = send_len;
      

  •   
  •     status = hi_i2c_write(id, device_addr, &es8311_i2c_data);
      

  •   
  •     if (status != HI_ERR_SUCCESS) {
      

  •   
  •         printf(“===== Error: I2C write status = 0x%x! =====\r\n“, status);
      

  •   
  •         return status;
      

  •   
  •     }
      

  •   

  •   

  •   
  •     return HI_ERR_SUCCESS;
      

  •   
  • }

复制代码
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表