 FPIOA 引腳映射與 GPIO 編程)
K210 硬件編程和普通單片機最大的區(qū)別之一是很多功能并不固定綁定在某個物理引腳上。正式控制 LED、蜂鳴器、按鍵、傳感器之前需要先理解 FPIOA 引腳映射。GPIO 控制看起來只是讓某個引腳輸出高低電平但在 K210 中程序需要先通過 FPIOA 把功能分配到物理 IO。理解這層關(guān)系后后續(xù) PWM、I2C、SPI、UART 等實驗會更容易展開。文章目錄理論基礎(chǔ)硬件設(shè)施軟件代碼擴展應(yīng)用總結(jié)理論基礎(chǔ)實驗原理FPIOA 的完整名稱是 Field Programmable IO Array可以理解為 K210 內(nèi)部的一套“引腳功能分配器”。開發(fā)板外部看到的是物理 IO 引腳程序中使用的是 GPIO、PWM、I2C、SPI、UART 等軟件功能。FPIOA 的作用就是把某個軟件功能綁定到指定物理引腳上。在普通開發(fā)板中某個引腳可能固定就是串口 TX另一個引腳固定就是 PWM 輸出。但 K210 的靈活性更高很多外設(shè)功能可以通過 FPIOA 映射到不同物理 IO。這樣做的好處是接口使用更靈活缺點是編程前必須先明確“硬件接在哪個 IO程序功能映射到哪個 IO”。GPIO 編程的流程可以概括為四步。先確認模塊信號線接到哪個物理 IO再通過 FPIOA 把這個物理 IO 映射為 GPIO 功能接著創(chuàng)建 GPIO 對象并設(shè)置輸入或輸出模式之后在程序中讀取電平或輸出電平。后續(xù) LED、蜂鳴器、按鍵、傳感器檢測都會反復(fù)使用這套流程。硬件設(shè)施實驗所需硬件本篇用于理解 FPIOA 和 GPIO 編程思路可以使用開發(fā)板板載 LED 或擴展板上的 LED 模塊完成驗證。若實際套件中的 LED 接口與示例 IO 不一致需要根據(jù)開發(fā)板引腳圖修改代碼中的物理 IO 編號。本篇可以優(yōu)先使用板載 LED 進行驗證避免外部接線干擾。如果使用擴展板 LED 或外接 LED 模塊需要根據(jù)實際主板引腳圖確認信號線連接到哪個物理 IO。下面以 IO12 作為示例實際操作時可以替換成套件對應(yīng)的 LED 引腳。模塊引腳連接位置功能說明VCC3.3V 或 5V為 LED 模塊供電按模塊要求選擇電壓GNDGND電源地線需要與開發(fā)板共地SIG / INIO12LED 控制信號線示例程序會映射為 GPIO0代碼中的fm.register(12, fm.fpioa.GPIO0)表示把開發(fā)板物理 IO12 映射為軟件功能 GPIO0。后面創(chuàng)建GPIO(GPIO.GPIO0, GPIO.OUT)對象時程序控制的就是被映射后的 GPIO0 功能而這個功能最終會作用到物理 IO12 上。軟件代碼實驗所需軟件環(huán)境本篇使用 CanMV IDE 編寫和運行 MicroPython 程序。開發(fā)板需要提前完成 USB 串口驅(qū)動安裝、CanMV 固件燒錄和 IDE 連接測試。如果 IDE 無法連接開發(fā)板應(yīng)先檢查數(shù)據(jù)線、串口驅(qū)動和 COM 端口再排查代碼問題。下面程序演示 FPIOA 引腳映射與 GPIO 輸出控制。示例將物理 IO12 映射為 GPIO0再通過 GPIO0 控制 LED 閃爍。實際開發(fā)板如果 LED 不在 IO12需要修改fm.register(12, fm.fpioa.GPIO0)中的 12。# CanMV K210 FPIOA 引腳映射與 GPIO 輸出控制實驗# 功能將物理 IO12 映射為 GPIO0并控制 LED 閃爍fromfpioa_managerimportfmfromMaiximportGPIOimporttimeprint(K210 FPIOA GPIO output experiment start)# 將物理 IO12 映射為 GPIO0 功能# 如果實際 LED 接在其他 IO需要修改這里的物理 IO 編號fm.register(12,fm.fpioa.GPIO0)# 創(chuàng)建 GPIO0 對象并設(shè)置為輸出模式ledGPIO(GPIO.GPIO0,GPIO.OUT)whileTrue:# 輸出高電平led.value(1)print(GPIO0 output HIGH)time.sleep(0.5)# 輸出低電平led.value(0)print(GPIO0 output LOW)time.sleep(0.5)如果 LED 亮滅邏輯與預(yù)期相反可以將led.value(1)和led.value(0)的順序或含義對調(diào)。部分板載 LED 采用低電平點亮方式代碼輸出低電平時反而會點亮這是正常硬件設(shè)計現(xiàn)象。這段代碼的關(guān)鍵不在 LED 閃爍本身而在 FPIOA 映射和 GPIO 對象創(chuàng)建。fm.register()負責把物理 IO 與軟件功能綁定GPIO()負責創(chuàng)建可以被程序控制的對象value()負責輸出高低電平。GPIO 輸入的思路與輸出類似只是對象模式從GPIO.OUT改為GPIO.IN。例如按鍵或數(shù)字傳感器實驗中程序會先通過 FPIOA 把物理 IO 映射為 GPIO 功能再創(chuàng)建輸入對象之后通過value()讀取當前電平狀態(tài)。# GPIO 輸入思路示例# 以物理 IO13 映射為 GPIO1 為例fromfpioa_managerimportfmfromMaiximportGPIOimporttime# 將物理 IO13 映射為 GPIO1fm.register(13,fm.fpioa.GPIO1)# 創(chuàng)建 GPIO1 輸入對象keyGPIO(GPIO.GPIO1,GPIO.IN)whileTrue:valuekey.value()print(GPIO1 input:,value)time.sleep(0.2)這段輸入示例適合后續(xù)按鍵、傾斜傳感器、振動傳感器、觸摸開關(guān)、紅外避障等實驗使用。輸出控制關(guān)注“程序改變外部模塊”輸入檢測關(guān)注“外部狀態(tài)被程序讀取”。兩者都需要先建立 FPIOA 映射關(guān)系。擴展應(yīng)用常見問題FPIOA 和 GPIO 實驗中最常見的問題是硬件接線和代碼映射不一致。程序中映射的是 IO12但模塊實際接在 IO13代碼可以正常運行串口也會輸出信息但 LED 或傳感器不會有預(yù)期反應(yīng)。排查時應(yīng)先核對接線再核對fm.register()。擴展實驗掌握 FPIOA 和 GPIO 思路后可以把單個 LED 閃爍擴展成更多硬件控制實驗。比如用多個 GPIO 控制流水燈用輸入 GPIO 讀取按鍵狀態(tài)用按鍵控制 LED 開關(guān)用傳感器輸入觸發(fā)蜂鳴器報警。后續(xù)所有基礎(chǔ)硬件實驗都可以從這套思路擴展出來??偨Y(jié)本篇圍繞 K210 FPIOA 引腳映射機制和 GPIO 編程思路進行了梳理。FPIOA 負責把物理 IO 和軟件功能綁定起來GPIO 負責完成輸入讀取或輸出控制這是后續(xù)硬件實驗的基礎(chǔ)。掌握 FPIOA 后代碼中的 GPIO、PWM、I2C、SPI、UART 才能對應(yīng)到真實接線位置。后續(xù) LED、蜂鳴器、按鍵、傳感器和顯示模塊實驗都會建立在這套引腳映射思路之上。