學STM32還是學嵌入式linux

2021-10-09 06:21:56 字數 4131 閱讀 6428

01

話 題

經常有大學生同學糾結:我到底是學stm32還是學嵌入式linux。這個問題很多人都會有自己的看法,今天我試著從多個角度,把我了解到的事實講一下,希望對大家有所啟發。

02

stm32確實好

首先得承認stm32確實好,好到stm32都成了微控制器mcu的代名詞了,現在很多人甚至說微控制器時預設就說stm32,實際上還有很多微控制器的啊。

大家學點技術圖什麼?

還不是為了找工作賺工資。

當然我承認大家都有更遠大的理想,但是就算你想造火箭也得畢業後先能找到工作賺錢餬口開始。

所以如果你讓我學個東西都沒公司要,都找不到工作,那學它肯定錯了。

而且大多數一二線城市都有工作機會,這一點更難得。

總結一下,學stm32肯定沒錯,這玩意至少能讓你有份工作。

也就是說即使你在工作中需要用到其他mcu,譬如說nxp的lpc系列,cypress、ti的mcu系列,而這些你從來沒接觸過完全不會。

但是,只要你熟練掌握stm32,就能很快上手這些mcu的開發工作。

目前很多國產mcu廠商如gd、國民技術等在推出的國產mcu也是對標stm32的,在開發方式甚至是韌體庫方面都和stm32非常類似。

綜上,掌握stm32確實很有用,stm32最大的特點就是實在,掌握這項技能很有助你找到乙份工作,在微控制器軟硬體工程師這條路上能先上路,走出第一步。

03

stm32的侷限性

不能說stm32不好,只能說有侷限性。

stm32最大的侷限性就是:它只是個微控制器。

也就是說,你學習stm32,其實學的都是微控制器相關的技術。

譬如gui方面,你學stm32可能會學emwin,或者touchgfx,或者littlevgl等,但是你幾乎肯定不會去學qt和android那些,因為stm32上一般不跑這些。(現在qt也有qt for mcu,也在stm32h7上做了合作,但是應用面有限,大部分人大部分專案不會使用)。

所以你學到的gui技術全都是mcu領域使用的,而這些和主流的gui的前端與業務邏輯分離的設計模式(典型的如微軟的wpf,android,或web前端設計等)是有不同的,因此你學到的東西也是有侷限的。

再譬如網路應用方面,stm32大多數應用都不帶網路,就算帶網路往往也是用通訊模組,很少會需要你基於socket層直接程式設計,而這才是網路程式設計的關鍵技能。

所以很多做stm32多年的工程師,實際上對網路很陌生,甚至是一竅不通。

04

客**待stm32

客觀去看,stm32開發確實是電子相關專業同學可以去學習的一項技能。

或者說,如果你打算學微控制器,那麼stm32絕對是首選。

當然了,首選不是說只學stm32,其實我個人更推薦的微控制器學習路徑是先用51入門,再高階到stm32,這樣更符合學習規律,學習效率會更高。

所以說學stm32是沒錯的。

但是不是說只學stm32,這個必須搞清楚。

蘋果很好吃,吃蘋果對身體好,難道你只吃蘋果嗎?

所以我認為正確的對待stm32的態度是:

05

嵌入式linux是stm32最好的延伸

如果你stm32已經學得不錯了,建議延伸學習linux。

很多人覺得linux使用沒有stm32廣泛,使用linux的裝置遠沒有使用stm32的裝置多,招聘崗位中linux相關也沒有stm32相關的多,所以不應該去學linux而應該去學stm32。

這個觀點是錯的。

因為這個觀點把stm32和linux拿來對比了,然而這2個東西根本沒有可比性。

你對比這2個就好像對比自行車和小汽車,你說自行車的優勢是便宜,好修理,不堵車,不用交停車費,不耗油等等,你可以說出來自行車相對小汽車的很多優勢,然而該買小汽車的你給他個自行車行嗎?

小汽車是自行車的延伸,linux是stm32的延伸,是類似的道理。

後者相對前者是公升級的關鍵,而不是平行的關係。

06

為什麼說linux是stm32的延伸

我們說linux是stm32的延伸,其實是從技術角度出發的。

也就是說從技術的延續性,技術難度,技術拓展方向角度講,stm32掌握後再去拓展linux是非常合適的。

譬如c語言,stm32用到的c語言特性和難度都要低於linux。

所以當你通過熟練掌握stm32的過程已經一定程度掌握了c語言,再去學嵌入式linux,讀linux原始碼時,就會發現自己的c語言功底得到了昇華。

而你讀慣了linux核心原始碼後,再回過頭來看stm32的標準庫,hal庫時,就會感覺簡單了很多。

軟體層次來講也是這樣。

比stm32更簡單的微控制器,譬如51微控制器,基本不使用庫函式,都是程式設計師自己從零開始程式設計的。

51微控制器的廠商一般也不會給你提供微控制器的韌體庫,主要是太簡單沒必要。

而stm32就需要韌體庫,不管是早期的標準庫還是現在的hal庫,都是晶元廠商提供的韌體庫,來輔助程式設計師來進行開發。

到了嵌入式linux階段,分層就更複雜了。

和硬體相關的**部分成了linux的驅動層,板載硬體管理由linux核心組建接管,客戶業務功能則由linux應用程式來完成。

如果需要網路,gui等功能,也都有非常專業的核心層和應用層資源移植對接。

所以說,從技術角度講,嵌入式linux是完全覆蓋了stm32的。

07

嵌入式linux的優勢

其實學習linux還有很多優勢。

linux核心可以說是整個開源軟體社群的集大成者,在過去幾十年間有大量世界級優質程式設計師向linux kernel貢獻**和思想,也有大量的第三方開源專案基於linux的某些元件或linux的設計思想來構建。

譬如國內現在很火的國產物聯網作業系統rt-thread,你去讀它的原始碼就會發現,這完全就是linux的味兒啊。你去看華為的物聯網作業系統liteos,他的原始碼中各個元件之間分隔對接的osal設計,也是linux kernel中大量使用的技巧。

所以說為什麼要學linux?

因為它真的可以讓你一勞永逸的解決往後職業生涯中遇到的大部分技術需求。

我們學習技術有個很大問題就是:你今天永遠不知道明天會做什麼工作,會需要什麼技能。

可能你下個月開個新專案新任務,老大就會給你乙個你根本沒聽過名字的東西讓你玩。你怎麼才能快速上手呢?

我的經驗,最靠譜的就是學好linux。因為你會發現你遇到的任何東西都有linux的影子。

只要你學好了linux,有這個功底,你學習任何新東西時都會很快

我當年下決心學好linux就是因為分配到乙個指紋鎖研發的專案,用到的方案是乙個新加坡科技公司開發的,他的開發環境是用cygwin,而我此前從未接觸過。折騰了半天搭建好環境我一看,這不就是linux的命令列嘛。還好我之前接觸過簡單的linux命令列,一下子感覺這個專案就不難了。

此後我就認識到linux的重要性了,下功夫好好學了linux,這麼多年過來,太多事實案例證明,當時的決策非常英明。

08

不要限制自己

最後說一句,永遠不要人為給自己設限,不要自己侷限自己。

人要腳踏實地,不要好高騖遠,這個沒錯。

學51,學stm32這都沒錯,很實際,很接地氣。

如果你用盡了全力也就能湊合學好這些,那就做微控制器開發,也能找到工作。

但是如果你還有餘力,還願意繼續下苦功學習,那麼不要限制自己,繼續向更高層次進發,永攀技術高峰。

要相信社會不會虧待你,會用公升職加薪來回饋你。

微控制器新手學STM32還是學51?

如果你之前只是接觸計算機方面的東西,對微控制器的內部結構,以及供電,外設,感測器,相關控制硬體,驅動硬體,保護電路等還沒什麼了解或者沒什麼概念的話,我建議 只是建議 你從51開始。這裡並不是說學習stm32需要豐富經驗,而是說學習嵌入式這個領域本身就是既要由淺入深,又需要經驗與積累,更要不斷從中獲得...

嵌入式之STM32系列筆記

一 微控制器程式構架設計 用微控制器開發專案,當 開發到一定的程度後,由於涉及到的源程式檔案與標頭檔案眾多,若在前期為程式設計好架構,則在一定程度上便於程式的維護與管理,更有利於理清思路,加快專案的開發。通常將程式架構設定為四層,如下圖 其中middleware可以沒有,如果沒有外部擴充套件件,如外...

我學嵌入式

現在我讀的專業是嵌入式,什麼是嵌入式?大家都知道軟體和硬體,以後的生活 現在也已經開始 將是乙個較為簡易的模式,就是你拿起自己的手機或者其他裝置,利用安裝好的軟體去直接控制各種器件,幾乎不需要你本人去操作。那麼什麼使得你可以利用軟體去控制這些硬體呢?誒,既然人不需要去操作,必須有東西去為你操作對吧,...