這個寫韌體程式大家都會,如果你是去上班的新進菜鳥工程師的話,
這些系統開發的平台與環境根本不需要你操心的,尤其是大公司。
但不是每個公司或團隊都這麼好的資源,或是你只是學生想DIY 一下,
那這些不起眼的前置工作是每個工程師是否能夠獨立作業的重要指標與依據。
俗話說:靠山山倒,靠人人跑,靠自己最好。一生靠自己才是王道啊。
所以你不要以為我只是寫軟體或寫韌體的,但如果你要過自己輕鬆的日子,
我是覺得這些東西,你還是有空多摸摸吧,至少也要拿來說明一下:
"雖然不一定能夠證明別人是錯的,但至少也要保護自己說:我也沒錯啊"
我以前說過:工程技術討論,最好還是以"描述現象為主,不要動不動指著對方
說:這是你的問題啊。除非你以後你可以自行處理問題,否則,你還是得靠人家的啦。
所以當我們在第一篇文章中:STM32_USB_DIY(一) --- Custom HID (一)Project 建立
將原廠的開發環境簡化成我們要的平台之後,我們就可以進行系統開發了。
但我們在寫韌體程式時,幾乎都沒有任何除錯(Debug) 工具時,要怎麼辦?
你就不要老是想用所謂的 ICE 功能了啦,一步一步執行?那是碰到真正難解的
問題才難得使用一次的,平常寫程式是劈哩啪啦的一路往下寫了,誰還在用ICE ?
一般這一種系統除錯的方法就是在程式中塞進 printf 來看程式進度與相關數值內容,
所以大部分的程式都會幫你預留這個介面:就是我們一般的 UART 介面,
原廠的這個程式也有,程式中他稱為:COM1/COM2 。我們只要挑一個就可以了。
但原廠這個程式只有設定基本的COM (UART)的硬體IO 設定而已,你自己還要
把它再加一些上層的函數:譬如就是 printf 及相關的 Baudrate 的設定:
(因為這塊小片的 STM32 學習版的是有幫你預留一個UART 接口,他對應的就是COM1
是以PA9(TX)/PA10(RX) 為主,所以就只選COM1 而已。)
另外當然還有其他類似 stdio.h 及基本的 putc ,因為printf 的底層就是putc 。
怎麼做?這個東西就是凡事問Google 大神了。stm32 的網路資源一堆,
自己找答案,我文章不會花太多心思講解這些可以容易找得到答案的東西。
所以我們就可以很快的利用超級終端機的來看到我們系統程式跑起來的內容了。
當然也包括我們的按鍵反應結果,這樣子不是很方便嗎?
那一定有人問我:那你為什麼不用對岸的 sscom32 或相關串口除錯軟件呢?
不習慣,太複雜了...如果還要透過這些軟體下UART 指令或內容時,那不就又失去
我們之所以要搞USB HID 介面的精神的嗎?軟體夠用就好。
好,上面講到一個按鍵問題,所以我們就要準備按鍵了。因為我們不是用原廠標準的
硬體平台,所以我們要自己弄個按鍵了:
原廠所附的USB HID 程式是用到兩個按鍵:
TAMPER Button :在 PC13 I/O 上。使用中斷是:EXTI_15_10。
User Key Button : 在 PB9 I/O 上。使用中斷是:EXTI_9_5。
幸好我們這片小板子都有這兩根 I/O 。所以不用額外還要調整程式就可以了。
不過,這裡還有一個題外話:那就我這片滿街都是的LED 按鍵板子,(這想也知道
都是來自對岸的便宜貨啊),竟然這四個獨立按鍵是壞了三顆:
你也不要笑,你要便宜又簡單的東西,就是有這個風險,幸好我們自己太有經驗了,
簡單的用三用電表就可以馬上找到問題了,跟買家吵,還不如趕快換掉吧。
你說:誰跟你說寫韌體不用搞硬體啊?"靠自己才是王道啊"
然後既然要動手焊板子,那就順便再加個東西吧,這個偷料也都偷得太兇了吧。
然後我們就可以整理一下開發硬體平台,專心的寫韌體了。
雖然我們買不起原廠專業的開發板子,但我們也不能讓我們的開發板子"二二六六"的。
所以我們就找一片壓克力板子,把我們的電路板整理一下,這樣子不是看起來很清爽啊?
-----
雖然我們這次是用 32 bits MCU 來講USB DIY,但這個東西早在八位元時,一樣可以
用的,所以這種USB 的東西說實在的,道理都是一樣的啦。所以有些小細節我也就
不會特地的說明講解,如果有不清楚的地方,就麻煩到我以前那些USB DIY 系列
文章翻查一下吧。當然我也不會像對岸網路那樣:講 STM32 USB 的東西,就只是把
原廠的資料用中文翻譯交代一下,看了老半天,根本不知道你在講甚麼?
一個好好簡單容易使用的東西,被你搞得像網路論文文章似的....最重要的還是USB 的
基本理論與相關的系統應用關係與使用方式。
USB 基本上跟一般UART 也是一樣的:無非就是TX/RX 而已。只是他為了系統擴充
與兼容性的問題,定義了許多相關的通訊協定與基本傳輸架構而已。但這些大部分
也都是硬體幫你處理了,你也只要盯著TX/RX 的資料做就可以了。
因為USB Host 是PC 端,所以USB Tx 指的就是 USB Out ;USB Rx 指的就是USB In。
(當然對USB 裝置,我們的Stm32 來說:剛好反過來。只要方向搞清楚就可以了)
而USB Tx 其實有兩個:就是Setup Token 及Out Token 。Setup 是用來發動一開始
USB 傳輸的基本命令組。然後就是資料(也可能是命令)內容而已,然後裝置如果
正確收到再回覆訊息,完成基本溝通程序而已。
很簡單吧。網路上講得落落長有甚麼用?
或是可以參考我之前的文章:Hinet 網頁系列 --- USB DIY 系列(五)---USB DIY 講座 (三)其實大家在USB 的中斷處理方式都是一樣的啦:上圖左邊藍色代表USB 總中斷,
然後再依序細分為:Setup Token (Tx) 中斷, Out Token (Tx) 中斷及 In Token (Rx)中斷。
不過,都必須是正確回ACK 才會產生中斷的。因為這些中斷都會依序發生的,
所以在系統上是不可能發生訊號打架的問題的。
原廠這隻示範程式是有附一個PC 端的軟體,你也可以依照這個軟體操作檢視結果:
首先我們先試一下簡單的LED 燈號控制:
沒有留言:
張貼留言