STM32真的很难学吗?
大家好,我是張巧龍,最近看知乎有一個問題,是關于嵌入式入門的,看到幾個回答,還不錯,分享給大家。
回答一:
作者:聽心跳的聲音
鏈接:https://www.zhihu.com/question/443062080/answer/1757550413
是的,你的感覺沒錯,其實你自己已經有朦朧的答案,在之前沒接觸過任何單片機,其實你的問題可以歸結于以下2個原因:
MCU的基礎知識理解的缺失
單片機(也就是STM32)的具體工作認識不清晰。
按照整個學習階段先后順序的說明,下面更詳細的解讀來說明問題。
1.專用術語
對于MCU來說,在沒有接觸具體的功能,僅專用名詞就一堆,交叉編譯,內核,加法器/除法器、協處理器、算法加速器、指令集、浮點運算、流水線、哈佛結構、寄存器(通用和外設)、中斷和異常、FLASH、RAM、Cache(緩存)、SDRAM(刷新時間)、USART(波特率,停止位,奇偶檢驗)、CAN,SPI(片選)和I2C等。
這里面有的屬于基礎知識,有的屬于進階需要了解的知識點,這些名詞的理解是作為入門者的第一個門檻,如果對一些專用名詞不了解,那么組合起來的語句就更加晦澀難懂。
這里說我的學習方法:遇到聽不懂的專業術語,去網絡上查找理解,并找個本子或電腦通過文檔的形式記錄下,一段時間回顧一下,好記性不如爛筆頭。
這里推薦<Cortex-M3權威指南>,對于單片機學習中需要了解的內核知識都有說明。
2.芯片工作流程
專業術語并不會多難,記住基本不會忘,就算忘了回顧下也簡單,在邁過這個坎后,下一步就是理解芯片執行流程和我們要做什么才能讓芯片工作起來。
1)在上電后,芯片復位啟動。
2)MCU從FLASH通過指令/數據總線分別讀取指令和數據,配合解析執行,其中在通過RAM和通用寄存器(以就是R0~R12的內部寄存器)處理可變數據。
3)根據執行的指令,配置和操作外設的的寄存器,從而驅動對應外設實現具體的功能。
4)配合上層組合邏輯,結合外設功能,執行具體應用的全部需求。
上述就是芯片工作的流程,而作為單片機開發者,實現的代碼就是放在FLASH中的程序,由官方提供的SDK包和用戶裁剪實現定義的外設驅動組成,按照上述流程就包含:
芯片的啟動過程中對堆棧的初始化,系統相關外設的處理(如時鐘) => 這部分由廠商提供,我們把文件放入項目即可,以STM32為例就是啟動文件startup_xxx.s和系統初始化的SystemInit函數
配置應用需要的外設模塊,如果你看網上的教學視頻,都是從這一步直接開始的,特別是STM32基于STM32CubeMx的實現,會告訴你這么寫是滿足要求的。
如果你不是愿意深究的人到無所謂,當你深究這東西的時候,就會發現沒有人告訴為什么要這么寫,迷惑自然就來了,其實這部分就是嵌入式所謂的經驗成分。
如大部分外設模塊都要進行時鐘使能,GPIO就要配置引腳的上拉/下拉,推挽/開漏,USART配置模式,波特率,奇偶校驗,停止位,數據位,還要考慮對應GPIO的端口復用,I2C就要考慮主從模式,根據需要的傳輸速率確定模塊時鐘,SDRAM除了考慮引腳復用,時序,還要計算刷新時間來保證數據的穩定,這些知識理論上都是長期在工作中積累出來的。
在項目需求確定后,根據芯片和器件選型,就能夠確定硬件PCB的繪圖和布置,功能需求也能確定,如訪問外部EPPROM,那么I2C就確定位主模式,并根據EPPROM的讀寫時序和芯片的性能,考慮到效率和穩定的平衡,就可以確定I2C的速率,考慮布局和其它需求,I2C對應的復用引腳也能確定。
事實上,對于真實項目,都是從需求=>項目計劃書=>軟硬件框架=>軟件驅動
3.上層應用邏輯實現
配合外設的應用邏輯實現其實才是項目中最復雜的部分,包含中斷前后臺系統的交互,可能存在RTOS應用和協議移植,GUI的管理操作,和其它模塊如wifi模塊,藍牙模塊的交互,不過這部分屬于進階內容,當你對外設模塊由一定認知后,這部分應該也會有自己的學習方法,這里我就不在贅述。
本回答到此就結束了,這只是我對單片機問題關于自己理解的總結,單片機雖然并不需要創新研發未知的技術,但卻涉及從芯片底層到軟件接口的全部實現,包含對現代計算機技術中向微處理器方向的全部精華技術,也是需要不斷學習才能不被時代拋棄。
回答二:
作者:snowdream
鏈接:https://www.zhihu.com/question/443062080/answer/1719187639
通過題主的問題描述,題主其實在前期的準備階段基本已經完成(包括C語言,實驗板和編譯環境),也開始跟著原子哥的教學視頻開始了STM32的學習之路。
但是,根據我以前給其他朋友的分享,其實題主還差了關鍵的一個步驟:對STM32 MCU理論知識的學習和理解。
對于初學者而言,如果對MCU的理論知識(比如時鐘樹,GPIO/UART/IIC/SPI等配置過程)沒有一個扎實和正確的認知,那么個人覺得跟著視頻學習,即使學會也大半是知其然而不知其所以然。
當然不排除有的朋友根據視頻也能把基礎打的牢固(但我覺得他們也在視頻學習中穿插了基礎的學習和理解)。
所以基于以上的分析,我建議題主:
1. 先不要著急上手視頻教學。
2. 選擇一本STM32單片機的理論書籍,圍繞最小系統,先從STM32理論知識入手。
3. ( 視頻 + 對應理論知識 ) -> 實驗板驗證。來加深理論知識。
上面的過程可能會很慢,但是題主的基礎知識肯定會打的很扎實,對后面的二次開發和擴展會有很大的幫助。
-END-
我是張巧龍,一名教電子的大學老師,歡迎關注!
總結
以上是生活随笔為你收集整理的STM32真的很难学吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 19岁「天才少年」自制CPU!1200个
- 下一篇: 周鸿祎再度警告:ChatGPT可能有自我