我的嵌入式软硬件学习(三)
研究生和本科還是有著非常大的差距,本科大家可以渾渾噩噩,可以去專心考試,也可以去專心水競(jìng)賽,更可以專心去混社團(tuán)學(xué)生會(huì),參加各種文化活動(dòng)
并且這些也都是本科階段大家所認(rèn)可的,有一兩項(xiàng)突出就可以在本科有滋有味,拿獎(jiǎng)學(xué)金,拿優(yōu)學(xué)優(yōu)干
可是到了研究生,之前可能引以為傲的都開始變得不重要,研究生的衡量標(biāo)準(zhǔn)只有學(xué)術(shù)能力、實(shí)踐能力,也就體現(xiàn)在寫論文和做實(shí)驗(yàn)
不僅衡量標(biāo)準(zhǔn)發(fā)生了變化,環(huán)境也發(fā)生了變化,研究生大家即使跟著同一個(gè)老師,研究方向也會(huì)不同,這就導(dǎo)致了研究生狹小的圈子變得更小,社交關(guān)系開始局限于宿舍和同門師兄弟
就這樣,大家研究方向不同,各有各的生活方式,共同語(yǔ)言也僅限于生活的瑣事,實(shí)驗(yàn)室的八卦,再也沒(méi)有了本科一群人不同班級(jí)不同專業(yè)嬉戲打鬧喝酒吃肉的生活
對(duì)于我看到的研究生而言,大家抱著最初本科考研為了提升學(xué)歷找個(gè)好工作的心態(tài)可能會(huì)讓一部分人的研究生生活不這么糾結(jié)
因?yàn)檠芯可膶?dǎo)師制,學(xué)生的上限和下限很大程度是導(dǎo)師決定的,并且僧多肉少,這么多的研究生,很難雨露均沾,都享受到足夠的科研資源
這里的科研資源指的是 天時(shí)地利人和下導(dǎo)師有精力有項(xiàng)目可以進(jìn)行資源的投入和學(xué)生的培養(yǎng),一切都是剛剛好
可大多數(shù)情況下是,老師們一次次的苦口婆心,精力、時(shí)間、金錢換來(lái)的是學(xué)生的擺爛和達(dá)不到預(yù)期,面對(duì)這樣的學(xué)生,被消耗的信任很難在一茬又一茬的學(xué)生中建立起來(lái)
研究生招生入學(xué)的學(xué)生又是五湖四海,什么樣目的、什么樣基礎(chǔ)的學(xué)生都有,并且不同于本科生,研究生的學(xué)習(xí)方式,待人待物都已經(jīng)固化,很難通過(guò)教導(dǎo)進(jìn)行培養(yǎng)
就這樣,導(dǎo)師的選題和研究方向萬(wàn)一再不是學(xué)生的興趣和擅長(zhǎng),考上研究生無(wú)疑是一切痛苦的開始
對(duì)我來(lái)講,要么是端正態(tài)度,用百分之二百的努力去努力達(dá)到要求;要么端正方向,跟老師促膝長(zhǎng)談?chuàng)Q方向,自己對(duì)自己負(fù)責(zé);要么是就地?cái)[爛,能畢業(yè)就行,達(dá)到學(xué)校最低畢業(yè)要求即可
導(dǎo)師和學(xué)生相見(jiàn)恨晚本來(lái)就是小概率的事件,學(xué)習(xí)本來(lái)就是個(gè)經(jīng)歷痛苦的過(guò)程,從來(lái)也沒(méi)有人要對(duì)自己負(fù)責(zé)。認(rèn)清了現(xiàn)實(shí),認(rèn)識(shí)到導(dǎo)師帶研究生也只是他作為學(xué)校老師多項(xiàng)工作中的一項(xiàng)工作
實(shí)在是上岸了才發(fā)現(xiàn)自己不適合學(xué)術(shù),那就去達(dá)到畢業(yè)要求,去做自己想做的,三年的時(shí)間足夠去不斷地試錯(cuò),找到自己的適合
本來(lái)就只有少數(shù)人適合學(xué)術(shù),何苦難為了自己,又難為了導(dǎo)師呢
回到我自己,接著說(shuō)嵌入式軟硬件的學(xué)習(xí)
在研究生入學(xué)時(shí),心想本科解除了單片機(jī),研究生要是繼續(xù)學(xué)習(xí)那不得學(xué)一個(gè)牛X一點(diǎn)的,怎么也得是FPGA
那時(shí)候的我對(duì)單片機(jī)認(rèn)識(shí)還過(guò)于淺顯,僅僅是控制兩個(gè)IO引腳就覺(jué)著單片機(jī)不過(guò)如此。絲毫沒(méi)見(jiàn)識(shí)過(guò)單片機(jī)冰山下的深海,匯編、內(nèi)存管理、通信協(xié)議、驅(qū)動(dòng)、BL、計(jì)算機(jī)體系結(jié)構(gòu)…
跟盧老師交流后,因?yàn)橛幸恍﹩纹瑱C(jī)基礎(chǔ),會(huì)寫點(diǎn)C語(yǔ)言,決定還是先學(xué)一學(xué)STM32,畢竟最近的項(xiàng)目需要用到,當(dāng)時(shí)還滿心歡喜的安排著先學(xué)STM32,研二再學(xué)FPGA,到時(shí)候二者相結(jié)合,完成畢業(yè)設(shè)計(jì)
誰(shuí)能想到,剛過(guò)完第一學(xué)期就碰上了該死的疫情,一切計(jì)劃都被打亂了
研一上學(xué)期在學(xué)校主要是跟著正點(diǎn)原子做了STM32的實(shí)驗(yàn),并對(duì)程序進(jìn)行修改,實(shí)現(xiàn)一些特定的功能需求(PS:單片機(jī)的學(xué)習(xí)除了各位老師,第一個(gè)要感謝的就是豪哥
正點(diǎn)原子的資料還是非常值得推薦,但是我建議要用最快的時(shí)間把STM32的實(shí)驗(yàn)過(guò)一下,對(duì)以后可能用到的部分著重看一下原理,不要花太多時(shí)間,不要花太多時(shí)間,不要去糾結(jié)于一些自己可能永遠(yuǎn)不會(huì)用到的實(shí)驗(yàn)
正點(diǎn)原子作為入門教材非常的好,可以由淺入淺的最快讓我們了解到我們要做什么,以及怎么做,和為什么這么做
在簡(jiǎn)單的部分,如打控制蜂鳴器,串口什么的,可以發(fā)現(xiàn)正點(diǎn)原子講的很好很細(xì)致,但是仍然會(huì)感受到正點(diǎn)原子例程的束縛,以及擴(kuò)展性太差,程序也大都是為了演示功能而存在,實(shí)戰(zhàn)意義差(當(dāng)然這并不是要甩鍋正點(diǎn)原子,人家本來(lái)就是入門開發(fā)板
我受不了正點(diǎn)原子是當(dāng)講到以太網(wǎng)時(shí),開始跳躍式的避重就輕,我關(guān)心的IO配置,LWIP修改都介紹的模模糊糊
我想應(yīng)該是因?yàn)檫@部分涉及到的知識(shí)面過(guò)多,無(wú)法面面俱到,即便是例程,也只是在正點(diǎn)原子本身開發(fā)板的基礎(chǔ)上進(jìn)行功能實(shí)現(xiàn),功能嵌套
本質(zhì)上是大家在學(xué)習(xí)正點(diǎn)原子教程時(shí),都是用的是較老的“標(biāo)準(zhǔn)庫(kù)”版本,都是以固定的純代碼為基礎(chǔ),當(dāng)牽扯的功能較多時(shí),會(huì)導(dǎo)致整個(gè)程序看起來(lái)非常混亂,并且移植性很差(主要原因是沒(méi)有使用ST官方提供的CubeMX工具,這個(gè)后面詳細(xì)再講
時(shí)間來(lái)到了20年年初,突如其來(lái)的疫情導(dǎo)致無(wú)法返校,一切噩夢(mèng)的開始,軟硬件的學(xué)習(xí)在家?guī)缀跏谴绮诫y行,為了減少疫情影響,STM32F407的開發(fā)板還是辛苦盧老師郵寄到家中(正月十六
起初是打算做一個(gè)之前項(xiàng)目控制板的升級(jí),但是由于我的拉跨,器件清單都沒(méi)整明白,再加上在家中實(shí)在無(wú)法支撐,后來(lái)也就不了了之了
時(shí)間來(lái)到了3月底,一個(gè)機(jī)會(huì)到來(lái),需要幫趙老師做一個(gè)假負(fù)載的主控模塊
很快,結(jié)構(gòu)圖到手了,雖然現(xiàn)在看起來(lái)很簡(jiǎn)單,但對(duì)我來(lái)說(shuō),除了按鍵、蜂鳴器我能100%保證,其他要么沒(méi)接觸過(guò),要么沒(méi)聽(tīng)過(guò)
當(dāng)任務(wù)到我手上時(shí),我相信自己能做出來(lái)的唯一底氣或許真的就是盧老師的技術(shù)支持,也有著一股初生牛犢的感覺(jué)
第一個(gè)難點(diǎn)就是要畫PCB,要說(shuō)單純的畫PCB我敢畫,但是從需求分析,到原理圖設(shè)計(jì),再到器件選型,以及PCB拓?fù)浣Y(jié)構(gòu),最后投板應(yīng)用,這一套我是真的慌,PCB幾乎零基礎(chǔ),僅僅自學(xué)了怎么連線,可以說(shuō)兩眼一抹黑
第二個(gè)難點(diǎn)是需要在STM32F103平臺(tái)進(jìn)行開發(fā),之前我一直使用的是STM32F407,雖說(shuō)大同小異,但還是會(huì)有點(diǎn)犯怵,畢竟沒(méi)搞過(guò),不知道里面到底有多少的坑
第三個(gè)難點(diǎn)那就是像串口屏、頻率檢測(cè)、信號(hào)調(diào)理這些個(gè)“新鮮”玩意兒,有些只是聽(tīng)說(shuō)過(guò),在文字里能感覺(jué)到一絲絲的熟悉,而有些壓根沒(méi)見(jiàn)過(guò),腦袋里連個(gè)概念都沒(méi)有
第四個(gè)難點(diǎn),我,在家,幾乎除了一臺(tái)筆記本,一個(gè)STM32F407開發(fā)板,就什么都沒(méi)有了
在一切正式開始前,決定先進(jìn)行功能實(shí)現(xiàn)的驗(yàn)證,試試能不能把幾個(gè)比較難的骨頭啃一啃
先買來(lái)了串口屏,試試這玩意兒到底怎么用,指令怎么發(fā)和怎么接收
隨之而來(lái)的是一個(gè)又一個(gè)的設(shè)計(jì)文檔,說(shuō)明文檔,對(duì)我而言,最缺的是時(shí)間,必須盡快掌握設(shè)計(jì)的方法
文檔中能搜集到的有效信息就是如何通過(guò)指令對(duì)串口屏進(jìn)行控制,驗(yàn)證串口屏的可用
然后就是去找串口屏有沒(méi)有別人已經(jīng)寫好的庫(kù),可以直接調(diào)用點(diǎn)線面的設(shè)計(jì),甚至是顯示漢字的函數(shù),在折騰了幾天后,終于找到了庫(kù)函數(shù)
簡(jiǎn)單的通過(guò)函數(shù)在串口屏繪制了幾個(gè)方框之后,后面就是邏輯的疊加了,達(dá)成設(shè)計(jì)只是時(shí)間問(wèn)題
接下來(lái)就是驗(yàn)證ADC的檢測(cè),這也是控制板的核心功能,通過(guò)ADC來(lái)檢測(cè)功率映射過(guò)來(lái)的電壓
研究正點(diǎn)原子的例程后,確定了可以魔改的部分,以及可以調(diào)用的接口函數(shù)
就這樣,前期的驗(yàn)證工作告一段落了,接下來(lái),游戲開始!
首先是原理圖的設(shè)計(jì),之前對(duì)數(shù)字電路的認(rèn)識(shí)僅存在于數(shù)字電路課本,再多一點(diǎn)就沒(méi)有了
原理圖心想或許也可找一個(gè)別人的參考抄一抄?
出發(fā)點(diǎn)很好,但也一步邁入了一個(gè)大坑,先設(shè)計(jì)最小系統(tǒng),本來(lái)盤算著最小系統(tǒng)還能有問(wèn)題,MCU+晶振+電源+復(fù)位+Boot,這不就OK了
晶振就首先出了問(wèn)題,參考了幾個(gè)圖之后發(fā)現(xiàn)晶振各有各的頻率…
至于為什么晶振選擇這個(gè)大小,以及選擇這個(gè)大小后程序能不能正常運(yùn)行,這可讓我犯了難,最后還是選擇了最穩(wěn)妥的參考,參考正點(diǎn)原子的!畢竟要在正點(diǎn)原子的例程上進(jìn)行魔改
在設(shè)計(jì)過(guò)程中,考慮到正點(diǎn)原子用的元器件我不一定可以找到一模一樣的,所以還要對(duì)全部的元器件進(jìn)行替換,替換成已知封裝
然后是ADC緩沖運(yùn)放電路通過(guò)一個(gè)SMD接口接入,主要包括一個(gè)限位器,和一個(gè)運(yùn)放
因?yàn)镾TM32的ADC集成在內(nèi)部,所以通過(guò)IO口直接輸入,但是通過(guò)芯片手冊(cè)可以發(fā)現(xiàn)對(duì)應(yīng)引腳最大輸入電壓3.3V,這就需要限位器進(jìn)行分壓,防止芯片被燒毀
最難的還要數(shù)電源的設(shè)計(jì),這次只能靠MP2359芯片手冊(cè)了,啊,這就是優(yōu)秀的芯片手冊(cè),依葫蘆畫瓢原理圖就可以了
看到建議PCB的拓?fù)浣Y(jié)構(gòu)后,我懵了,這是個(gè)啥,怎么還畫畫了
嚴(yán)格按照數(shù)據(jù)手冊(cè)參考布局,之后應(yīng)該是這樣的,顛覆了我PCB只能畫線的認(rèn)知
繼電器需要的驅(qū)動(dòng)電路,蜂鳴器需要的放大電路,風(fēng)機(jī)檢測(cè)需要的防反接電路,也都是一步一個(gè)坑的走過(guò)來(lái)的
不能說(shuō)是死纏爛打吧,也是抱著盧老師大腿不放了,最后好歹兩個(gè)星期搞定了硬件設(shè)計(jì)
這兩星期,其中酸楚也只有自己知道了,做夢(mèng)都是在調(diào)整拓?fù)浣Y(jié)構(gòu),都是在更換器件封裝
硬件設(shè)計(jì)完成后,開始軟件設(shè)計(jì),這部分雖然也有很多坑,但相較于抽象的硬件設(shè)計(jì)還是簡(jiǎn)單了不少
因?yàn)橛布蛙浖际俏易约涸O(shè)計(jì),在測(cè)試過(guò)程中出現(xiàn)的所有問(wèn)題也只能自己背鍋
印象深刻的就是風(fēng)機(jī)檢測(cè)電路,對(duì)軟件而言,就是一個(gè)簡(jiǎn)單的判斷IO輸入是高電平還是低電平,但是始終沒(méi)有辦法檢測(cè)到輸入變化
因?yàn)樽约阂彩谴蠊媚锷限I頭一回,一度無(wú)法判斷是自己的軟件有問(wèn)題還是硬件有問(wèn)題,畢竟可能都有問(wèn)題
最后還是在盧老師的提醒下,用多塊板子進(jìn)行了交叉驗(yàn)證,鎖定了問(wèn)題出在了防反接器件BAV99上,是公司那邊焊接錯(cuò)了元器件,用電烙鐵拿掉器件之后,功能一切正常
就這樣,折騰中,邊驗(yàn)證硬件功能,邊實(shí)現(xiàn)功能邏輯,五六天結(jié)束了這個(gè)簡(jiǎn)單設(shè)計(jì),主要就實(shí)現(xiàn)了一些人機(jī)交互,狀態(tài)更新,ADC映射、溫度檢測(cè)的一些邏輯
溫度檢測(cè)用的也是模塊,LM75,直接通過(guò)IIC就可以讀取到數(shù)字溫度了,非常方便
難得也就是整個(gè)界面的交互策略,設(shè)計(jì)不好的話操作起來(lái)容易反人類,這個(gè)看起來(lái)簡(jiǎn)單的交互,甚至也經(jīng)歷過(guò)完全的重寫
后來(lái)為了寫小論文還設(shè)計(jì)了一個(gè)上位機(jī)
本來(lái)以為萬(wàn)事大吉,終于可以收工,可以度過(guò)一個(gè)輕松的5月,結(jié)果在公司那邊調(diào)試測(cè)試的過(guò)程中,發(fā)現(xiàn)功率映射始終不正確,才發(fā)現(xiàn)其映射關(guān)系不是線性的,經(jīng)過(guò)反推參數(shù),最后確定了映射關(guān)系,這才算告一段落
半年后,為了寫小論文,給這個(gè)小板又增加以太網(wǎng)功能,順便將“標(biāo)準(zhǔn)庫(kù)”移植到了開發(fā)更方便的“HAL庫(kù)”,不過(guò)這都是后話了
STM32的學(xué)習(xí)還遠(yuǎn)沒(méi)有結(jié)束,真正的考驗(yàn)還在8月,今天就到這里了,已經(jīng)四千字了,下次再見(jiàn)
2022/05/12
總結(jié)
以上是生活随笔為你收集整理的我的嵌入式软硬件学习(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。