我從用人部門的角度說說。
首先你要拋棄硬件,專攻軟件。不是說硬件不行,而是硬件有專門的人做,重點也不在 MCU 這塊。從硬件的角度,微控制器本身沒什麽好學的。
如果你強行軟硬件一起學,大概率都學不深,都會一點。當然迷你型公司會喜歡這種工程師,一人當一個團隊用非常省開發成本。這種公司有多迷你?大概率是初創公司,只有一兩個技術人員,同時負責軟硬件設計,要布板焊板偵錯、要出工藝小批次、要下廠生產指導和返廠維修,有些甚至還要做結構設計和生產組裝。稍微有點規模的公司,就不會軟硬件同體了。
所以不做硬件板卡,對硬件的要求就很低了,一般要求看得懂簡單的原理圖即可。數電模電不用學,懂得簡單的電路分析即可,我說的是基爾霍夫定律、戴維南定律、節點法網孔法等,這些就夠跟硬件打交道了!
確定了軟件方向後,如果你有點C語言基礎,直接買個STM32或ESP32的開發板開始學起來。不要專門去學組譯,一般公司都是搞套用的,99%用不上。C語言也不用刻意的學,遇到不懂的,再翻出來學,這樣效率會高得多。
不要學Arduino,那玩意不是不好,但畢竟還只是個玩意,靈活性和效能是個問題,所以正經公司都不用它。Arduino 是給學生玩的,我給我小孩(小學生)買了一塊,讓他找點硬件編程的感覺,他很喜歡。
開發板裏面帶的各種外設常式,像 GPIO、ADC、DAC、Timer(PWM)、UART、SPI/IIC 都是非常常用的外設,一般專案都會用到,所以你不但要知道他有什麽作用,主要套用場景是什麽,主要工作原理是什麽,你還要一行一行程式碼自己敲一遍調通。中斷至少要會 ADC、Timer、UART。對於常用通訊介面,你至少要分得清同步/異步/單雙工/全雙工,它們各自的用途是什麽。你不要只會呼叫廠家封裝好的函數,你還得深入到寄存器層面,老老實實翻看MCU廠家內建的【軟件設計手冊】和【數據手冊】中關於各個外設的詳細說明,不要害怕,對於裏面的 主要 寄存器,你要理清他們的使用場景,要有能力寫程式碼直接配置或控制寄存器。
這還不夠,你還得學一個嵌入式作業系統,比如 FreeRTOS 或 RT-Thread,學會寫任務和中斷銜接程式這些核心功能就好。不用花精力去學習怎麽移植到不同芯片,直接用別人移植好的就行,因為對於企業專案,一般都有人或廠商幫你移植好了。至少要學會多工的協調工作,不要以為能寫一個個獨立任務就OK了。最少要熟悉一個命令列系統(如 RT-Thread 的 FinSH,FreeRTOS沒帶)的使用,能快速的寫出需要的偵錯命令。像 RT-Thread 這類 IoT 系統一般還有器材驅動模型、檔案系統、乙太網路及TCP/IP協定棧等高級功能,可以先不學。
你最好能把這些學習經歷包裝一下,包裝成一個真實專案的樣子,你要想好這個虛構的產品有哪些功能,都有什麽作用,目標使用者是誰,能幫使用者解決哪些問題。對於這個產品,你是怎麽開發的。千萬不要把所有外設都往產品上搬,這樣顯得很假。有不少工作了的工程師,對於專案和產品,居然一問三不知,只當自己是螺絲釘,只顧自己那塊技術,這樣會給面試管或領導很不好的印象,即使入職後,大概率不受待見,對於自己的成長非常不利。
經歷了這個階段,如果你有985/211名校或碩士學位的加持,基本上能找到一份還不錯的工作了,入職就能上手公司的專案。
如果沒有名校或學位的加持,你還得再努力一把,才能從激烈的競爭中勝出。以下這些技能可以給你加分,你看情況學,不同行業對這些元件會有取舍:
再後面的技術方向,就脫離了微控制器了,一般有以下選擇:
最好,祝大家職場順意!
我是折騰總監,喜歡從第一性原理講解一些有趣的技術,歡迎關註,讓我們一起探討學習,一起馳騁於浩瀚的知識海洋。