Hi3861 硬件 i2c 驱动 oled

这篇具有很好参考价值的文章主要介绍了Hi3861 硬件 i2c 驱动 oled。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

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

硬件平台:Bearpi-Nano

软件SDK:润和sdk

Hi3861 硬件 i2c 驱动 oled

二、搬一个 OLED 轮子

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

 STM32CubeMX驱动4脚OLED模块

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

Hi3861 硬件 i2c 驱动 oled

三、Hi3861 i2c 接口

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

Hi3861 硬件 i2c 驱动 oled

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

Hi3861 硬件 i2c 驱动 oled

原厂的 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 接口

Hi3861 硬件 i2c 驱动 oled

四、使用驱动代码

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

#include <unistd.h>

#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\n", ret);

    }

    printf("[OLED_TASK] Init i2c succ.\n");

}

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!\n", 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!\n");

    }

}

SYS_RUN(oled_demo_init);

编译后通过 uart 下载代码

hb build -f

Hi3861 硬件 i2c 驱动 oled

五、调试现象

Hi3861 硬件 i2c 驱动 oled文章来源地址https://www.toymoban.com/news/detail-422989.html

到了这里,关于Hi3861 硬件 i2c 驱动 oled的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【科普贴】I2C接口详解——偏硬件解析

    I2C最早是Philips公司开发的一款简单的双向总线,实现有效的IC控制。把这个总线写成Inter IC 简称IIC或I2C(PS:说白了2就是两个“I”的意思。) I2C总线一些特征: 1、 只有两根线分别是串行数据线(SDA),串行时钟线(SCL)。 2、 每个连接到总线的器件有唯一一个地址。 3、

    2024年02月07日
    浏览(22)
  • I2C总线驱动

    SOC芯片平台的外设分为: 一级外设:外设控制器集成在SOC芯片内部 二级外设:外设控制器由另一块芯片负责,通过一些通讯总线与SOC芯片相连 Inter-Integrated Circuit: 字面意思是用于“集成电路之间”的通信总线,简写:IIC(或者I2C) i2c传输的要点就是: 传输一个字节 后面必然

    2024年02月15日
    浏览(19)
  • 【STM32】入门(七):I2C硬件控制方式

    之所以叫“I2C硬件控制方式”是与“软件控制方式”相对。I2C软件控制,就是写程序直接操作两个GPIO引脚,分别作为时钟线SCL和数据线SDA,按照I2C协议的时序要求,操作GPIO输入、输出、高电平、低电平。 听着就很复杂,好在STM32中有I2C的硬件实现,即通过简单的操作寄存器

    2023年04月08日
    浏览(20)
  • STM32 HAL FreeRTOS 硬件I2C 使用

    因为某个项目想要颜色识别,去识别球的颜色,但是又不想多来个摄像头,所以想尝试一下颜色传感器的方案。但是经过尝试,HAL库生成的 FreeRTOS 硬件 I2C 读写一直在报错。 刚好手头上有九轴陀螺仪的例程代码。最后用FreeRTOS 硬件 I2C 读取数据。 这里提到了阻塞式 HAL 函数(

    2024年02月20日
    浏览(22)
  • Linux I2C 驱动实验

    目录 一、Linux I2C 驱动简介 1、I2C 总线驱动 2、I2C 设备驱动 1、 i2c_client 结构体 2、 i2c_driver 结构体 二、硬件分析 三、设备树编写 1、pinctrl_i2c1 2、在 i2c1 节点追加 ap3216c 子节点 3、验证 四、 代码编写 1、makefile 2、ap3216c.h  3、ap3216c.c ①、头文件 ②、驱动出入口  ③、 i2c驱动

    2024年02月08日
    浏览(26)
  • STM32F407系列硬件I2C笔记

    STM32F407系列有3个硬件I2C: I2C1:该接口位于GPIOB引脚上,包括PB6(I2C1_SCL)和PB7(I2C1_SDA)。 I2C2:该接口位于GPIOB引脚上,包括PB10(I2C2_SCL)和PB11(I2C2_SDA)。 I2C3:该接口位于GPIOA和GPIOC引脚上,包括PA8(I2C3_SCL)和PC9(I2C3_SDA)。   硬件I2C的速度比软件I2C更快,硬件I2C通常可以

    2024年02月04日
    浏览(21)
  • GD32 单片机 硬件I2C死锁解决方法

    在I2C恢复函数下个断点(检测到I2C多次超时之后,应该能跳转到I2C恢复函数) 使用镊子,将SCL与SDA短接,很快就能看到程序停到恢复函数的断点上,此时再执行恢复函数,看能否正常走出(可在回复函数中写个死循环,只有I2C正常才跳出,检测I2C正常的办法,可以读从设备的

    2024年02月05日
    浏览(27)
  • 【驱动】I2C驱动分析(三)-关键数据类型

    i2c_bus_type 用于表示 I2C 总线类型。 bus_type 是 Linux 内核中用于表示总线类型的结构体,用于管理该类型总线上的设备。 .name : 用于指定总线类型的名称。在这里,总线类型的名称被设置为 “i2c”,表示 I2C 总线类型。 .match : 匹配设备与总线。 .probe : 用于在设备与总线匹配成功

    2024年01月19日
    浏览(26)
  • STM32F030硬件I2C代码及解析

    刚接触STM32的时候,第一个学习的就是I2C,当时去网上学习别人写得I2C代码,虽然能用,但是当时并不理解为什么要这么配置,特别希望有人把代码掰碎了讲讲看,今天突然想起来,就把以前写的I2C代码拿出来掰碎了捋捋,希望对新手有些帮助。 先说说STM32的I2C: ST的M3系列还

    2024年02月08日
    浏览(19)
  • STM32 硬件IIC 控制OLED I2C卡死问题

    #更新通知:2023-09-06 STM32L151 固件库 使用I2C 太难了,又宕机了,建议不要在固件库版本上尝试硬件IIC 了,一般人真用不了,直接使用软件模拟的,或者不要使用固件库了,用HAL 库吧,据说HAL 库没这么多问题,不死心的我还是死心了,等有空再研究吧 3.1 I2C模式,我这里选的

    2024年02月09日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包