第十章 板卡資訊實驗
1)實驗平臺:正點原子DNK210開發板
2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0
3)購買連結:https://detail.tmall.com/item.htm?&id=782801398750
4)全套實驗原始碼+手冊+影片下載地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html
5)正點原子官方B站:https://space.bilibili.com/394620890
6)正點原子K210技術交流企鵝群:605557868
本章實驗將介紹如何使用CanMV內建的board指令碼來獲取板卡資訊,方便後續實驗使用。透過本章的學習,讀者將學習到CanMV內建board指令碼的使用。
本章分為如下幾個小節:
10.1 board指令碼介紹
10.2 硬體設計
10.3 程式設計
10.4 執行驗證
10.1 board指令碼介紹
在使用CanMV的過程中,經常需要控制一些Kendryte K210的片上外設,以實現某一具體的功能,例如操作GPIO控制LED的亮滅、操作I2S控制數字功放晶片透過揚聲器播放音訊等,那麼在初始化GPIO、I2S等外設的時候,就需要確定這些外設需要透過哪些IO引腳與外部的LED、數字功放晶片等外設通訊,通常情況下,這需要檢視板卡的原理圖來確定使用的IO引腳,但檢視原理圖的效率較低,且會在指令碼檔案中固定下程式中使用的IO引腳,不利於指令碼程式的移植。
綜合以上IO引腳使用的需求和檢視原理圖的不便利性,CanMV內建提供了board指令碼,board指令碼中提供了board_info類,board_info類中又提供了all()和get()這兩個方法,透過這兩個方法便可快速獲取板卡上的IO分配資訊。
all()方法用於獲取board_info類中的所有屬性和方法列表,all()方法如下所示:
board_info.all()
all()方法可以獲取到board_info類中的所有屬性和方法列表,列表中的前8個元素是board_info類的方法,其餘的是board_info類中的屬性,因為與板卡上IO分配相關的資訊是儲存在board_info類的屬性中的,因此在呼叫all()方法時,可以只獲取board_info類中的所有屬性列表,而不獲取board_info中的方法列表,具體如下所示:
from board import board_info
info = board_info.all()[8:]
get()方法用於獲取board_info類中屬性的值,get()方法如下所示:
board_info.get()
需要注意的是,get()方法並不能直接呼叫,get()方法會在獲取類屬性時被自動呼叫,例如board_info類中有一個BOOT_KEY的屬性,該屬性的值就是Kendryte K210 BOOT引腳對應的IO編號,要獲取board_info類中的BOOT_KEY屬性值,可透過以下方式獲取:
from board import board_info
boot_pin = board_info.BOOT_KEY
10.2 硬體設計
10.2.1 例程功能
1.使用board_info類中的all()方法,獲取board_info類中的所有屬性,並列印輸出
2.利用board_info類中的get()方法,獲取板卡上KEY0按鍵連線的IO編號,並列印輸出
10.2.2 硬體資源
本章實驗內容,主要講解CanMV內建board指令碼的使用,無需關注硬體資源。
10.2.3 原理圖
本章實驗內容,需要透過CanMV內建的board指令碼獲取板卡上KEY0按鍵對應的IO編號,為了驗證,正點原子DNK210開發板上KEY0按鍵的連線原理圖,如下圖所示:
圖10.2.3.1 KEY0按鍵連線原理圖
透過以上原理圖可以看出,KEY0按鍵對應的IO編號為IO18。
10.3 程式設計
10.3.1 board指令碼
有關board指令碼的介紹,請見第10.1小節《board指令碼介紹》。
10.3.2 程式流程圖
圖10.3.2.1 板卡資訊實驗流程圖
10.3.3 main.py程式碼
main.py中的指令碼程式碼如下所示:
from board import board_info
# 列出所有板卡資訊
info = board_info.all()[8:]
print(*info, sep='\n', end='\n\n')
# 列印輸出KEY0按鍵連線的IO
key0_pin = board_info.KEY0
print("The KEY0 button is connected to IO{:d}".format(key0_pin))
可以看到,首先透過board_info.all()方法獲取一個板卡的資訊列表,然後透過上一章節介紹了print()函式,將該資訊列表中的每一個元素透過系統標準輸出列印輸出,那麼便能夠在CanMV IDE軟體的“序列終端”視窗中進行檢視。
接著是獲取KEY0按鍵連線的IO編號,透過board_info.{key}便可以獲取board_info類中key屬性的值value,最後同樣透過print()函式進行列印輸出。
10.4 執行驗證
將DNK210開發板連線CanMV IDE,並點選CanMV IDE上的“開始(執行指令碼)”按鈕後,可以看到“序列終端”視窗中輸出了一系列資訊,如下圖所示:
圖10.4.1 “序列終端”視窗列印輸出
可以看到,“序列終端”串列埠中顯示列印了板卡的所有屬性資訊,例如LEDR、BEEP等,只需要透過board_info.{key}便可以獲取board_info類中key屬性的值value,這個value就是對應的IO編號,例如上圖“序列終端”視窗的最後一行顯示KEY0按鍵連線到了IO18,透過對比第10.2.3小節《原理圖》中的原理圖,可以驗證是一致的。