国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hi3861 硬件 i2c 驅(qū)動(dòng) oled

這篇具有很好參考價(jià)值的文章主要介紹了Hi3861 硬件 i2c 驅(qū)動(dòng) oled。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、前言

最近想用 3861 做個(gè)有意思的東西,記錄一下開(kāi)發(fā)過(guò)程。今天使用 3861 的硬件 i2c 驅(qū)動(dòng) oled。

硬件平臺(tái):Bearpi-Nano

軟件SDK:潤(rùn)和sdk

Hi3861 硬件 i2c 驅(qū)動(dòng) oled

二、搬一個(gè) OLED 輪子

我之前寫(xiě)過(guò)一篇基于 stm32cubemx 快速使用 iic 接口 oled 的過(guò)程,里面有現(xiàn)成的 oled 接口,我們只要直接拿過(guò)來(lái)替換掉底層接口就行。

?STM32CubeMX驅(qū)動(dòng)4腳OLED模塊

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

Hi3861 硬件 i2c 驅(qū)動(dòng) oled

三、Hi3861 i2c 接口

SDK提供了兩層接口封裝,一層是芯片級(jí)的 driver 驅(qū)動(dòng),由原廠sdk提供:

Hi3861 硬件 i2c 驅(qū)動(dòng) oled

另一層 open Harmony 級(jí)的驅(qū)動(dòng),是操作系統(tǒng)對(duì)原廠sdk的封裝,主要為了兼容不同芯片開(kāi)發(fā):

Hi3861 硬件 i2c 驅(qū)動(dòng) oled

原廠的 driver 接口更加細(xì)致,系統(tǒng)層的driver其實(shí)就是對(duì)原廠的一層封裝,簡(jiǎn)單開(kāi)發(fā)可以直接使用系統(tǒng)提供的driver接口,復(fù)雜開(kāi)發(fā)則推薦研究一下原廠的接口,因?yàn)閟dk不是很完善,不符合需求的可以直接改原廠的sdk。

我們簡(jiǎn)單驅(qū)動(dòng)個(gè)i2c,使用系統(tǒng)封裝的接口:

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);

用上面的讀寫(xiě)接口替換掉 oled 輪子里面的 i2c 接口

Hi3861 硬件 i2c 驅(qū)動(dòng) oled

四、使用驅(qū)動(dòng)代碼

在主函數(shù)中創(chuàng)建一個(gè)線程,調(diào)用 i2c、oled初始化接口,將初始化代碼注冊(cè)到系統(tǒng)運(yùn)行回調(diào)中

#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);

? ? //將引腳功能設(shè)置為 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);

編譯后通過(guò) uart 下載代碼

hb build -f

Hi3861 硬件 i2c 驅(qū)動(dòng) oled

五、調(diào)試現(xiàn)象

Hi3861 硬件 i2c 驅(qū)動(dòng) oled文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-422989.html

到了這里,關(guān)于Hi3861 硬件 i2c 驅(qū)動(dòng) oled的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【科普貼】I2C接口詳解——偏硬件解析

    【科普貼】I2C接口詳解——偏硬件解析

    I2C最早是Philips公司開(kāi)發(fā)的一款簡(jiǎn)單的雙向總線,實(shí)現(xiàn)有效的IC控制。把這個(gè)總線寫(xiě)成Inter IC 簡(jiǎn)稱(chēng)IIC或I2C(PS:說(shuō)白了2就是兩個(gè)“I”的意思。) I2C總線一些特征: 1、 只有兩根線分別是串行數(shù)據(jù)線(SDA),串行時(shí)鐘線(SCL)。 2、 每個(gè)連接到總線的器件有唯一一個(gè)地址。 3、

    2024年02月07日
    瀏覽(22)
  • I2C總線驅(qū)動(dòng)

    I2C總線驅(qū)動(dòng)

    SOC芯片平臺(tái)的外設(shè)分為: 一級(jí)外設(shè):外設(shè)控制器集成在SOC芯片內(nèi)部 二級(jí)外設(shè):外設(shè)控制器由另一塊芯片負(fù)責(zé),通過(guò)一些通訊總線與SOC芯片相連 Inter-Integrated Circuit: 字面意思是用于“集成電路之間”的通信總線,簡(jiǎn)寫(xiě):IIC(或者I2C) i2c傳輸?shù)囊c(diǎn)就是: 傳輸一個(gè)字節(jié) 后面必然

    2024年02月15日
    瀏覽(23)
  • 【STM32】入門(mén)(七):I2C硬件控制方式

    【STM32】入門(mén)(七):I2C硬件控制方式

    之所以叫“I2C硬件控制方式”是與“軟件控制方式”相對(duì)。I2C軟件控制,就是寫(xiě)程序直接操作兩個(gè)GPIO引腳,分別作為時(shí)鐘線SCL和數(shù)據(jù)線SDA,按照I2C協(xié)議的時(shí)序要求,操作GPIO輸入、輸出、高電平、低電平。 聽(tīng)著就很復(fù)雜,好在STM32中有I2C的硬件實(shí)現(xiàn),即通過(guò)簡(jiǎn)單的操作寄存器

    2023年04月08日
    瀏覽(26)
  • STM32 HAL FreeRTOS 硬件I2C 使用

    STM32 HAL FreeRTOS 硬件I2C 使用

    因?yàn)槟硞€(gè)項(xiàng)目想要顏色識(shí)別,去識(shí)別球的顏色,但是又不想多來(lái)個(gè)攝像頭,所以想嘗試一下顏色傳感器的方案。但是經(jīng)過(guò)嘗試,HAL庫(kù)生成的 FreeRTOS 硬件 I2C 讀寫(xiě)一直在報(bào)錯(cuò)。 剛好手頭上有九軸陀螺儀的例程代碼。最后用FreeRTOS 硬件 I2C 讀取數(shù)據(jù)。 這里提到了阻塞式 HAL 函數(shù)(

    2024年02月20日
    瀏覽(25)
  • Linux I2C 驅(qū)動(dòng)實(shí)驗(yàn)

    Linux I2C 驅(qū)動(dòng)實(shí)驗(yàn)

    目錄 一、Linux I2C 驅(qū)動(dòng)簡(jiǎn)介 1、I2C 總線驅(qū)動(dòng) 2、I2C 設(shè)備驅(qū)動(dòng) 1、 i2c_client 結(jié)構(gòu)體 2、 i2c_driver 結(jié)構(gòu)體 二、硬件分析 三、設(shè)備樹(shù)編寫(xiě) 1、pinctrl_i2c1 2、在 i2c1 節(jié)點(diǎn)追加 ap3216c 子節(jié)點(diǎn) 3、驗(yàn)證 四、?代碼編寫(xiě) 1、makefile 2、ap3216c.h ?3、ap3216c.c ①、頭文件 ②、驅(qū)動(dòng)出入口? ③、 i2c驅(qū)動(dòng)

    2024年02月08日
    瀏覽(25)
  • GD32 單片機(jī) 硬件I2C死鎖解決方法

    GD32 單片機(jī) 硬件I2C死鎖解決方法

    在I2C恢復(fù)函數(shù)下個(gè)斷點(diǎn)(檢測(cè)到I2C多次超時(shí)之后,應(yīng)該能跳轉(zhuǎn)到I2C恢復(fù)函數(shù)) 使用鑷子,將SCL與SDA短接,很快就能看到程序停到恢復(fù)函數(shù)的斷點(diǎn)上,此時(shí)再執(zhí)行恢復(fù)函數(shù),看能否正常走出(可在回復(fù)函數(shù)中寫(xiě)個(gè)死循環(huán),只有I2C正常才跳出,檢測(cè)I2C正常的辦法,可以讀從設(shè)備的

    2024年02月05日
    瀏覽(47)
  • STM32F407系列硬件I2C筆記

    STM32F407系列有3個(gè)硬件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日
    瀏覽(34)
  • 【驅(qū)動(dòng)】I2C驅(qū)動(dòng)分析(三)-關(guān)鍵數(shù)據(jù)類(lèi)型

    i2c_bus_type 用于表示 I2C 總線類(lèi)型。 bus_type 是 Linux 內(nèi)核中用于表示總線類(lèi)型的結(jié)構(gòu)體,用于管理該類(lèi)型總線上的設(shè)備。 .name : 用于指定總線類(lèi)型的名稱(chēng)。在這里,總線類(lèi)型的名稱(chēng)被設(shè)置為 “i2c”,表示 I2C 總線類(lèi)型。 .match : 匹配設(shè)備與總線。 .probe : 用于在設(shè)備與總線匹配成功

    2024年01月19日
    瀏覽(47)
  • STM32F030硬件I2C代碼及解析

    STM32F030硬件I2C代碼及解析

    剛接觸STM32的時(shí)候,第一個(gè)學(xué)習(xí)的就是I2C,當(dāng)時(shí)去網(wǎng)上學(xué)習(xí)別人寫(xiě)得I2C代碼,雖然能用,但是當(dāng)時(shí)并不理解為什么要這么配置,特別希望有人把代碼掰碎了講講看,今天突然想起來(lái),就把以前寫(xiě)的I2C代碼拿出來(lái)掰碎了捋捋,希望對(duì)新手有些幫助。 先說(shuō)說(shuō)STM32的I2C: ST的M3系列還

    2024年02月08日
    瀏覽(28)
  • STM32 硬件IIC 控制OLED I2C卡死問(wèn)題

    STM32 硬件IIC 控制OLED I2C卡死問(wèn)題

    #更新通知:2023-09-06 STM32L151 固件庫(kù) 使用I2C 太難了,又宕機(jī)了,建議不要在固件庫(kù)版本上嘗試硬件IIC 了,一般人真用不了,直接使用軟件模擬的,或者不要使用固件庫(kù)了,用HAL 庫(kù)吧,據(jù)說(shuō)HAL 庫(kù)沒(méi)這么多問(wèn)題,不死心的我還是死心了,等有空再研究吧 3.1 I2C模式,我這里選的

    2024年02月09日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包