為什麼你學了幾天 STM32感覺一臉茫然,是你的姿勢不對
是的,你的感覺沒錯,其實你自己已經有朦朧的答案,在之前沒接觸過任何單片機,其實你的問題能夠歸結於以下幾個理由:
1.MCU的根底知識了解的缺少失
2.單片機(也就是STM32)的詳細工作認識不清晰。
依照整個進修階段先後順序的說明,下面更詳細的解讀來說明問題。
1.專用術語
對於MCU來說,在沒有接觸詳細的功能,僅專用名詞就一堆,交叉編譯,內核,加法器/除法器、協處理器、算法加速器、指令集、浮點運算、流水線、哈佛構造、寄存器(通用和外設)、中斷和異常、FLASH、RAM、Cache(緩存)、SDRAM(刷新時長)、USART(波特率,停下位,奇偶檢驗)、CAN,SPI(片選)和I2C等,這裡面有的屬於根底知識,有的屬於進階須要了解的知識點,這些名詞的了解是作為入門者的第一個門檻,假如對一些專用名詞不了解,那麼組合起來的語句就愈加艱澀難懂,這裡說我的進修方法:遇到聽不懂的專業術語,去網絡上查找了解,並找個本子或電腦通過文檔的形式記錄下,一段時長回顧一下,好記性不如爛筆頭,這裡舉薦<>3權威指南>,對於單片機進修中須要了解的內核知識都有說明。
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對應的復用引腳也能確定,事實上,對於真實項目,都是從
需求=>項目方案書=>軟硬體框架=>軟體驅動
你所看的視頻直接從軟體驅動學起,不知道前後背景,才會迷茫,至於如何轉換思維進修,可參照我之前這篇總結,末尾也有我關於嵌入式入門的說明。
聽心跳的聲音:轉變思維進修嵌入式 --方法和總結111贊同 ?7評論文章
3.上層應用邏輯實現
配合外設的應用邏輯實現其實才是項目中最複雜的局部,包含中斷前後台系統的交互,可能存在RTOS應用和協議移植,GUI的管理操作,和其它模塊如wifi模塊,藍牙模塊的交互,不過這局部屬於進階內容,當你對外設模塊由一定認知後,這局部應該也會有自己的進修方法,這裡我就不在贅述。
本答覆到此就完畢了,這只是我對單片機問題關於自己了解的總結,單片機雖然並不須要創新研發未知的技術,但卻波及從晶片底層到軟體接口的全部實現,包含對現代計算機技術中向微處理器方向的全部精髓技術,也是須要不斷進修才能不被時代擯棄。另外希望你也能總結出自己的方法,在這條道路上越走越好,假如有嵌入式Linux的進修需求,也能夠看我這篇答覆。
我的第一塊開發板是arduino,最早學電子方向也是用的arduino。
我的第一塊開發板也是arduino uno。再到8266,再到的stm32,再到的學校的51,是不是路徑很詭異啊。其實進修單片機最重要的是什麼。是興趣,成就感,早些年的51都是用彙編的,那玩意勸退多少人,我第一個接的個人項目,用的就是彙編,鬼知道我一個程序寫了半個月,人都吐了。
再說此時的51,你裝個keil,然後呢,裝51支持包,點燈程序,然後編譯好hex,用什麼下載,stcisp吧,燒錄是不是還得重啟一下啊。
再說stm32。是不是拿到正點原子或者野火的407zgt6開發板,一大坨,也不知道上面一堆啥玩意,一堆排針,一堆串口,網口,顯示屏。不管了,先裝mdk5,再裝f4支持包,然後原子哥的點亮燈,然後燒錄是用串口340還是stlink啊,是不是還要配燒錄地址啊,h7系列是不是還要自己寫外部flash配置文件啊,由於片內空間很小。你把這一堆搞完了,是不是頭大啊,啊對,還有那網盤的大小,我記得有好幾個g吧,下載完,都兩天了。
所以,這一系列就很容易勸退很多學生。arduino就很蠢,什麼也沒有,d13點燈,一條藍色數據線,安裝arduino ide,不用裝驅動,安裝過程中點安裝,就行了,翻開ide,點開程序blinker,自動識別串口,一條typeb的印表機線點擊下載,好了,d13閃爍。再搞幾個pwm,搞個oled螢幕,搞個繼電器和藍牙模塊,直接能夠做個小智能家居了。成就感滿滿對吧。
然後他就會遇到各種問題,假如pwm想控制電機,不能調頻次對吧,只能重寫定時器,假如沒有uno模擬量輸出,假如串口獨有一個,假如外部中斷獨有兩個不夠用對吧,沒有網口只能用5100或者5500擴展對吧,擴展了網口,flash又不夠了對吧,很多限制出現了。這時候,你就會像吸煙成癮一樣,會去瘋狂想辦法攻克,假如選擇mega或者due。或者轉戰stm32,有的問題能夠直接用atmel studio開發攻克。興趣會驅使你往前鑽研。
而stm32進修茫然,是對的,由於stm32,國內的開發板,都是給你一坨,讓你自己在那裡搞搞搞,鬼都不願意看,去看看意法半導體官方給出的評估板什麼樣子。用德飛萊的那種系統板,加一些擴展板和杜邦線,配合好的bootloader,讓初學者有更多的時長琢磨本質的東西,而不是浪費在看你那個大開發板的原理圖,看幾個g的資料,才是正確的。當然,感覺說這些會引起國內的兩個st教育巨頭的不滿,但是還是要說的,雖然我是大學裡看著原子和野火的書學的32,也感激兩位為中國嵌入式教學做出的貢獻(我也買了好多兩家的開發板和模塊啥的,大幾千有的,還有原子的示波器,雖然被我摔了)但不是如此以來,便是對的,教育的本質,本就是不斷探索,不斷創新,不斷反思。
我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像黑色字體加蚣重呺也能領取。