回覆列表
  • 1 # 科技電小二

    如何學好STM32,很多初學者都有這樣的疑惑或者迷茫,到底怎麼做才能將STM32學會呢? 這裡和大家講解下,我從從51轉STM32的經歷或者說是經驗。

    我當時為什麼想學STM32,是因為了解到這顆MCU具有強大的功能,那時候有人用這個晶片Div做過手持式示波器,我當時覺得很厲害。自己也很想用它來做些高大上的東西。所以說這個,是想表述要對於新鮮事物,要保持一顆好奇心和探究心。這是你學習的源動力。

    如果確定要學習STM32,建議最開始購買一套開發板,為什麼呢,因為自己做一塊板子。對於初學者來說,自制開發板是很麻煩的事情,需要設計原理圖。畫pcb 自己購買元器件。焊接除錯等一系列事情,肯定會遇到這樣或者那樣的問題出現,容易打擊積極性。所以建議購買成熟的開發板,在硬體上省心,而且相對可以諮詢同樣學習這樣開發板的人,利於後續解決問題。目前開發板好些比較出名的品牌,功能不要有多齊全,基本的按鍵,串列埠,顯示屏,儲存等,夠用就行。

    具體買回來開發板之後,要做什麼呢?

    首先需要搭建開發環境,目前主流是Keil與IAR,但個人喜好使用Keil一些. 一般買開發板,都會提供開發用的軟體以及安裝的教程,初學者只需要按照教程安裝測試就可以了 好的,接下來做什麼呢? 需要測試下開發板各個功能。

    一般買開發板都會有資源包,裡面包括各種資料和教程,以及各個功能的原始碼,拿到開發板以後,先使用這些工程下載到板子裡面,驗證下板子功能是否正常,如果不正常還可以退換貨,順便也學習下如何keil 如何編譯,燒錄程式,有必要操作下如何進行模擬。

    這裡說下我覺得學stm32必須要有的資料,《Stm32系列ARM核心32位高效能微控制參考手冊》,這個檔案是對暫存器和時鐘樹詳細說明,因為我開發基於暫存器操作。這個檔案經常會用。另外就是對應的型號的晶片資料手冊。這個手冊是用來確定各個晶片引腳功能。

    接下來開始自己的一個工程,先開啟開發板的原理圖,找到一個led燈的引腳,然後在寫這個IO口高低電平的程式,

    51微控制器與stm32有很多差異,其中有一點就是時鐘的部分,Stm32有比較複雜的時鐘控制,系統時鐘可以倍頻,stm32還有比51複雜的匯流排構架和各個內部寄存的時鐘控制器stm32內部的IO,串列埠,等模組都有自己的時鐘控制,想要用哪個,都必須開啟對應的時鐘使能。時鐘樹和時鐘控制,匯流排都在我上面提到的檔案裡面有詳細表述。我這裡不多說了。

    開始第一個工程時候,先不急著配置stm32系統時鐘,使用stm32預設的內部時鐘,配置好io口的使能時鐘,然後輸出對應的高低電平,對於io口。先要知道輸入輸出的配置,這個是基礎。

    學完埠,可以開始配置外部時鐘,倍頻到一定工作頻率

    在學習串列埠。因為串列埠可以將程式碼中的資訊打印出來。是一種比較方便的除錯手段,所以這個部分很重要,其他的部分,我個人覺得可以結合自身的意願和工作需要進行學習。這樣Stm32就算入門了,

    對於STM32的學習,其實有兩個方向,暫存器操作以及庫函式操作,對於這兩種方向,各有優劣,暫存器學習,缺點是剛開始會比較慢,需要不斷檢視官方的暫存器手冊,一點點除錯,,但優點也很明顯,後續的開發設計中會有明顯的優勢,就是程式碼可控,編寫專案的程式碼構架可控,尤其是有些專案需要對STM32的flash容量有要求,或者有些專案需要微控制器精準控制和高精度採集時,會有明顯優勢 我個人傾向於暫存器,原因是因為很多學STM32之前都接觸過和學習過51系列微控制器,程式碼實現都是基於暫存器操作,在程式設計思想上習慣使用暫存器, 磨刀不誤砍柴功,當你將所需要的暫存器都寫成對應的函式的時候,後續使用,只需要呼叫這個函式就可以了,可以說一次設計,終身有用, 前期慢一點,將STM32的功能理解的明明白白,後續的開發設計中,就更能得心應手,解決分析BUG時也更容易些。

    以上只是我一人觀念,難免會有偏頗和講解不到位的地方,希望大家見諒。

  • 2 # 玩轉嵌入式

    微控制器都是相通的,既然會51微控制器,學起STM32來也很快,下面從區別以及學習方法上簡單解答一下。

    51和STM32在學習上的區別

    STM32微控制器是cortex的核心,32位,比51微控制器功能強大很多,片上資源也多很多。51微控制器在程式設計時都是直接操作暫存器,沒有庫函式的支援。由於功能有限,所以51微控制器的暫存器的設定要相對簡單一些。而STM32微控制器由於功能強大,引腳複用較多,在設定暫存器時會稍微麻煩一點,但是STM32有官方的庫函式支援,也可以弱化暫存器的設定。

    如何學習STM32微控制器

    STM32微控制器和51微控制器在硬體電路設計上區別不大,對於一些特殊的功能需要考慮專用的GPIO口。學習STM32還是主要針對程式設計。建議入手一塊開發板,以開發板的外設電路為基礎,學習STM32的程式設計。

    學習GPIO的設定,在學習之處還是建議從暫存器設定入手,先不要直接學習庫函式。在這一部分主要學習如何將GPIO口設定為輸入、輸出、如何設定為上拉、下拉模式,學習控制LED、蜂鳴器、繼電器、按鍵輸入等典型的應用。

    學習定時器的設定,定時器是微控制器的標配,在做產品時定時器功能使用頻率比較高,學習定時器的不同的配置模式、計數、定時等功能。

    學習中斷的設定,中斷的使用可以大大提高微控制器程式碼的執行效率,微控制器的中斷源有多種型別,如定時中斷、外部中斷、通訊接收中斷、通訊傳送中斷、AD採用中斷等。

    學習通訊功能的設定,微控制器的通訊埠UART是標配,除此之外還有IIC,SPI,CAN,USB等,根據板載資源學習通訊功能的引數的設定。

    參與專案,學以致用

    學習微控制器的目的就是為了設計產品,所以一定要學以致用,甚至都可以邊做產品邊學,找各種機會去練手,不管是自己做著玩,還是為了產生價值,避免以書為核心的盲目死學。

  • 3 # 中國頂級科技評論人

    你肯定不會51。。。否則不會有這個問題。不要信前面給你說好多建議的話。

    換句話說,微控制器其實都是一樣的東西,用起來的中心思想是一樣的。所以,你這個問題你得問你自己。新的微控制器無非是功能多一些,需要的是多用。多接觸。

    再說了,後面要接觸的東西多了去了,那都不是微控制器本身的東西,比如RTOS,比如GUI。再比如LWIP TCPIP之類的。當然,最終決定你深度的,就是演算法和語言功底。

    然後最後你會發現所有東西都一樣,跟練武功一樣,基礎不牢,地動山搖!

  • 4 # 電子創客營

    我只想聊下我的真實經驗,我最早學的也是51微控制器,後來學的stm32,我是如何一步步來學習的。

    首先肯定是要有塊stm32的開發板

    正點原子、野火、安富萊等等這幾家做的都不錯。不要指望什麼模擬就可以完全學會,還是要放在開發板上跑才好友真實的體驗

    按照教程一個個例程耐心自己編寫實踐

    這幾家的教程我基本上都看過,都寫的挺好。有時候我也經常會學一個外設把每一家的教程資料都看一遍。

    之後就是一個個stm32外設的操作,在這個過程中同時熟悉st的庫函式介面

    從GPIO開始

    串列埠的使用

    定時器的使用

    驅動SPI FLASH

    驅動SD卡

    ……

    在這個階段學習和51比起來會有個比較痛苦的過程,你會發現以前寫51微控制器的c語言知識用到了皮毛;你會發現stm32的暫存器比51微控制器多的多;這個過程也建議你多看STM32的參考手冊。以後工作的時候你會發現用一款新的微控制器最好的資料就是看手冊

    可以學習一款嵌入式作業系統的使用

    當上面那個階段度過了就可以像更高深的地方去探索,去學習一款嵌入式作業系統,而目前用的最多的應該是freertos。當你學會以後,其他嵌入式作業系統用起來也大同小異。在學習作業系統又可以分為兩個層面:先學會如何使用。後面可以再深入研究原理,研究ARM-CORTEX-M核心執行原理

    工作專案中實踐

    之後就是實踐,自己主動去尋找專案做,或者參加工作做專案。把之前學的真正應用起來。這才是把之前的慢慢融會貫通,打通六脈的時候。這時候再給你任何一款新的微控制器你應該基本上都能做到很快就可以上手拿來做專案的程度。

  • 5 # 魚鷹談微控制器

    怎麼自學 STM32 呢?我想想。當初我也是在學習了一年的 51 微控制器後才過渡到 STM32 的,所以算有些經驗了。

    我大一的時候在實驗室的環境下開始學習 51 微控制器,雖說學長不怎麼管我們這些小白吧,但起碼有個環境在這,有不懂的問題都可以向學長提問,這就是環境的好處了。但是如果說周圍只有你一個人在學微控制器,那這條路走得就會比較艱難了!為什麼?因為微控制器學習不僅涉及到軟體,還涉及到硬體,這就是為什麼說嵌入式門檻高的原因了,出了問題你不知道是硬體問題還是軟體問題,還是都有問題,需要你根據經驗一一排查才可。

    說回自學 STM32 問題,STM32 微控制器遠比 51 微控制器複雜,暫存器數量是它的好幾倍,各種外設模組,DA、CRC、SPI、CAN、SD、CAN 、TIM等等,而每一個模組可能都有單獨的時鐘,在使用這些模組時都要提前將時鐘配置好,否則根本不能工作;而配置這些外設時鐘之前你還要先配置系統時鐘才行,而系統時鐘又涉及到了分頻、倍頻的問題,也是繁雜。正因為這些東西實在是太多了,所以出現了庫函式開發!

    庫函式開發的好處就是你不用管如何去操作暫存器,你只要瞭解什麼時候該呼叫哪一個函式即可,相當方便,所以庫函式開發的思路就是,記住各個函式的功能、呼叫條件(不需要死記硬背)就可以輕鬆進行開發了。但也正因為如此,所以在學 STM32 的時候第一個攔路虎就是如何建立一個 STM32 工程,因為庫函式開發需要的檔案數量遠比單純的暫存器開發多的多,而這些檔案之間還有關聯性,很容易編譯出錯,所以可能在 51 微控制器很簡單的建工程到了 STM32 裡面就會變得複雜了。但這些問題透過網上搜索還是很快能解決的,但是解決歸解決,你是否明白為什麼就這樣解決了呢?所以你在開始學 STM32 的時候心裡會很沒底,因為你連最基本的工程都不知道該怎麼才能建好。

    然後第二個攔路就是時鐘了,前面說過,STM32的時鐘也是相當的複雜,所以很多教程上來就是教你如何配置時鐘,這本沒有錯,但是你可能只是想盡快的點你第一個 LED 燈罷了,卻要學這種感覺和點燈無關的時鐘問題,所以心裡也是挺著急的。事實上,點第一個 LED 燈是很簡單的事情,只要你把對應的引腳配置好了就可以點燈。可能你會問,不要配置時鐘嗎?當然要,只是你點個燈對時鐘的要求根本不高,所以時鐘頻率到底是多少可以不管,因此你直接用用預設的時鐘配置就行了,因為在進入main函式之前啟動檔案(唯一的那個彙編檔案)其實已經對時鐘進行了配置(預設一般按最大的時鐘頻率進行配置),根本不需要額外的時鐘程式碼的。所以這一點可以省去初學者不少功夫,當你比較熟練的掌握了庫函式的時候,再回過頭來去理解時鐘的配置可能效果會更好。

    關於 STM32 入門影片,你可以找劉凱老師的影片教程(有清晰版的),講的還是不錯的,因為我就是透過他學習 STM32 的,一集沒落下的全部看完了。

    最後再說一點,STM32 學習不比 51,51 因為沒有線上除錯功能所以在尋找 BUG 上還是比較麻煩的,而 STM32 因為有線上除錯功能,可以實時觀察資料、指令跟蹤,所以在學習過程中一定要好好利用(當初我學習的時候根本不知道,還傻傻的用 51 那一套除錯),而開發平臺我覺得 MDK 最好,因為它把常用的暫存器都進行了整合,還有各種除錯機制,非常人性化。

    最後再配一張圖讓你感受一下 MDK 除錯的強大之處(純軟體模擬的):

    最後祝你學習愉快!!!

  • 6 # 機械電子學習札記

    就微控制器而言,只要你真的精通了其中一種的使用,並且理解了核心,其它的微控制器也是觸類旁通的。

    就51和32之間無非是32有了全新的時鐘系統,在學習時是需要自己去重新掌握的,其它的也還是和51類似。

    尤其是32的庫函式,對於51學習者轉32學習是十分友好的,比如32是IO口不支援位定址的,但透過庫函式又能有效的同51一樣操作IO口。

    個人聯絡是:如果你51很紮實,是可以直接上手32的暫存器操作的,因為本質上都是對於暫存器的操作。但51是馬馬虎虎的,建議先庫函式操作,緊跟著馬上看暫存器版,兩者結合,對個人的提升是很有效的。

  • 中秋節和大豐收的關聯?
  • 5歲孩子喜歡看電視劇《西遊記》,我想讓孩子看書,是選擇連環畫《西遊記》還是原著?