為什麼 STM32 暫存器版本的學習資料如此少見,而實驗室的老師都要求學習暫存器版本的?

時間 2021-05-30 13:26:03

1樓:rundstedt

如果完全沒有操作過暫存器的底子的話,了解暫存器還是非常必要的,不然出了問題你都不知道怎麼去查。如果有用過51的經驗,操作過暫存器,那就完全沒必要搞什麼暫存器版本。

2樓:默丶distance

個人不是相關專業,但做微控制器相關競賽,也算稍微了解微控制器。

以下我的觀點:什麼都不會就hal庫,沒必要暫存器上手。

我認同上面一位答主的話,可能c語言才是最大的問題。不信你看看你能不能看懂hal庫大致講了些什麼。

知乎的風格是給你最全面的打基礎,學個計算機還要精通線代數分概率論,我想知道誰學計算機是先精通了這些才開始學的?換做微控制器,又是從最基礎的暫存器開始,暫存器確實很重要,但我不認同這樣的學法,我傾向於幫人指一條入門最舒服的路,等進了這個門,要學什麼心裡肯定清楚了。

至於為什麼要學暫存器,知道微控制器就會知道重要性。以上是對是否先學習暫存器的看法不闡述暫存器的重要性了。至於為什麼老師讓學習暫存器版本,因為學習和幹活不一樣學習要學透, 幹活要效率,既然目的是會暫存器操作就行。

直接學暫存器和學了hal後再學暫存器也沒差。

3樓:四風谷的阿寶

暫存器操作是最基本底層的.學會這個你才能知道庫函式的原始碼含義.老師同時也在要求你們如何熟練看晶元的程式設計資料手冊,這樣當你們遇到一款新晶元時候不足以手足無措.

就相當於要練好上乘武功,你的先練好基本功.基本功紮實內功深厚學習才更效率

4樓:木欣

首先說下我自己的學習過程。剛開始是學校老師教庫函式入門的,後來又跟著野火教程把常用外設學完,最後花了幾天學習正點原子的暫存器版本。

其實庫函式本質上就是操作暫存器,只是它為了可讀性更高而犧牲了一些效率。不過現在微控制器的速度都已經越來越快,這點效率其實無傷大雅。

在我學習暫存器那幾天,我才覺得真正意義上了解了微控制器。記得SysTick的函式在標準庫V3.50版本中是沒有的,全部操作暫存器搞定。

其實到目前為止,我還是暫存器和庫函式混合程式設計的。對於BSP層的函式,只需要執行一次,慢一點就慢一點,庫配合巨集可以增加可移植性,或者直接用cubeMX生成。而對於需要經常被呼叫的函式,全部使用暫存器操作+位帶操作的形式封裝,增加程式效率,甚至可以內嵌彙編。

總的來看,暫存器需要學習,在需要暫存器操作的時候能操作即可。

5樓:是懶陽陽啊

你應該感謝你的老師。在所有的嵌入式學習中,最本質的還是對暫存器的操作。通過學習暫存器,你會很容易掌握一款晶元的結構,而且出錯後更容易查詢錯誤的原因。

而庫函式是為了快速開發而編寫的基於暫存器的函式庫。它隱藏了暫存器的讀寫操作,便於學習,而缺點是不同型號的晶元庫函式不同,當移植錯晶元版本的庫後,很容易造成晶元的鎖死。如果為了應用,可以選擇庫函式,若是想更好的學習,還是學習暫存器吧,這樣你會開啟一扇新的大門。

6樓:「已登出」

暫存器比較穩定,庫函式版本大多引數封裝了,多個函式可能重複使用某乙個暫存器,造成程式錯誤,而且,一般檢查不出來。。。多個函式一同使用很容易被庫函式坑,尤其是剛剛脫離初學者階段,有一些基礎,但是基礎不紮實的學生,基礎紮實熟練的老鳥無所謂暫存器還是庫函式,不過是兩種方式,都類似,但對於菜鳥,資料位置這些,使用的硬體,都應納入考慮中,

7樓:茅時雨

如果把微控制器的外設比作乙個黑盒,老師會希望你把這個黑盒拆開看看,了解這個黑盒裡面是什麼樣子,讓你從內部去除錯,所以會用更底層的暫存器。而如果只是愛好者,並不需要把這個黑盒拆開看,只要知道黑盒外面的輸入,輸出和開關有什麼作用就行了。

庫函式就相當於乙個盒子,把暫存器包在裡面,而外面只保留了輸入介面,輸出介面和一些用於配置的開關,有了庫函式,可能開發者都不需要了解這個微控制器的暫存器裡面每一位有什麼用,只要像編win32程式那樣去寫微控制器就可以使用,降低了學習微控制器的門檻。你要知道,使用微控制器的不一定有相關的專業知識,降低門檻更利於微控制器的推廣。

8樓:A3駕照的老司機

從老師的觀點上來看其實是有道理的。

之前忘了在哪看到的,大學和職業學校的區別在於乙個告訴你工具和技術的原理,乙個告訴你工具和技術的使用方式。

學習暫存器能夠讓你一定程度上接觸到微控制器的技術原理。從大學的角度上是沒有問題的。

但!是!

入門就讓人學怎麼使用暫存器版本未免太強人所難了......

以我的角度和體驗來看,使用庫函式成功入門之後如果還對微控制器的原理抱有很大興趣,再去學暫存器是個不錯的選擇。

一開始就學暫存器...太勸退了...

9樓:

學過51微控制器嗎?要是學過,那對於暫存器的就有一定的概念了。

學過stm32嗎?要是沒有學過,建議學習cubemx軟體,簡單上手,讓你最快入門。不用擔心因為各種初始化配置出錯,把片上的資源都學會使用了。

再結合hal庫的原始碼,結合硬體,手冊什麼的,去仔細研究各種暫存器。這樣做好處就是,同樣功能,自己已經用c語言完成了,再去學暫存器,你會更有自信。根據乙個個模組化的配置,找到相應的暫存器,這樣學習也有效率。

個人體會。

10樓:Flipped

說明用暫存器版本開發的人少。第一點工作講究高效率,做最少的事,實現更多的功能,這就是各種庫出現的原因。第二點,記得微控制器課程名稱叫做微控制器原理與應用吧。

重點在於原理,微控制器有千種萬種,原理都差不多。

短時間看,第一次接觸微控制器也可以方便的實現幾個簡單應用(遇到幾個坑),從長時間看你的職業生涯不只是接觸一種微控制器,一種庫,不懂微控制器的工作方式幾個坑就會乘n。

11樓:

暫存器版本,正點原子好像出過乙個pdf和一堆例程,不算少見。

深入研究驅動,當然用暫存器。只是為何不用51學暫存器程式設計,stm32過於複雜,做應用效率低。

12樓:

STM32暫存器設定很複雜,剛開始學直接上暫存器學習曲線太陡峭,學STM32有兩個難關,乙個是不用任何輔助工具和模板,自己配置乙個工程,乙個是第乙個程式。我不止乙個同學因為工程配置不對而放棄學習,也不止乙個同學剛開始程式非得用暫存器寫,最後一些太複雜的程式因為剛開始學怎麼也不成功而放棄。先用起來再深入學是乙個比較好的選擇,這樣不斷的成功激勵會讓你不斷的學下去。

我自己用的感覺是初始化可以用庫,這樣既方便又可靠,而且STM32的庫並不是完全傻瓜式的庫,它需要你知道要配置什麼,每個配置要什麼引數,配置結構體保證了你不多配,不少配,不錯配,庫只是幫你把暫存器的0和1給巨集定義化了;一些頻繁操作的內容,如串列埠傳送,ADC,DAC讀取等等操作用暫存器,這樣效率高。

13樓:purewater1

庫函式本質上也是操作暫存器,就是用正常人類好理解的函式名封裝一下。比如配置stm32的adc,你對著暫存器手冊一步一步來和用標準庫一點點弄本質上是一樣的。至少對我來說,學暫存器很枯燥無聊,但凡是暫存器的書都看不下去,那東西不就是背背背嗎,我想實現個功能還要對著暫存器一步一步來,心態就崩了。

而且微控制器這東西都乙個鬼樣子,gpio,中斷,定時器,串列埠這四樣明白了基本就算掌握50%的微控制器,何苦想那麼多,怪累的。

14樓:張明後

工程師講究出活快,老師學生講究完全搞懂,

但st廢了半天勁給你搞出hal層,就是解放你的雙手,髒活累活他們全乾了,你去搞搞片上rtos和演算法不好嗎?

當然,搞搞暫存器還是可以加深學生對於微控制器的理解,但我還是認為有限而已。

因為arm系列不比經典微控制器,需要配置的地方太多了,學生很容易陷入和糾結於各種細節中無法自拔。

沒必要真的沒必要。有這段時間你應該畫個開發板,焊接點外設,移植個系統,最後用這塊板子親自搞幾個有趣的專案,這才算是嵌入式入門了吧!

15樓:雙人餘

正點原子還有野火都有對應庫的暫存器版本。相對庫比較流行的原因是用庫的人比較多。

老師要求學習暫存器版本是可能是為了讓你更了解stm32的暫存器配置方法,畢竟庫函式也是在底層配置暫存器,包括用庫來寫程式除錯的時候還是使用暫存器。不過以後不搞嵌入式的話只是搞比賽或者做點組裡的打雜專案,建議用庫吧。尤其是有些人覺得效率低的hal庫,其實挺好的。

結合stm32cube應付比賽可以快速上手。

16樓:巧學.h

學習庫還是學習暫存器呢?庫是ST官方提供的,他們提供這個的目的就是為了降低使用者開發產品的週期,這樣使用者才能在有了創業之後快速開發出自己的產品並占領市場。

當然,不是說暫存器開發不快,對於熟手來說暫存器開發也很快,但是畢竟暫存器開發你要對晶元本身的暫存器特別了解,總不能每用乙個暫存器就去找手冊吧。

所以說明確自己的目的,是為了做東西出來,解決市場的痛點,而解決這個問題的方式有兩種,那我自然選擇怎麼快怎麼來唄。

比如我要做乙個汽車,那我總不能自己造輪子,對我而言最快的可能是自己設計好這個汽車的整體指標、效能、然後去找各個汽車零部件供貨商制定自己需要的零配件,然後把他們組裝起來就可以了。

用STM32只會庫函式,不會用暫存器,有影響嗎?

rundstedt 如果你用過其他微控制器,有操作暫存器的底子,那麼直接用庫函式好了,沒有任何影響。如果STM32是你使用過的第一種微控制器,還是了解一下暫存器操作,我記得庫函式進入main之前要操作RCC暫存器選擇合適你的時鐘源的,把那部分理解清楚好一些。如果對暫存器的概念一竅不通的話,debug...

stm32的通用定時器應用於什麼場合?

伊韜 剛下飛船。定時器在STM32中算是相對複雜一點的模組。一般會分成高階定時器,通用定時器,基本定時器。個別晶元會有電機專用定時器。通用定時器能滿足絕大部分的應用場景。除了用於定時外,還可以利用其輸入捕獲通道進行脈衝計數,也可以用輸出比較 PWM 單脈衝模式,進行脈衝輸出。先說輸入捕獲。這裡就是用...

請問stm32的底層驅動是什麼意思,需要學習那些知識?

無趣的人 誠然,正點原子和野火對國內stm32的推廣起到了很大的作用。但不得不說,要是真想學驅動開發建議直接上arm,用Linux來搞。實際編寫編譯鏈結過程你都能清清楚楚。我不是瞧不起Keil和mdk,我自己也用了四年。因為太方便了,所以一些底層的東西你不會接觸到。想學驅動,還是要學會看晶元手冊和原...