0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Hi3861硬件i2c驱动oled

嵌入式Share 来源:嵌入式Share 2023-04-18 09:09 次阅读

一、前言

最近想用 3861 做个有意思的东西,记录一下开发过程。今天使用 3861 的硬件 i2c 驱动 oled

硬件平台:Bearpi-Nano

软件SDK:润和sdk

9de265d0-dd7c-11ed-bfe3-dac502259ad0.png

二、搬一个 OLED轮子

我之前写过一篇基于 stm32cubemx 快速使用iic 接口 oled 的过程,里面有现成的 oled 接口,我们只要直接拿过来替换掉底层接口就行。

STM32CubeMX驱动4脚OLED模块 https://blog.csdn.net/qq_45396672/article/details/118272126

替换的接口位置如下位置:

9e1c167c-dd7c-11ed-bfe3-dac502259ad0.png

三、Hi3861i2c 接口

SDK提供了两层接口封装,一层是芯片级的 driver 驱动,由原厂sdk提供:

9e44cc02-dd7c-11ed-bfe3-dac502259ad0.png

另一层 open Harmony 级的驱动,是操作系统对原厂sdk的封装,主要为了兼容不同芯片开发:

9e6cce5a-dd7c-11ed-bfe3-dac502259ad0.png

原厂的 driver 接口更加细致,系统层的driver其实就是对原厂的一层封装,简单开发可以直接使用系统提供的driver接口,复杂开发则推荐研究一下原厂的接口,因为sdk不是很完善,不符合需求的可以直接改原厂的sdk。

我们简单驱动个i2c,使用系统封装的接口:

unsigned int IoTI2cInit(unsigned int id, unsigned int baudrate);
unsigned int IoTI2cDeinit(unsigned int id);
unsigned int IoTI2cWrite(unsigned int id, unsigned short deviceAddr, const unsigned char *data, unsigned int dataLen);
unsigned int IoTI2cRead(unsigned int id, unsigned short deviceAddr, unsigned char *data, unsigned int dataLen);
unsigned int IoTI2cSetBaudrate(unsigned int id, unsigned int baudrate);

用上面的读写接口替换掉 oled 轮子里面的 i2c 接口

9e92934c-dd7c-11ed-bfe3-dac502259ad0.png

四、使用驱动代码

在主函数中创建一个线程,调用 i2c、oled初始化接口,将初始化代码注册到系统运行回调中

#include
#include "stdio.h"
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_i2c.h"
#include "iot_errno.h"
#include "iot_i2c.h"
#include "iot_gpio.h"
#define OLED_I2C_BAUDRATE 400000
static void iot_i2c_init(void)
{
IoTGpioInit(HI_IO_NAME_GPIO_0);
IoTGpioInit(HI_IO_NAME_GPIO_1);
//将引脚功能设置为 I2C 引脚
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);
//初始化 I2C0
uint32_t ret = IoTI2cInit(HI_I2C_IDX_1, OLED_I2C_BAUDRATE);
if (ret != IOT_SUCCESS) {
printf("[OLED_TASK] Init i2c Fail. ret = %d ", ret);
}
printf("[OLED_TASK] Init i2c succ. ");
}
void oled_i2c_init(void)
{
iot_i2c_init();
OLED_Init();
OLED_Clear();
}
void *oled_demo(const char *arg)
{
(void)arg;
char i = 0;
char dat[10] = { 0 };
oled_i2c_init();
while (1) {
printf("[OLED_TASK] i = %d! ", i);
OLED_ShowNum(10, 10, i++, 1, 8);
osDelay(100);
}
}
void oled_demo_init(void)
{
osThreadAttr_t attr;
attr.name = "OLED_Task";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 2048;
attr.priority = 26;
if (osThreadNew((osThreadFunc_t)oled_demo, NULL, &attr) == NULL) {
printf("[OLED_TASK] Falied to create OLED_TASK! ");
}
}
SYS_RUN(oled_demo_init);

9ea37702-dd7c-11ed-bfe3-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OLED
    +关注

    关注

    119

    文章

    6198

    浏览量

    224084
  • 接口
    +关注

    关注

    33

    文章

    8575

    浏览量

    151014
  • 操作系统
    +关注

    关注

    37

    文章

    6801

    浏览量

    123280
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1035

    浏览量

    45897
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14791
  • Hi3861
    +关注

    关注

    1

    文章

    59

    浏览量

    6489

原文标题:五、调试现象

文章出处:【微信号:嵌入式Share,微信公众号:嵌入式Share】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    小熊派Hi3861获取mpu6050数据在oled屏幕中显示

    小熊派Hi3861获取mpu6050数据在oled屏幕中显示
    的头像 发表于 08-14 14:39 2346次阅读
    小熊派<b class='flag-5'>Hi3861</b>获取mpu6050数据在<b class='flag-5'>oled</b>屏幕中显示

    Hi3861开发板介绍

    。图 2 Hi3861底板外观图RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块
    发表于 09-21 15:15

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

    `` 本帖最后由 jf_39160458 于 2020-10-2 22:37 编辑 Hi3861 OLED驱动Hispark WiFi开发套件又提供一个
    发表于 10-02 22:33

    【HarmonyOS HiSpark Wi-Fi IoT套件】I2C驱动 Hi3861 驱动OLED屏幕显示

    ,大家自己下载。(2)设置I2C引脚复用确定i2c引脚,查看原理图,可以看到OLED屏幕使用到的是I2C0,引脚是GPIO13、GPIO14
    发表于 10-16 09:26

    【HarmonyOS HiSpark Wi-Fi IoT 套件试用OLED驱动oled屏的使用和oled驱动测试

    开发板上进行测试。首先,要进行oled驱动前要将oled对应的Hi3861i2c针脚服用功能打开。1 打开
    发表于 11-15 20:37

    【HarmonyOS_Hi3861学习笔记】【连载】--点亮oled

    oled程序比用stm32驱动还要方便点。主要是从例程中移植过来的。官方i2c驱动例程的路径为vendor/hisi/hi3861/
    发表于 01-04 22:55

    鸿蒙硬件HI3861开发环境搭建 精选资料分享

    =622343426064&_u=s2l6spg2b18f2.如何组装左边的是HI3861模块中间的是I2C OLED模块,中间上面是NFC模块,中间下面是JTAG烧录仿真的板子右边是
    发表于 07-22 06:42

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

    摘要:本文简单介绍如何操作I2C去显示OLED屏幕,并且实现动画播放、中文英文显示、绘图等功能适合群体:适用于润和Hi3861开发板,L0轻量系统驱动开发文中所有代码仓库:https
    发表于 01-21 16:37

    一套支持中文C语言编程的鸿蒙Hi3861智能硬件开发套件

    了GPIO、UART、PWM、I2C、SPI、WIFI(上述名称都翻译成了中文)等多达五十几个应用案例,基本上包括了Hi3861绝大部分的功能应用。相关内容较多,下面分享B站介绍视频:开发环境安装视频
    发表于 04-10 20:34

    HarmonyOS Hi3861 WiFi操作 热点链接

    之前我们使用Hi3861的时候,是使用AT指令连接到WiFi热点的。但是很多时候,我们需要实现开机后自动连接到某个热点,光靠AT指令不行。Hi3861为我们提供了WiFi操作的相关API,方便我们编写代码,实现热点连接。
    发表于 10-21 16:44 69次下载
    HarmonyOS <b class='flag-5'>Hi3861</b> WiFi操作 热点链接

    Hi3861其他驱动的开发示例

    摘要:本文简单介绍Hi3861其他驱动的开发示例、包括PWM、SPI、SDIO等。
    的头像 发表于 03-02 18:04 3500次阅读
    <b class='flag-5'>Hi3861</b>其他<b class='flag-5'>驱动</b>的开发示例

    基于鸿蒙系统+Hi3861的WiFi小车开发

    本文简单介绍鸿蒙系统 + Hi3861 的WiFi小车开发,适用于开发润和Hi3861开发板的小伙伴们。
    的头像 发表于 03-03 09:31 5683次阅读
    基于鸿蒙系统+<b class='flag-5'>Hi3861</b>的WiFi小车开发

    Hi3861编译烧录更快捷

    Windows环境开发Hi3861,显著提升编译、烧录效率,同时还带来了更多实用的功能及模板,为广大开发者朋友带来更加高效、便捷的开发体验。接下来,让我们来看看吧! 纯Windows环境开发Hi3861,编译烧录
    的头像 发表于 02-11 13:25 929次阅读

    Hi3861移植LVGL教程

    Hi3861 适配了硬件 spi ,master 模式下最高 spi 速率可以达到 40M,用来驱动 oled 屏幕。适配过程遇到了一个芯片bug,困扰了很久,clk 管脚
    的头像 发表于 05-18 09:23 2221次阅读
    <b class='flag-5'>Hi3861</b>移植LVGL教程

    鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

    OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2CI2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等
    的头像 发表于 04-23 21:57 635次阅读
    鸿蒙OpenHarmony【LED外设控制】 (基于<b class='flag-5'>Hi3861</b>开发板)