感覺STM32太簡單是一種自負(fù)嗎?
其實(shí)簡單或者復(fù)雜都不重要,重要的是通過STM32我們能學(xué)習(xí)到什么?
做一個(gè)鍵盤/鼠標(biāo),可以學(xué)習(xí)USB協(xié)議。
做一個(gè)聯(lián)網(wǎng)設(shè)備,需要學(xué)習(xí)以太網(wǎng),TCP/IP協(xié)議的底層實(shí)現(xiàn)。
做一個(gè)無線設(shè)備,可能需要學(xué)習(xí)藍(lán)牙、WIFI或者zigbee的協(xié)議,而最終的應(yīng)用,可能不一定有庫或者包,需要自己去寫底層。如果用模塊,則可能需要學(xué)習(xí)SPI、I2C或者SDIO去連接模塊。
做一個(gè)溫控設(shè)備,或者平衡小車,需要學(xué)習(xí)PID算法。
做一個(gè)攝像頭,可能需要學(xué)習(xí)SCCB協(xié)議,如果想深入一些,可能需要學(xué)習(xí)一些圖像處理的知識。
如果這個(gè)攝像頭要連接PC,做更深度的處理,則需要學(xué)習(xí)上位機(jī)的編寫,可能需要設(shè)計(jì)協(xié)議或者寫一個(gè)服務(wù)器,此時(shí)可能需要學(xué)習(xí)開發(fā)服務(wù)器的知識,以及一門寫服務(wù)器的語言,包括不限于C /Java/python/nodeJs。服務(wù)器框架可能也要學(xué)一個(gè)。服務(wù)器都有數(shù)據(jù)庫,學(xué)習(xí)個(gè)簡單的nosql吧,當(dāng)然mysql和oracle也可以。
上位機(jī)要是需要圖形界面,最簡單的可能是electron,當(dāng)然C 調(diào)用win32 API更好。
如過要做人臉識別、圖形分割,還需要機(jī)器學(xué)習(xí)的知識,可能需要python和tensorflow / pytorch框架,當(dāng)然其他語言也可以,但可能更復(fù)雜,而機(jī)器學(xué)習(xí),基礎(chǔ)是數(shù)學(xué),嗯~,很難的那種。
現(xiàn)在都是手機(jī)端操作,Android可能學(xué)一下,Java走起。如果碰巧手機(jī)是蘋果的,objective-c學(xué)起來。
如果繼續(xù)深入,做一個(gè)更復(fù)雜的設(shè)備,首先需要自己設(shè)計(jì)板子,PCB設(shè)計(jì)需要學(xué),那模電數(shù)電也需要學(xué),電路原理更需要學(xué)。
軟件層面,可能發(fā)現(xiàn)裸機(jī)已經(jīng)不夠用了,可能需要學(xué)習(xí)ucos/freeRTOS之類的操作系統(tǒng),甚至自己學(xué)習(xí)寫一個(gè)操作系統(tǒng)內(nèi)核。如果這個(gè)系統(tǒng)要求健壯、高效,需要深入理解操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、算法、優(yōu)化、匯編語言等。
上述種種內(nèi)容還不少,不知不覺已經(jīng)學(xué)習(xí)了計(jì)算機(jī)科學(xué)的一部分了,對計(jì)算機(jī)科學(xué)有了基本的了解了。
如果大家覺得這是強(qiáng)行關(guān)聯(lián),其實(shí)不是。綜上所有,只是用STM32做了一個(gè)處理單元放在服務(wù)器端的小機(jī)器人,能保持平衡、識別人臉、能在PC端和手機(jī)端控制而已。
語音識別、對話系統(tǒng)等功能還沒說,這些可能需要更多自然語言處理、乃至強(qiáng)化學(xué)習(xí)的知識,你發(fā)現(xiàn),往往效果不盡如人意,這不是你技術(shù)不好,而是這個(gè)世界的瓶頸,恭喜,可以看論文、寫論文,為人類在計(jì)算機(jī)、人工智能領(lǐng)域的突破做貢獻(xiàn)了。
什么?想要把運(yùn)動(dòng)單元做波士頓動(dòng)力那樣的?這事情就更復(fù)雜了,不然你以為我怎么入坑的?
以上是擴(kuò)展,那么向深學(xué)習(xí)呢?
技術(shù)深究起來自己都怕,比如剛學(xué)習(xí)了STM32的cortex架構(gòu),那其寄存器、指令集、內(nèi)存是如何實(shí)現(xiàn)的?剛了解這些,那其鎖存器是哪一種,取指、解碼過程是怎樣的?加法器又怎么實(shí)現(xiàn)?剛了解三極管和布爾邏輯運(yùn)算,那三極管是怎么工作的?剛了解PNP和NPN,那共射特性曲線是怎樣的?為什么載流子會(huì)運(yùn)動(dòng),正偏反偏是什么?為什么磷、硅、硼作為半導(dǎo)體材料,會(huì)形成電子流動(dòng)?空穴是否能流動(dòng)?
重點(diǎn)不是STM32能做什么,而是我們能用STM32做什么,能做什么程度的產(chǎn)品,市場競爭力如何,甚至考慮是否滿足了用戶未被滿足的需求,也就是填補(bǔ)了市場空白。技術(shù)并不是獨(dú)立的,而是拓?fù)涞摹?/span>
如果你覺得STM32簡單就對了,說明意法成功了!
當(dāng)年STM32是怎么在重多單片機(jī)里脫穎而出的?庫函數(shù)庫函數(shù)庫函數(shù)。在這之前,單片機(jī)主要是51、AVR、PIC、MSP430這些玩意,就是寫個(gè)UART通信函數(shù),都要先去CSDN“借鑒”一下,發(fā)現(xiàn)別人寫的不完全滿足需求又自己修改,然后慢慢地積累出自己的一套庫...然后在換下一款單片機(jī)的時(shí)候把這幾年的積蓄丟掉...
意法半導(dǎo)體搞這個(gè)庫函數(shù),不就是為了降低開發(fā)門檻么?讓開發(fā)者專注于更抽象的應(yīng)用而不需要太關(guān)注單片機(jī)底層的東西才是大趨勢,意法抓住這個(gè)趨勢先發(fā)制人,才得以迅速占領(lǐng)市場。
什么?直接寫寄存器?匯編?這種炫技的東西絕大多數(shù)STM32的目標(biāo)應(yīng)用都不需要。什么成本敏感?成本敏感誰選STM32啊,幾毛錢一顆只能用匯編寫的單片機(jī)了解一下。
換個(gè)角度吧,Arduino簡單嗎?覺得Arduino簡單是自負(fù)么?誰在乎你覺得Arduino簡單不簡單啊,大家只關(guān)心你用Arduino實(shí)現(xiàn)了什么。
所以,覺得STM32簡單不是理所當(dāng)然的事情么?倒是很好奇為啥這種理所當(dāng)然的事情會(huì)讓人懷疑自己是不是自負(fù)。
END
本文轉(zhuǎn)載自公眾號:嵌入式Linux原文地址:www.zhihu.com/question/450708178/answer/1812354503版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
▍