第十章 板卡信息實驗 1)實驗平臺:正點原子DNK210開發板 2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0 3)購買鏈接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套實驗源碼+手冊+視頻下載地址:http ...
第十章 板卡信息實驗
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小節《原理圖》中的原理圖,可以驗證是一致的。