OrangePi KunPengPro | 開發板開箱測評之學習與使用

OrangePi KunPengPro | 開發板開箱測評之學習與使用


時間:2024年5月23日20:51:12

文章目錄

  • `OrangePi KunPengPro` | 開發板開箱測評之學習與使用
  • 概述
  • 1.參考
  • 2.資料、工具
  • 3.使用
    • 3-1.通過串口登錄系統
    • 3-2.通過SSH登錄系統
    • 3-3.安裝交叉編譯工具鏈
    • 3-4.復制文件到設備
    • 3-5.第一個程序`hello`
      • 代碼
      • makefile
      • 編譯
      • 運行
    • 3-6.`I2C`的測試和使用
      • 資料
      • 演示
    • 3-7.**i2c**點亮`OLED`屏實驗
      • 硬件連線示意圖
      • 檢測`i2c`從設備
      • 數據手冊
      • Demo實例代碼
        • 用戶態讀寫`IIC`
        • Makefil文件
      • 演示(點亮效果)
  • 后記

KunPengPro

概述

非常榮幸有機會參加CSDN的這次舉辦的OrangePi Kunpeng Pro開發板的開箱測評/使用機會。

因為之前很少玩過類似的板子,感覺這個板子挺精致的。開箱,有一個主板(配置是8GB內存,還有一個32GB的內存卡(已經裝好了系統),同時板子還裝好了散熱風扇,,然后還有一個電源),沒遇到太有難度的,基本連上電源,真的是開箱即用。

豐富接口,易于擴展

匯聚了MIPI DSI、MIPI CSI、USB3.0、Type-C3.0、HDMI2.0、千兆以太網、支持SATA/NVMe SSD 2280的M.2插槽等各類流行的接口,可應用于外部設備控制和擴展。

支持SATA/NVMe SSD 2280硬盤,擴展海量容量

板載M.2接口,支持接入SATA/NVMe SSD 2280硬盤,增加海量數據存儲空間,滿足快速讀寫和大容量存儲的需求。

多通道輸出,支持多屏異顯

支持雙HDMI視頻輸出,支持雙4K高清輸出,支持一個MIPI DSI視頻輸出,支持兩個MIPI接口攝像頭輸入。

提供類PC桌面環境,簡化上手難度

支持圖形化桌面(gnome),支持瀏覽器(firefox),支持文本編輯(gedit),支持中文輸入法,支持shell終端。

預安裝openEuler、openGauss、DevKit

高效、穩定、安全,支持多種硬件架構和虛擬化技術,可廣泛應用于企業級邊緣計算場景等。

OrangePi Kunpeng Pro采用4核64位處理器+AI處理器,集成圖形處理器,支持8TOPS AI算力,擁有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模塊,支持雙4K高清輸出。
OrangePi Kunpeng Pro引用了相當豐富的接口,包括兩個HDMI輸出、GPIO接口、Type-C電源接口、支持SATA/NVMe SSD 2280M.2插槽、TF插槽、千兆網口、兩個USB3.0、一個USB Type-C 3.0、一個Micro USB(串口打印調試功能)、兩個MIPI攝像頭、一個MIPI屏等,預留電池接口等。
OrangePi Kunpeng Pro支持openEuler操作系統,滿足大多數AI算法原型驗證、推理應用開發的需求,同時可以為各種應用場景提供更高效的算力,如云計算、大數據、分布式存儲、高性能計算等。

因為是新的板子,所以先搜集了下相關的資料,進行閱讀。板子連上電源,然后通過MicroUSB連接電腦,即可通過串口進入系統終端,進行調試和交互。這一點,也非常合理,僅需要安裝下驅動,也不需要額外的USB轉串口工具。網絡連接和無線連接也是完善和豐富的。

這邊主要先實踐了下串口和網絡登錄系統終端,學會通過已有的硬件,進入系統。然后學習傳文件到系統,方便將自己的工具和軟件傳到板子上。

然后安裝了交叉編譯工具鏈,運行了自己的第一個程序hello,邁出了開發的第一步。

最后,使用板子的IIC接口點亮了一個IIC OLED屏幕。詳細演示了如何在linux平臺下如何進行IIC的調試和開發。

使用過程中,也遇到了一些問題:

1.比如按照文檔,使用256GBSD卡燒錄了系統,啟動過程中卡住了,目前沒有深入探究,后續有時間再看看是啥問題;

2.MicroUSB調試串口能夠連上電腦,但是不能出調試信息,目前沒有想這個問題,就是通過網絡進入終端調試,暫時繞開了調試串口不出信息的問題;

1.參考

1.OrangePi Kunpeng Pro Orange Pi官網-香橙派(Orange Pi)開發板,開源硬件,開源軟件,開源芯片,電腦鍵盤

2.Orange Pi - Orange Pi 論壇

3.鯤鵬社區-官網丨凝心聚力 共創行業新價值 (hikunpeng.com)

4.OrangePiKunPengPro | 開發板學習與使用-CSDN博客

2.資料、工具

1.官方資料和工具:

root@ThinkPad-FLY:/mnt/d/Download/OrangePiKunpengPro# tree
.
├── 外殼及散熱器安裝資料
│   ├── OPi Kunpeng pro外殼裝配說明.mp4
│   ├── OPi kunpeng Pro開發板+散熱器組件裝配說明-20240429.pptx
│   └── Opi Kunpeng pro開發板+散熱器.mp4
├── 官方工具
│   ├── FileZilla-SFTP軟件
│   │   └── FileZilla_3.62.2_win64_sponsored2-setup.exe
│   ├── Linux鏡像燒錄工具-balenEther
│   │   ├── Linux_X64版本
│   │   │   ├── balena-etcher_1.18.8_amd64.deb
│   │   │   └── balenaEtcher-1.18.4-x64.AppImage
│   │   ├── MACOS_X64版本
│   │   │   └── balenaEtcher-1.18.4.dmg
│   │   ├── Windows_X64版本
│   │   │   ├── balenaEtcher-Portable-1.18.4.exe
│   │   │   └── balenaEtcher-Setup-1.18.4.exe
│   │   └── 開發板安裝的arm64版本
│   │       ├── balena-etcher-electron_1.7.9+5945ab1f_arm64.deb
│   │       └── balenaEtcher-1.7.9+5945ab1f-arm64.AppImage
│   ├── MobaXterm
│   │   └── MobaXterm_Portable_v22.2.zip
│   ├── Windows-格式化軟件-SDCardFormatter
│   │   └── SDCardFormatterv5_WinEN.zip
│   ├── 交叉編譯工具鏈
│   │   └── toolchain.tar.gz
│   └── 查看YUV圖片的軟件
│       └── SuperImage.rar
└── 用戶手冊
└── OrangePi_KunPeng_Pro_用戶手冊_v0.1.pdf

2.CH343SER.EXE - 驅動下載

3.WinSCP :: Official Site :: Download

4.Wi-Fi+藍牙模組:歐智通 6221BUUC_datasheet

3.使用

3-1.通過串口登錄系統

首先需要下載驅動(驅動下載主頁見上面的連接),然后安裝驅動;

通過Micro USB 連接電腦和開發板,查看com口,然后通過串口工具登錄系統;

為什么一開始選擇串口登錄?因為通過串口調試是最簡單的方式。雖然有網口,但一開始也不知道ip,也沒法登錄。

手邊有顯示器,可以通過HDMI連接,但是沒有USB鍵盤,因此也沒法好好交互。所以先通過串口登錄系統交互。

請添加圖片描述

3-2.通過SSH登錄系統

上面通過串口進入系統后,通過連接網線(同一網絡下),查看設備IP,即可通過SSH登錄系統;

也可以參考文檔:OrangePi_KunPeng_Pro_用戶手冊_v0.1.pdf,使用WIFI連接網絡,就可以減少網線或者串口線的連接來登錄終端;

請添加圖片描述

3-3.安裝交叉編譯工具鏈

# 新建目錄
sudo mkdir /opt/OrangePiKunpengPro
# 解壓文件
sudo tar -zxvf toolchain.tar.gz -C /opt/OrangePiKunpengPro/
# 設置環境變量
sudo vim /etc/profile
# 使環境變量生效
source /etc/profile
# 查看編譯器版本
aarch64-target-linux-gnu-gcc --version
# 寫源碼
vim hello.c
# 編譯源碼
aarch64-target-linux-gnu-gcc hello.c -o hello

請添加圖片描述

3-4.復制文件到設備

首先電腦上需要安裝WinSCP軟件。WinSCP :: Official Site :: Free SFTP and FTP client for Windows

將編譯的之前交叉編譯的hello可執行程序復制到設備上,修改可執行權限,就可以在設備上執行自己編譯的程序。

請添加圖片描述

3-5.第一個程序hello

代碼

/********************************************************************   > File Name: hello.c*   > Author: fly*   > Mail: *   > Create Time: Fri 17 May 2024 02:14:11 PM CST******************************************************************/#include <stdio.h>int main(int argc, char* argv[])
{printf("hello\n\n");printf("__FILE__: %s\n", __FILE__);printf("__FUNC__: %s\n", __func__);printf("__LINE__: %d\n", __LINE__);return 0;
}

makefile

.PHONY:allSRC=hello.c
BIN=hello
#CC=gcc
CC=aarch64-target-linux-gnu-gccall:@echo "預處理"$(CC) -E hello.c -o hello.i@echo "編譯"$(CC) -S hello.i -o hello.s@echo "匯編"$(CC) -c hello.s -o hello.o@echo "鏈接"$(CC) hello.o -o helloclean:$(RM) *.i *.s *.o hello

編譯

編譯是在一個Ubuntu docker中進行的,需要提前安裝、配置好交叉編譯工具鏈(命令行操作如下);

[fly@752fac4b02e9 02-hello]$ ls
hello.c  Makefile
[fly@752fac4b02e9 02-hello]$ make
預處理
aarch64-target-linux-gnu-gcc -E hello.c -o hello.i
編譯
aarch64-target-linux-gnu-gcc -S hello.i -o hello.s
匯編
aarch64-target-linux-gnu-gcc -c hello.s -o hello.o
鏈接
aarch64-target-linux-gnu-gcc hello.o -o hello
[fly@752fac4b02e9 02-hello]$ ls
hello  hello.c  hello.i  hello.o  hello.s  Makefile
[fly@752fac4b02e9 02-hello]$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

運行

通過WinSCP將編譯后的程序上傳到板子上,檢測板子上程序的可執行權限,然后運行(如下命令行操作)。

[root@openEuler ~]# ls -l
總用量 24
drwxr-x--- 2 root root  4096  11  1970 hdc_ppc
-rw------- 1 root root 12728  526 01:15 hello
drwxr-xr-x 2 root root  4096  56 04:34 tmp
[root@openEuler ~]# chmod +x hello
[root@openEuler ~]# ./hello
hello__FILE__: hello.c
__FUNC__: main
__LINE__: 16

3-6.I2C的測試和使用

資料

1.linux下i2c調試神器i2c-tools安裝及使用_i2c調試助手-CSDN博客

2.0.91inch IIC OLED Module SSD1306 SKU:MC091GX - LCD wiki

3.Linux應用開發【第十二章】I2C編程應用開發 - 知乎 (zhihu.com)

4.【五一創作】Linux—I2C應用編程_linux i2c應用程序-CSDN博客


嵌入式開發中,有時候需要確認硬件是否正常連接,設備是否正常工作,設備的地址是多少等等,這里我們就需要使用一個用于測試I2C總線的工具——i2c-tools

i2c-tools工具是一個專門調試i2c的,開源,可獲取掛載的設備及設備地址,還可以讀寫I2C設備寄存器

命令介紹:i2cdetect:檢測i2c芯片i2cdump:查看寄存器值i2cget:獲取單個寄存器值(8位寄存器)i2cset:設置單個寄存器值(8位寄存器)
參數介紹:-y:禁用交互模式。-f:強制訪問設備。-r:寫入后立即讀回該值。

演示

請添加圖片描述


3-7.i2c點亮OLED屏實驗

0.91inch_IIC_OLED_Module_MC091GX_User_Manual_CN.pdf

硬件連線示意圖

在這里插入圖片描述

檢測i2c從設備

通過輸入如下命令,可知從設備地址為0x3C;

# 未連接I2C從設備前檢測
[root@openEuler /]# i2cdetect -y -r 70  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
# 連接I2C從設備后檢測
[root@openEuler /]# i2cdetect -y -r 70  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
# 查看i2c設備所有寄存器的值
[root@openEuler /]# i2cdump -y -f 7 0x3c
No size specified (using byte-data access)0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
10: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
20: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
30: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
40: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
50: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
60: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
70: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
80: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
90: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
a0: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
b0: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
c0: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
d0: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
e0: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC
f0: 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43    CCCCCCCCCCCCCCCC

數據手冊

0.91寸屏驅動i2c數據手冊:

SSD1306-Revision 1.5.pdf

8.1.5 MCU I2C接口

I2C通信接口包括從機地址位SA0I2C總線數據信號SDA(輸出為SDAOUT/D2,輸入為SDAIN/D1)和I2C總線時鐘信號SCLD0)。數據信號和時鐘信號都必須連接到上拉電阻。RES#用于設備的初始化。

a) 從機地址位(SA0

SSD1306在通過I2C總線發送或接收任何信息之前,必須先識別從機地址。設備將響應由從機地址位(“SA0”位)和讀寫選擇位(“R/W#”位)跟隨的從機地址,其字節格式如下:

b7 b6 b5 b4 b3 b2 b1 b0
0 1 1 1 1 0 SA0 R/W#

“SA0”位為從機地址提供擴展位。可以選擇“0111100”或“0111101”作為SSD1306的從機地址。D/C#引腳作為SA0用于從機地址選擇。

“R/W#”位用于確定I2C總線接口的操作模式。R/W#=1,處于讀取模式;R/W#=0,處于寫入模式。

b) I2C總線數據信號SDA

SDA作為發射器和接收器之間的通信通道。數據和確認都是通過SDA發送的。

應該注意的是,“SDA”引腳上的ITO軌道電阻和上拉電阻形成了一個電壓分壓器。因此,確認信號在“SDA”上可能無法達到有效的邏輯0電平。

SDAIN”和“SDAOUT”連接在一起作為SDA使用。“SDAIN”引腳必須連接以作為SDA使用。“SDAOUT”引腳可以斷開。當“SDAOUT”引腳斷開時,I2C總線中的確認信號將被忽略。

c) I2C總線時鐘信號SCL

I2C總線中的信息傳輸遵循時鐘信號SCL。每個數據位的傳輸都在SCL的一個時鐘周期內發生。

8.1.5.1 I2C總線寫數據

I2C總線接口允許向設備寫入數據和命令。請參考圖8-7,了解I2C總線寫模式按照時間順序的流程。
在這里插入圖片描述

8.1.5.2 I2C總線寫數據的流程

  1. 主設備通過起始條件啟動數據通信。起始條件的定義如圖8-8所示(詳見數據手冊)。起始條件是通過在SCL保持高電平時,將SDA高電平拉至低電平來建立的。

  2. 緊隨起始條件之后的是從設備地址,用于識別。對于SSD1306,通過將SA0設置為低電平或高電平(D/C引腳作為SA0使用),從設備地址是“b0111100”或“b0111101”。

  3. 通過將R/W#位設置為邏輯“0”來建立寫模式。

  4. 在接收到一個字節的數據(包括從設備地址和R/W#位)后,將生成一個應答信號。請參考圖8-9了解應答信號的圖形表示。應答位定義為在應答相關時鐘脈沖的高電平期間,SDA線被拉低。

  5. 在發送從設備地址后,可以通過SDA發送控制字節或數據字節。控制字節主要由CoD/C#位組成,后面跟著六個“0”。
    a. 如果Co位設置為邏輯“0”,則后續傳輸的信息將僅包含數據字節。
    b. D/C#位確定下一個數據字節是作為命令還是數據。如果D/C#位設置為邏輯“0”,則定義下一個數據字節為命令。如果D/C#位設置為邏輯“1”,則定義下一個數據字節為要存儲在GDDRAM中的數據。在每次數據寫入后,GDDRAM列地址指針將自動增加1。

  6. 在接收到每個控制字節或數據字節后,將生成應答位。

  7. 當應用停止條件時,寫模式將結束。停止條件也在([圖8-8中定義(詳見數據手冊)SSD1306-Revision 1.5.pdf ](http://www.lcdwiki.com/res/MC091GX/SSD1306-Revision 1.5.pdf))。停止條件是通過在SCL保持高電平時,將“SDA輸入”從低電平拉至高電平來建立的。

    請注意,數據位的傳輸有一些限制。

    1. 在每個SCL脈沖期間傳輸的數據位必須在時鐘脈沖的“HIGH”周期內保持穩定狀態。請參考圖8-10以獲得圖形表示。除了在開始或停止條件下,數據線只能在SCLLOW時切換。
    2. 數據線(SDA)和時鐘線(SCL)都應該通過外部電阻上拉

8.2. 命令解碼器

此模塊確定輸入數據是被解釋為數據還是命令。數據的解釋基于D/C#引腳的輸入。

如果D/C#引腳為高電平D[7:0]將被解釋為寫入圖形顯示數據RAM(GDDRAM)的顯示數據。

如果D/C#引腳為低電平D[7:0]的輸入將被解釋為命令。然后,數據輸入將被解碼并寫入相應的命令寄存器。

Demo實例代碼

1.kernel.org/doc/Documentation/i2c/dev-interface

2.樹莓派學習筆記——wiringPi I2C設備使用詳解_wiringpii2c-CSDN博客

3.linux i2c應用程序模塊-CSDN博客

4.OranggePi KunPengPro點亮IIC OLED DEMO

[fly@752fac4b02e9 i2c_oled]$ tree
.
├── demo_iic_oled.c
├── inc
│   ├── bmp.h
│   ├── delay.h
│   ├── gui.h
│   ├── iic.h
│   ├── oledfont.h
│   ├── oled.h
│   ├── test.h
│   └── type.h
├── lib
├── Makefile
└── src├── delay.c├── gui.c├── iic.c├── oled.c└── test.c3 directories, 15 files
用戶態讀寫IIC
//
static int iic_open(int adapter_nr)
{int fd;char filename[20];snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);fd = open(filename, O_RDWR);if(fd < 0){perror("I2C Device open");return -1;}return fd;
}static int i2c_write(int fd, unsigned int slave_addr, unsigned char reg_addr, unsigned char value)
{unsigned char outbuf[2];struct i2c_rdwr_ioctl_data packets;struct i2c_msg messages[1];messages[0].addr = slave_addr;messages[0].flags = 0;messages[0].len = sizeof(outbuf);messages[0].buf = outbuf;/* The first byte indicates which register we‘ll write */outbuf[0] = reg_addr;/** The second byte indicates the value to write. Note that for many* devices, we can write multiple, sequential registers at once by* simply making outbuf bigger.*/outbuf[1] = value;/* Transfer the i2c packets to the kernel and verify it worked */packets.msgs = messages;packets.nmsgs = 1;if(ioctl(fd, I2C_RDWR, &packets) < 0){perror("Unable to send data");return 1;}return 0;
}static int i2c_read(int fd, unsigned char slave_addr, unsigned char reg_addr, unsigned char *value)
{unsigned char inbuf, outbuf;struct i2c_rdwr_ioctl_data packets;struct i2c_msg messages[2];/** In order to read a register, we first do a "dummy write" by writing* 0 bytes to the register we want to read from. This is similar to* the packet in set_i2c_register, except it‘s 1 byte rather than 2.*/outbuf = reg_addr;messages[0].addr = slave_addr;messages[0].flags = 0;messages[0].len = sizeof(outbuf);messages[0].buf = &outbuf;/* The data will get returned in this structure */messages[1].addr = slave_addr;messages[1].flags = I2C_M_RD/* | I2C_M_NOSTART*/;messages[1].len = sizeof(inbuf);messages[1].buf = &inbuf;/* Send the request to the kernel and get the result back */packets.msgs = messages;packets.nmsgs = 2;if(ioctl(fd, I2C_RDWR, &packets) < 0){perror("Unable to send data");return 1;}*value = inbuf;return 0;
}//uint32_t iic_fd;uint32_t IIC_init(void)
{uint32_t fd;fd = iic_open(IIC_ADAPTER_NR);return fd;
}/****************************************************************************** @name       :void IIC_WriteCmd(uint8_t I2C_Command)* @date       :2018-09-14 * @function   :write a byte of command with iic bus* @parameters :I2C_Command:command to be writen* @retvalue   :None
******************************************************************************/
void IIC_WriteCmd(uint8_t I2C_Command)
{i2c_write(iic_fd, IIC_SLAVE_ADDR, IIC_COMMAND, I2C_Command);
}/****************************************************************************** @name       :void IIC_WriteDat(uint8_t I2C_Data)* @date       :2018-09-14 * @function   :write a byte of data with iic bus* @parameters :I2C_Data:data to be writen* @retvalue   :None
******************************************************************************/
void IIC_WriteDat(uint8_t I2C_Data)
{i2c_write(iic_fd, IIC_SLAVE_ADDR, IIC_DATA, I2C_Data);
}
Makefil文件
#CC = gcc
CC=aarch64-target-linux-gnu-gcc
CFLAGS = -g -Wall -O0
OBJS = demo_iic_oled
INCDIRS :=INCDIRS = -I./incSRC = \demo_iic_oled.cSRC += \src/iic.c \src/oled.c \src/gui.c \src/delay.c \src/test.c$(OBJS) : $(SRC)$(CC) $(CFLAGS) -o $@ $^ $(INCDIRS)clean:$(RM) $(OBJS) .*.sw?

演示(點亮效果)

香橙派Kunpeng Pro測評試用 | 通過IIC點亮OLED屏幕

香橙派Kunpeng Pro試用 | 通過IIC點亮OLED


后記

后續可能,還會繼續探究各硬件模塊和接口的功能和能力。再繼續深入了解的情況,深入軟件功能的探究,賦予這個豐富/強大的硬件,更靈活的軟件使用。

同時,也希望和各位試用者多多交流,實現更有創意的想法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16496.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【組合數學】常考試題答案

一、單項選擇題&#xff08;每小題3分&#xff0c;共15分&#xff09; 1. 用3個“1”和4個“0”能組成&#xff08; &#xff09;個不同的二進制數字。 A. 35 B. 36, C. 37, D. 38 2. 整除300的正整數的個數為&#xff08;  &#xff09;。 A. 14…

Anaconda+CUDA+CUDNN+Pycharm+Pytorch安裝教程(第一節 Anconda安裝)

1.選擇和對應的anconda版本 官網地址&#xff1a;Index of / (anaconda.com) 下載地址&#xff1a;Index of /anaconda/archive/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror 2.安裝流程 (1)下載安裝包 (2)點擊next &#xff08;3&#xff09;點擊I agree &a…

解決Flutter位于懸浮窗口時,應用Logo不更新問題

問題描述 我已經更換了應用Logo&#xff0c;但是發現應用處于懸浮窗口時&#xff0c;logo還是更改之前的&#xff1f;下面的圖片只是示意。 解決方案 終端命令 rm -rf ~/Library/Developer/Xcode/DerivedData2.xcode視圖內解決 先在頂部找到 Xcode --> Setting --> Lo…

操作系統入門系列-MIT6.828(操作系統工程)學習筆記(二)----課程實驗環境搭建(wsl2+ubuntu+quem+xv6)

MIT6.S081&#xff08;操作系統&#xff09;學習筆記 操作系統入門系列-MIT6.828&#xff08;操作系統&#xff09;學習筆記&#xff08;一&#xff09;---- 操作系統介紹與接口示例 操作系統入門系列-MIT6.828&#xff08;操作系統工程&#xff09;學習筆記&#xff08;二&am…

Java面向對象-常用類(日期時間類)

常用類-日期時間類 Date&#xff08;java.util.Date&#xff09; – 日期類 SimpleDateFormat – 格式化日期類 Calendar – 日歷類 1 Date類 java.util.Date類表示特定的瞬間&#xff0c;精確到毫秒。 package com.qf.datetime;import java.util.Date;public class Test01 {…

ubantu20.04 跑通ros2版的orbslam2

我的歷程 先編譯的非ros版的robslam2&#xff08;非常詳細&#xff09; ubuntu20.04配置并編譯ORB-SLAM2_ubuntu20.04安裝orb-lslam2-CSDN博客 然后裝ros2&#xff08;非常詳細&#xff09; 詳細介紹如何在ubuntu20.04中安裝ROS系統&#xff0c;超快完成安裝&#xff08;最…

C#解析xml文件

1、示例 <?xml version"1.0" encoding"utf-8" standalone"no"?><DATA><ITEMS><ITEM><ID>01<ID/><CODE>0001<CODE><NAME>測試1<NAME/></ITEM><ITEM><ID>02<…

福昕PDF編輯器自定義快捷方式

你是否為用不慣福昕PDF編輯器自帶的快捷鍵而發愁&#xff1f;今天&#xff0c;我和大家分享一下如何設置自己想要的快捷鍵方式&#xff0c;希望能對大家有幫助。 步驟一&#xff1a;打開福昕PDF編輯&#xff0c;并找到更多命令 步驟二&#xff1a;切換到鍵盤一欄&#xff0c;并…

分布式專題

一&#xff1a;分布式事務 1、理論基礎 分布式事務主要區分本地事務 什么是本地事務&#xff08;Local Transaction&#xff09;&#xff1f;本地事務也稱為數據庫事務或傳統事務&#xff08;相對于分布式事務而言&#xff09;。尤其對于數據庫而言&#xff0c;為了數據安全…

Android 多張圖片合成GIF

直接用嗶哩嗶哩弄的一個庫&#xff0c;傳送門&#xff1a;https://github.com/bilibili/BurstLinker 他那個庫的文檔寫的比較簡陋&#xff0c;所以我決定&#xff0c;我也寫得十分簡陋 引用&#xff1a; api com.bilibili:burst-linker:0.0.13 使用&#xff1a; /*** param i…

Docker快速搭建Oracle服務

服務器&#xff1a;CentOS7.9 1.安裝docker yum install -y docker 2. 設置鏡像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 鍵值 阿里云的docker鏡像需要自己注冊賬號&#xff0c;也可以不注冊賬號&#xff0c;直接使用下面的連接。 也可以寫入多…

【C++ 】學習問題及補充

一.自定義類型不初始化直接就賦值&#xff0c;比如string類會怎么樣 vectr<string>里已經給每個string對象已經分配好空間&#xff0c;為什么不初始化再賦值會報錯 在C中&#xff0c;std::string類是一個動態字符串類&#xff0c;它內部管理著一個字符數組&#xff0c;用…

2024東北四省賽——M House

cf上有題解&#xff0c;我寫這個只想說真服了&#xff0c;卡double了導致一直沒做出來 開long double過的 貼一下我的代碼 #include <bits/stdc.h>using namespace std; typedef long double LD; typedef long long LL; #define int LL #define double LD const int N …

【藍橋杯】國賽普及-

題目列表 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) P9420 [藍橋杯 2023 國 B] 子 2023 / 雙子數 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) #include<bits/stdc.h> using llunsigned long long; #define int ll const int N2e510; int k0; std::string s; int…

【傳知代碼】無監督動畫中關節動畫的運動表示-論文復現

文章目錄 概述動畫技術的演進原理介紹核心邏輯環境配置/部署方式小結 本文涉及的源碼可從無監督動畫中關節動畫的運動表示該文章下方附件獲取 概述 該文探討了動畫在教育和娛樂中的作用&#xff0c;以及通過數據驅動方法簡化動畫制作的嘗試。近期研究通過無監督運動轉移減少對…

Java進階學習筆記30——BigDecimal

BigDecimal&#xff1a; 用于解決浮點型運算的&#xff0c;出現結果失真的問題。 運行結果&#xff1a; package cn.ensource.d4_bigdecimal;import java.math.BigDecimal;public class Test {public static void main(String[] args) {// 目標&#xff1a;了解BigDecimal類do…

RustGUI學習(iced/iced_aw)之擴展小部件(二十七):如何使用number_input部件?

前言 本專欄是學習Rust的GUI庫iced的合集,將介紹iced涉及的各個小部件分別介紹,最后會匯總為一個總的程序。 iced是RustGUI中比較強大的一個,目前處于發展中(即版本可能會改變),本專欄基于版本0.12.1. 概述 這是本專欄的第二十七篇,主要講述number_input部件的使用,會…

8、Qt—Log4Qt使用小記2(每日產生文件)

前言&#xff1a; 開發平臺&#xff1a;Win10 64位 開發環境&#xff1a;Qt Creator 13.0.0 構建環境&#xff1a;Qt 5.15.2 MSVC2019 64位 例如&#xff1a;上一篇文章中筆者記錄了Log4qt的編譯及配置使用&#xff0c;這篇文章重點寫下每天產生文件到指定文件夾中&#xff0c;…

5.1 Go 函數的定義與調用

&#x1f49d;&#x1f49d;&#x1f49d;歡迎蒞臨我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:「stormsha的主頁」…

Spring Boot集成testcontainers快速入門Demo

1.什么是testcontainers&#xff1f; Testcontainers 是一個用于創建臨時 Docker 容器進行單元測試的 Java 庫。當我們想要避免使用實際服務器進行測試時&#xff0c;它非常有用。&#xff0c;官網介紹稱支持50多種組件。? 應用場景 數據訪問層集成測試&#xff1a; 使用My…