第十六章 machine模塊實驗 1)實驗平臺:正點原子DNK210開發板 2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0 3)購買鏈接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套實驗源碼+手冊+視頻下載地 ...
第十六章 machine模塊實驗
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
本章實驗將介紹machine模塊的基礎知識,以及machine模塊內部分函數的使用。通過本章的學習,讀者將學習到machine模塊的基本使用方法。
本章分為如下幾個小節:
16.1 machine模塊介紹
16.2 硬體設計
16.3 程式設計
16.4 運行驗證
16.1 machine模塊介紹
machine模塊是CanMV內置的模塊,machine模塊包含了與Kendryte K210硬體相關的特定功能,machine模塊中的大部分功能允許實現對Kendryte K210上硬體(例如CPU、UART、Timer等)的直接且不受限制的訪問和控制,因此能夠幫助開發者快速地實驗一些硬體功能。
machine模塊提供了3個函數和7個類,machine模塊提供的函數,如下表所示:
表16.1.1 machine模塊提供的函數
machine模塊提供的類,如下表所示:
表16.1.2 machine模塊提供的類
本章著重介紹machine模塊提供的函數,在後續章節將陸續對machine模塊提供的部分類進行介紹。
machine模塊提供了unique_id()函數,用於獲取Kendryte K210的32位元組唯一ID,unique_id()函數如下所示:
machine.unique_id()
unique_id()函數用於獲取Kendryte K210的32位元組唯一ID,32位元組唯一 ID可以被作為每顆Kendryte K210晶元的“身份證”。
unique_id()函數的使用示例如下所示:
import machine
uid = machine.unique.id()
machine模塊提供了reset()函數,用於對Kednryte K210進行軟體複位,reset()函數如下所示:
machine.reset()
reset()函數用於對Kendryte K210進行軟體複位,相當於對板卡進行重啟操作。
reset()函數的使用示例如下所示:
import machine
machine.reset()
machine模塊提供了reset_cause()函數,用於獲取Kendryte K210的複位原因,reset_cause()函數如下所示:
machine.reset_cause()
reset_cause()函數可以獲取Kendryte K210本次運行前複位的複位原因,其中複位原因如下表所示:
表16.1.3 複位原因描述表
reset_cause()函數的使用示例如下所示:
import machine
cause = machine.reset_cause()
16.2 硬體設計
16.2.1 常式功能
1.使用unique_id()函數,獲取Kendryte K210的唯一ID,並列印輸出
2.使用reset_cause()函數,獲取Kendryte K210本次運行的複位原因,並列印輸出
3.使用reset()函數,對Kendryte K210進行軟體複位
16.2.2 硬體資源
本章實驗內容,主要講解machine模塊中函數的使用,無需關註硬體資源。
16.2.3 原理圖
本章實驗內容,主要講解machine模塊中函數的使用,無需關註原理圖。
16.3 程式設計
16.3.1 machine函數
有關machine函數的介紹,請見第16.1小節《machine模塊介紹》。
16.3.2 程式流程圖
圖16.3.2.1 machine模塊實驗流程圖
16.3.3 main.py代碼
main.py中的腳本代碼如下所示:
import machine
import time
# 獲取唯一ID並列印輸出
uid = machine.unique_id()
print(uid)
print("".join(["%02X" % byte for byte in uid]))
# 獲取複位原因並列印輸出
cause = machine.reset_cause()
def decode_cause(cause):
if cause == (machine.PWRON_RESET or machine.HARD_RESET):
return "Pin reset"
elif cause == machine.WDT_RESET:
return "WDT0 reset"
elif cause == machine.WDT1_RESET:
return "WDT1 reset"
elif cause == machine.SOFT_RESET:
return "Software reset"
else:
return "Unknow"
print(decode_cause(cause))
# 延時一段時間
time.sleep_ms(500)
# 軟體複位
machine.reset()
可以看到,首先是通過machine.unique_id()函數獲取Kendryte K210的唯一ID,並通過print()函數將其列印輸出,但由於該函數返回的是bytes類型的數據,為了方便查看,同時將其格式化為十六進位數據進行列印輸出。
接著是使用machine.reset_cause()函數獲取複位原因,該函數返回的是一個int類型的數據,複位原因對應的int數據都以常量的形式保存在machine模塊中如表16.1.3,在將複位原因轉換為對應的字元串後,通過print()函數將其列印輸出。
在最後是使用machine.reset()函數對Kendryte K210進行軟體複位,複位後Kendryte K210將重新啟動,CanMV也將重新運行。
16.4 運行驗證
將DNK210開發板連接CanMV IDE,並點擊CanMV IDE上的“開始(運行腳本)”按鈕後,可以看到“串列終端”輸出了一些信息,如下圖所示:
圖16.4.1 “串列終端”視窗列印輸出
從“串列終端”的視窗中可以看到,前兩行輸出的是Kendryte K210的唯一ID,值得一提的是,雖然列印輸出了64位元組的唯一ID,但有效的只有前32位元組。可以看到第三行,輸出的是“Pin reset”,說明本次運行前的複位原因是“引腳複位”。
由於在main.py中的最後執行了machine.reset()函數,因此Kendryte K210將會執行一次複位,因此,通過CanMV IDE軟體能觀察到在執行完main.py後,原本處於“已連接”狀態的Kendryte K210設備變為了“未連接”狀態,如下圖所示:
圖16.4.2 設備斷開連接