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