不想錯過我的推送,記得右上角-查看公眾號-設(shè)為星標(biāo),摘下星星送給我
森山,10多年的硬件開發(fā)經(jīng)驗,做過的板卡數(shù)不清有多少塊,做過量產(chǎn)的產(chǎn)品也涉及到各個行業(yè),也做過不少失敗的項目。他用自己的經(jīng)驗告訴大家,如何系統(tǒng)的學(xué)習(xí)單片機。
01
需要一塊開發(fā)板——讓單片機動起來
買一塊開發(fā)板,按照配套的demo程序,自己改改,讓外設(shè)動起來,比如OLED顯示內(nèi)容,電機啟停、調(diào)速,溫濕度采集等等。這一步是為了讓你體會到,單片機如何通過編程實現(xiàn)對硬件的操作。
這樣的開發(fā)板太多了,建議從STM32入手,原因有二:一是資料最全,開發(fā)環(huán)境比較友好,而且今后在產(chǎn)品中使用也比較多;二是開發(fā)板都不貴,而且最好選外設(shè)多的,帶顯示,帶通信接口的開發(fā)板。
即使一開始不懂,開發(fā)板配套的學(xué)習(xí)包,足夠你學(xué)一陣子了,STM32官方也有現(xiàn)成的Cubemx工具來幫你生成基礎(chǔ)代碼。
02
自己設(shè)計一個小demo——掌握基本外設(shè)
我建議有硬件設(shè)計能力的,可以自己設(shè)計制作一款開發(fā)板,盡量多的加入不同類型的外設(shè),因為以后你研發(fā)產(chǎn)品,就是基于這些外設(shè)的應(yīng)用邏輯組合。然后一個個移植外設(shè)驅(qū)動,當(dāng)然更建議自己寫驅(qū)動,驅(qū)動寫得好能最大程度發(fā)揮硬件的性能。
受限于單片機的性能都比較一般,基礎(chǔ)的外設(shè)的連接方式大致有這些:IO、I2C、SPI、AD\DA、UART、CAN、RGB888……等這些低速接口,有的也帶USB。
等你玩轉(zhuǎn)了這些,以后升級到更強的平臺,那么高速接口學(xué)習(xí)起來也只是工作量的問題,大同小異。
在移植和寫驅(qū)動的過程中,要學(xué)會看datasheet,spec。雖然一個簡單的芯片規(guī)格書就是幾十上百頁,但并不是你都要去看懂的,只要知道提取自己有用的信息,比如I2C設(shè)備,它的總線最高頻率,你在做時序控制時不能超過它的上限。
在調(diào)試過程中,你一定會遇到非常細(xì)節(jié)的問題,這時候,借助一定的工具和手段,可以讓你變得更加高效,比如學(xué)會用示波器去看數(shù)據(jù)波形,學(xué)會看時序,分析通信協(xié)議,用萬用表去檢測基本的故障。
下面視頻是用STM32通過對步進(jìn)電機和電磁鐵的控制,來實現(xiàn)紡織機機頭的功能。盡管我也做了多年開發(fā),在遇到新的外設(shè)時,調(diào)試還是花了不少精力。參數(shù)是調(diào)出來的,有時候就差幾十us的延時,性能就相差很多,所以在研發(fā)的過程中一定要耐心:
03
學(xué)著做一個完整的小產(chǎn)品——產(chǎn)品思維
前2步的基礎(chǔ),新手的你已經(jīng)大致有信心了。接來下可以做一些設(shè)備的聯(lián)動,實現(xiàn)一個產(chǎn)品的基礎(chǔ)功能,一個簡單的單機設(shè)備。舉個例子,通過溫濕度監(jiān)測,來控制繼電器,繼電器外加電熱絲或加熱裝置,并且實時顯示該溫度值,這就是一個溫度控制的產(chǎn)品了。這些設(shè)計不難的,難的是在這一步里你要有一定的產(chǎn)品思維了。要列出你這個產(chǎn)品的需求,解決了什么痛點,根據(jù)明確的需求去選擇相應(yīng)的單片機方案,你要知道實現(xiàn)這樣的功能,需要選擇什么樣的技術(shù)方案,綜合還要考慮成本。
這里面的信息量和變數(shù)其實非常大,比如你要設(shè)計一款帶有線網(wǎng)絡(luò)的產(chǎn)品,那么你是選擇自帶RMII接口的單片機,還是通過增加一個串口轉(zhuǎn)網(wǎng)絡(luò)的模組來實現(xiàn)?這可能涉及到你需要通信的網(wǎng)絡(luò)速度,也要考慮綜合成本,以及開發(fā)的難易程度。
有時候,這需要權(quán)衡產(chǎn)品本身的硬件成本,和你的開發(fā)周期,并不是一味追求硬件成本最優(yōu),如果出貨量不大的產(chǎn)品或項目,應(yīng)該更傾向于選擇自己熟悉的單片機平臺,這樣開發(fā)周期最短,人力消耗最低,避免撿了芝麻,丟了西瓜的情況發(fā)生,因為很多項目,時間要求是很緊迫的。
做產(chǎn)品,實現(xiàn)功能很簡單,但整體的可靠性、穩(wěn)定性、兼容性是很難的,這個問題主要討論單片機,所以產(chǎn)品其他延伸的話題就不展開了。
04
讓你的單片機連接到全世界——嘗試通信
現(xiàn)在很多產(chǎn)品都物聯(lián)網(wǎng)化了,進(jìn)一步的,你可以去研究基于單片機的有線、無線通信方式,最簡單的通過串口連接WIFI、GPRS模組,學(xué)習(xí)MQTT等物聯(lián)網(wǎng)通信協(xié)議實現(xiàn)單片機與互聯(lián)網(wǎng)的連接。MQTT協(xié)議基于json,即使完全不懂的人,學(xué)半天也就會了,上手比較容易,PC端有很多客戶端可以直接用,適合信息量不大、實時性要求不高的數(shù)據(jù)采集、遠(yuǎn)程控制。
通信模組和方式就很多了,WIFI、Zigbee、BT、Lora、GPRS、Lora、NB、4G/5G、433等各種小無線,以后可以專門寫一篇來介紹這些通信方式的不同應(yīng)用場景。
之所以把通信這塊單獨拎出來,因為通信讓萬物互聯(lián),有了更多可玩性和可能性,讓冰冷的單片機成為有想象力的產(chǎn)品。
最后的總結(jié):做了越多的產(chǎn)品就越覺得,沒有一個產(chǎn)品是簡單的,容易的,希望大家耐心一點,打好基礎(chǔ),后面的路子就會很寬。
除了以上4點,后面遇到更復(fù)雜的項目,可以上RTOS、MBED等輕量化,適合單片機的操作系統(tǒng)。大家不要一味想著去搞linux,單片機一直在迭代,現(xiàn)在性能強的單片機還是很多的,而實際工業(yè)上有很多需求,單片機綽綽有余,性價比極高,開發(fā)周期短,穩(wěn)定,這些都是很好的。