XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

0 賣盤信息
BOM詢價(jià)
您現(xiàn)在的位置: 首頁(yè) > 電子資訊 >基礎(chǔ)知識(shí) > 如何學(xué)stm32單片機(jī)?STM32單片機(jī)學(xué)習(xí)筆記?

如何學(xué)stm32單片機(jī)?STM32單片機(jī)學(xué)習(xí)筆記?

來(lái)源:
2024-01-09
類別:基礎(chǔ)知識(shí)
eye 17
文章創(chuàng)建人 拍明芯城

  為什么學(xué)習(xí)STM32?

  先列舉一下大家問(wèn)得最多的幾個(gè)問(wèn)題,然后我們一起由問(wèn)題切入進(jìn)行一些討論。

  首先問(wèn)題1:我是單片機(jī)好還是直接學(xué)STM32好呢?

  答:1)首先我們談下目的,你學(xué)習(xí)的最終目的是能夠開發(fā)產(chǎn)品或者成為項(xiàng)目經(jīng)理;而目前市場(chǎng)上的單片機(jī)都基本用C語(yǔ)言了,用匯編進(jìn)行開發(fā)的項(xiàng)目已經(jīng)非常少了

1.png

  2)在硬件接口這個(gè)環(huán)節(jié)上都一樣:學(xué)51單片機(jī)和學(xué)STM32都是一樣的,主要看其市場(chǎng)上的資料是不是足夠充分,都是調(diào)用硬件的接口,控制I/O,完成相應(yīng)的功能

  3)在軟件這個(gè)環(huán)節(jié)上,STM32要強(qiáng)過(guò)51單片機(jī):為什么這么說(shuō)呢?學(xué)STM32它自帶一個(gè)官方的庫(kù),而這個(gè)庫(kù)的源代碼是開放的;而51單片機(jī)卻沒(méi)有,也就說(shuō),當(dāng)你做一個(gè)具體項(xiàng)目的時(shí)候,用STM32開發(fā)項(xiàng)目速度會(huì)比用51單片機(jī)要輕松快捷,方便,并且BUG也少。

  4)ST的這個(gè)庫(kù)專門是由ST官方團(tuán)隊(duì)打造的,是經(jīng)過(guò)詳細(xì)認(rèn)真測(cè)試過(guò)的,例如:你要做處理器支持USB的U盤功能,對(duì)51來(lái)說(shuō),你可能需要在網(wǎng)上去找這樣一個(gè)驅(qū)動(dòng),然后移植到51單片機(jī)上,這樣的缺點(diǎn)是:移植本身就比較累,比較麻煩,并可能有些代碼不一定經(jīng)過(guò)驗(yàn)證了的,很難保證沒(méi)有BUG;而STM32是官方推薦的庫(kù)源代碼,這些功能早就有了,所以用STM32開發(fā)項(xiàng)目做起來(lái)非常的輕松,愉快,放心,BUG也少。

  5)從選型方面考慮:STM32的性價(jià)比與單片機(jī)相比,雖說(shuō)單片機(jī)很便宜了,一般市場(chǎng)上就5塊錢左右,而STM32便宜的是10元多一點(diǎn),但是如果比性價(jià)比,STM32還是很要強(qiáng)過(guò)51單片機(jī)很多,為什么呢?因?yàn)槭紫萐TM32是72MHZ的主頻,而51單片機(jī)是10多M,隨著未來(lái)產(chǎn)品功能增多了,要求越來(lái)越高,可能51單片機(jī)的速度和性能就滿足不了需求,而STM32足夠強(qiáng)勁的主頻,可以延緩這個(gè)問(wèn)題,使得您的產(chǎn)品周期生命得到延長(zhǎng),而且你有其他新需求也可以靈活增加上來(lái),因?yàn)镾TM32完全有能力負(fù)擔(dān)得起。

  問(wèn)題2:STM32如何才能快速入門?

  答:首先就是最好具備基本的電子基礎(chǔ),如果您只有純軟件基礎(chǔ),那就應(yīng)該打扎實(shí)C語(yǔ)言基礎(chǔ),然后弄一塊開發(fā)板,邊學(xué)邊補(bǔ)充硬件電子方面的知識(shí)。

  因?yàn)檐浖尘叭ダ碚摰膶W(xué)硬件,那是非常枯燥的事情,而且效果也不一定理想;那么此時(shí)你就需要一款比較的板子,板子大與小,功能多與少都不是那么重要,這里最重要的就是要資料豐富,資料豐富,才是最好的;我當(dāng)時(shí)就從同事那里弄了一塊STM32神舟系列的板子,大概花了1,2個(gè)星期就正式入門了。以下是我摘抄的關(guān)于那個(gè)板子的一些特點(diǎn),大家可以看看:

  特點(diǎn)1:STM32神舟系列的每款開發(fā)板都有一個(gè)非常詳細(xì)的幾百頁(yè)的說(shuō)明手冊(cè)。有很多愛好者反映,買到的開發(fā)板沒(méi)有手冊(cè)或手冊(cè)不全,手冊(cè)不詳細(xì),拿到手后沒(méi)有什么用,無(wú)從下手,那么您可以考慮STM32神舟系列的開發(fā)板,其中神舟IV號(hào)的手冊(cè)有將近700多頁(yè)之多,無(wú)論還是從原理還是從代碼都是非常值得閱讀的資料書籍。

  STM32如何才能快速入門?

  特點(diǎn)2:開發(fā)板所帶的例程代碼非常好,易懂和方便移植。很多開發(fā)板的代碼寫得很難閱讀,不規(guī)范,有的甚至是用寄存器實(shí)現(xiàn)的代碼,可讀性非常差,并且不容易重用到新的實(shí)際項(xiàng)目中,而STM32神舟系列的開發(fā)板,全部用ST的專用庫(kù)實(shí)現(xiàn),庫(kù)代碼全部開源,庫(kù)即是將底層寄存器部分代碼全部封裝成函數(shù),融入了軟件設(shè)計(jì)的架構(gòu)理念,想跟蹤到硬件實(shí)現(xiàn)的驅(qū)動(dòng)底層,就跟進(jìn)對(duì)應(yīng)的函數(shù)即可看到一切原始代碼,所以您可以有選擇的想看寄存器版本就看寄存器版本,想看函數(shù)庫(kù)版本就有函數(shù)庫(kù)版本,無(wú)論對(duì)實(shí)際項(xiàng)目也好,針對(duì)學(xué)習(xí)也好,兩全其美!!!

  特點(diǎn)3:神舟系列板子因?yàn)橄盗腥?,所以技術(shù)支持以及技術(shù)進(jìn)一步拓展空間大。許多單獨(dú)的開發(fā)板技術(shù)支持根本不行,有的就算是技術(shù)支持不錯(cuò),但是你想更深入一步去學(xué)習(xí),就很難了;而成一個(gè)完整系列的STM32神舟系列是值考慮和選擇的,因?yàn)樵撓盗邪?03RBT,VCT,VET,ZET,以及107VCT,207,4XX系列等多個(gè)系列的開發(fā)板,無(wú)論你先學(xué)難,再拖展知識(shí)面,還是怎么樣都好,絕對(duì)不怕資料少!沒(méi)資料!!!而且各個(gè)系列之間還可以相互借鑒,相互依存,各個(gè)設(shè)計(jì)的高手非常多,大家一起相互交流,產(chǎn)生更多更新碰撞和資料。

  特點(diǎn)4:硬件資料豐富。硬件資源以及相關(guān)資料都比同類開發(fā)板要多很多,因?yàn)樵撓盗惺且粋€(gè)組織在維護(hù)和發(fā)展,并不是單獨(dú)的個(gè)人愛好所設(shè)計(jì)的板子,這個(gè)組織走在最前沿,不斷收集行業(yè)內(nèi)的知識(shí),在神舟系列上進(jìn)行驗(yàn)證和實(shí)現(xiàn),所以資料也會(huì)越來(lái)越多。

  特點(diǎn)5:板子的網(wǎng)絡(luò)接口特別加強(qiáng)。許多STM32開發(fā)板沒(méi)有考慮到網(wǎng)口這塊以及無(wú)線2.4G(WIFI)和315M通信的例程,隨著嵌入式設(shè)備在網(wǎng)絡(luò)方面日益普及,以太網(wǎng)以及無(wú)線網(wǎng)都是嵌入式設(shè)備中必不可少的一個(gè)環(huán)節(jié),就算有的嵌入式設(shè)備不需要網(wǎng)口,但是做為提供開發(fā)板的設(shè)計(jì),不可不考慮加強(qiáng)網(wǎng)口這塊的例程,代碼,講解,為各個(gè)開發(fā)愛好者做一個(gè)提前準(zhǔn)備和設(shè)計(jì),而這些接口神舟系列有已經(jīng)直接運(yùn)行的代碼以及詳細(xì)的講解,大家獲得相關(guān)資料,相互參考一下。

  問(wèn)題3:為什么是STM32呢?為什么不是ARM9,ARM11呢?

  答:這里有個(gè)誤區(qū),很多同學(xué)如果就僅僅希望入門嵌入式,那就盡量不要選擇ARM9和ARM11,為什么呢?因?yàn)檎T惑太多了,因?yàn)槟阋坏┻x擇ARM9或 ARM11,那么這個(gè)平臺(tái)就僅僅linux和wince等操作系統(tǒng)內(nèi)核,驅(qū)動(dòng),應(yīng)用,各種協(xié)議,硬件原理圖,等都有夠?qū)W一年半載了,沒(méi)這點(diǎn)時(shí)間,你無(wú)法完全掌握,所以并不適合入門,周期太長(zhǎng),難度相對(duì)來(lái)說(shuō)較大。

  為什么是STM32呢?為什么不是ARM9,ARM11呢?

  入門最好選擇主頻低一點(diǎn)的處理器,一切都是先掌握好原理,弄明白,弄透徹了,一切就都好辦!所以單片機(jī)中,STM32是目前最最主流的芯片,加上目前 STM32的資料非常的多,所以,最好還是推薦STM32的開發(fā)板做為入門級(jí)的板子,學(xué)會(huì)之后,即可自己獨(dú)立開發(fā)出各種產(chǎn)品,STM32官方提供的開源代碼庫(kù)也是非常好用,將底層的各種匯編,管腳定義都封裝成了各個(gè)功能函數(shù),開發(fā)起來(lái)非常方便,快捷!

  20年的嵌入式經(jīng)驗(yàn)分享學(xué)習(xí)——來(lái)自STM32神舟系列開發(fā)板設(shè)計(jì)師的總結(jié)

  首先,如果你有幸看到這篇文章,千萬(wàn)不要試圖在2個(gè)小時(shí)內(nèi)閱讀完,就算你2個(gè)小時(shí)閱讀完,我相信你也不會(huì)理解里面講解的精華之處,我相信,你應(yīng)該將此文章,慢慢品嘗,這絕對(duì)是一篇需要品嘗2~3天,再結(jié)合自己過(guò)往的經(jīng)驗(yàn),加上自己的思考,我相信會(huì)對(duì)你不僅僅是技術(shù)能力,甚至包括整體的思維方式都會(huì)有一個(gè)非常大的提高。

  結(jié)合這篇文章,再結(jié)合STM32神舟系列開發(fā)板一些學(xué)習(xí),可能會(huì)更加加深對(duì)嵌入式概念的理解。

  我寫這篇文章的目的,是用本人20年的嵌入式經(jīng)驗(yàn)呈現(xiàn)給大家一副完整的產(chǎn)品,項(xiàng)目開發(fā)藍(lán)圖,用本人多年經(jīng)的歷總結(jié)了一些教訓(xùn)無(wú)私的分享給各位,希望各位今后能站在本人的肩膀之上,少走彎路,多為公司,為個(gè)人多做貢獻(xiàn),那我的愿望就達(dá)到了,也同時(shí)希望能看到大家反饋和回復(fù),留個(gè)腳印,留下你的見解和智慧,為后人乘涼打點(diǎn)基礎(chǔ),先在這謝謝各位了。

  那么由此開始我們充滿知識(shí)的旅程吧,最重要的一點(diǎn),就是在一個(gè)產(chǎn)品或項(xiàng)目的開發(fā)過(guò)程中,如果沒(méi)有明確的目標(biāo),那么成功將無(wú)從談起,做任何事的第一步必須明確目標(biāo)。

  與日常生活中的大多數(shù)事務(wù)一樣,設(shè)計(jì)一個(gè)嵌入式產(chǎn)品的過(guò)程也必須從確定目標(biāo)開始,對(duì)生產(chǎn)的產(chǎn)品進(jìn)行明確定義。對(duì)產(chǎn)品進(jìn)行定義主要是對(duì)產(chǎn)品是什么和能有什么功能進(jìn)行描述,其次是在我們的整個(gè)開發(fā)過(guò)程中,應(yīng)該要撰寫一些開發(fā)文檔,大概的框架的如下:

  1)產(chǎn)品需求文檔:描述產(chǎn)品的特性

  2)功能需求文檔:描述產(chǎn)品必須具備的功能

  3)工程說(shuō)明文檔:描述系統(tǒng)實(shí)現(xiàn)的方法和滿足需求的手段

  4)硬件說(shuō)明文檔:對(duì)有關(guān)硬件進(jìn)行描述

  5)軟件或固件說(shuō)明文檔:描述特定處理器下設(shè)計(jì)微程序以及固件的方法

  6)測(cè)試說(shuō)明文檔:描述必須測(cè)試的項(xiàng)目和驗(yàn)證系統(tǒng)正常運(yùn)行的方法

  1.需求定義

  需求定義用來(lái)描述產(chǎn)品的基本功能,對(duì)于公司來(lái)說(shuō),需求一般由該公司的市場(chǎng)銷售部門或該公司的主要客戶來(lái)制定;而對(duì)小公司或愛好者,技術(shù)人員可以自己負(fù)責(zé)定義需求,并撰寫成文檔;對(duì)于STM32神舟系列開發(fā)板來(lái)說(shuō),主要就是提供各種接口,為大家開發(fā)產(chǎn)品時(shí)提供借鑒!

  通常需求定義是圍繞以下幾個(gè)因素而來(lái):

  1)系統(tǒng)的用途(定義需要系統(tǒng)實(shí)現(xiàn)的各種功能)

  2)實(shí)際輸入輸出是何種方式實(shí)現(xiàn)的(為元器件的選型做參考)

  3)系統(tǒng)是否需要操作界面(涉及軟件層操作系統(tǒng)的選型)

  其實(shí)對(duì)小型的嵌入式產(chǎn)品來(lái)說(shuō),定義需求是非常關(guān)鍵的,因?yàn)樾枨笄宄?,就可以避免后續(xù)開發(fā)過(guò)程中出現(xiàn)的諸如隨機(jī)存儲(chǔ)器(RAM)容量不足或所選的CPU速度不能滿足處理的需要等一系列問(wèn)題。

  下面舉個(gè)簡(jiǎn)單的實(shí)際例子,供大家來(lái)參考:

  系統(tǒng)描述:用于從化溫泉的水泵換水系統(tǒng)(用STM32神舟III號(hào)開發(fā)板模擬實(shí)現(xiàn))

  電源輸入:使用來(lái)自于變壓器的9V~12V直流電

  水泵功率:375W

  1)使用單相交流電機(jī),由機(jī)械電氣進(jìn)行控制

  2)如果溫泉池處于低水位,則輸入開關(guān)閉合信號(hào),以禁止水泵繼續(xù)運(yùn)行

  3)用戶可以自由設(shè)置水泵運(yùn)行或關(guān)閉的時(shí)間長(zhǎng)度

  4)除了自動(dòng)設(shè)置控制外,還需要提供一種人工裝置來(lái)允許維護(hù)人員靈活控制水泵進(jìn)行維修

  5)水泵開啟/關(guān)閉/人工干預(yù)的時(shí)間可以30分鐘為單位,在30分鐘到23小時(shí)的范圍內(nèi)進(jìn)行調(diào)節(jié)

  6)顯示設(shè)備可以指示水泵的開關(guān)狀態(tài),剩余時(shí)間,以及水泵是否處于人工干預(yù)模式

  7)具備監(jiān)視低水位的功能,并顯示在屏幕上

  如果需要商用,那么除了上面給出的功能要求外,其設(shè)計(jì)文檔中還要包括電磁干擾(EMI)和電磁兼容性(EMC)認(rèn)證、安全認(rèn)證以及使用環(huán)境(包括環(huán)境溫度、濕度、鹽霧腐蝕等)等方面的需求。

  實(shí)際上,以上的需求確定之后,接下來(lái)就是要考慮選擇一款合適的CPU來(lái)滿足和實(shí)現(xiàn)系統(tǒng)的功能,那么我們就要將上述7點(diǎn)用戶能夠理解的需求轉(zhuǎn)化成我們專業(yè)領(lǐng)域的需求,轉(zhuǎn)化如下,大家可以參考一下:

  a.處理或更新輸入輸出信號(hào)的速率究竟需要多快?

  解釋:目前嵌入式處理器的主頻一般都在幾十兆到幾百兆不等,單片機(jī)的主頻一般是幾十兆,STM32神舟系列開發(fā)板的CPU都是72MHZ,有的 ARM9,ARM11處理器可以到幾百兆;我們主要看這個(gè)產(chǎn)品是否需要對(duì)大量數(shù)據(jù)進(jìn)行處理,或是否需要對(duì)緩沖區(qū)進(jìn)行頻繁操作,是否有類似的占用CPU資料的工作要做,這就決定我們要選擇一款合適的處理器來(lái)讓該產(chǎn)品得到最佳的性能。

  b.是否可使用單片集成電路(專用IC)或FPGA來(lái)完成數(shù)據(jù)處理?

  解釋:如果可以的話,就不一定要選擇處理器來(lái)做,用這些專業(yè)芯片就能替代

  c.系統(tǒng)是否有大量的用戶輸入輸出操作(如對(duì)開關(guān)和顯示設(shè)備進(jìn)行頻繁操作)?

  解釋:如果有的話,要在處理器選型的時(shí)候考慮這些因素,選擇一款能夠滿足以上要求的CPU.

  d.系統(tǒng)與其他外部設(shè)備之間需要使用何種接口?

  解釋:這也是需要評(píng)估處理器的一個(gè)關(guān)鍵問(wèn)題,選擇具備這些接口功能的處理器會(huì)方便于我們的電路設(shè)計(jì)以及軟件編程

  e.設(shè)計(jì)完成后是否有可能需要進(jìn)行改動(dòng),或在設(shè)計(jì)過(guò)程中系統(tǒng)需求是否可能出現(xiàn)變化?我們的設(shè)計(jì)是否能適應(yīng)系統(tǒng)需求的變化?

  解釋:要避免選擇的處理器剛好滿足當(dāng)前要求,這樣當(dāng)以后事務(wù)要求逐漸提高,處理器性能如果還有一定空間的話,那么就可以重用目前的產(chǎn)品;第二個(gè)就是要選擇不會(huì)即將停產(chǎn)的芯片,很多處理器用得很廣乏,可以借鑒的資料也很多,但是很可能這款芯片已經(jīng)在市場(chǎng)上流行很長(zhǎng)時(shí)間了,芯片廠商已經(jīng)推出更新?lián)Q代的替代品了,如果你選擇了這款芯片,很可能1,2年后就買不到這款處理器芯片了,導(dǎo)致不得不重新選擇新的處理器,重新設(shè)計(jì)產(chǎn)品,這樣的既耗費(fèi)時(shí)間,金錢,更消耗人力,延誤市場(chǎng)的戰(zhàn)機(jī)。

  2.處理器的選擇

  2.1.需要使用的I/O管腳數(shù)量

  多數(shù)處理器都是使用內(nèi)存和外部管腳來(lái)控制輸入輸出設(shè)備的,通常處理器都會(huì)有內(nèi)置ROM和RAM的,如果內(nèi)置的內(nèi)存就已經(jīng)滿足需要,那么處理器就可以節(jié)省產(chǎn)生引用外部存儲(chǔ)器信號(hào)的引腳,這樣處理器可為輸入輸出提供較多的設(shè)備管腳(某些處理器支持外部RAM或ROM的使用,但對(duì)外部存儲(chǔ)器進(jìn)行訪問(wèn)時(shí),處理器一般需要占用8條到10條I/O管腳)。

  還有,有些處理器帶有專用的內(nèi)部定時(shí)時(shí)鐘,這類時(shí)鐘也需要使用一個(gè)端口管腳來(lái)實(shí)現(xiàn)某些定時(shí)功能;某些處理器中還具有漏極輸出和高電流輸出能力,可以方便的直接驅(qū)動(dòng)繼電器或電磁鐵線圈,而不再需要額外驅(qū)動(dòng)硬件的支持。

  當(dāng)對(duì)處理器I/O管腳進(jìn)行計(jì)數(shù)時(shí),我們一定要把使用處理器內(nèi)部功能(如串行接口和定時(shí)器等)時(shí)限制使用的某些管腳考慮在內(nèi)。

  2.2.需要使用的接口數(shù)量

  嵌入式處理器的主要功能是與應(yīng)用環(huán)境中的硬件進(jìn)行交互操作,這不僅需要外部硬件對(duì)接口具有實(shí)時(shí)處理能力,而且還要求處理器必須以足夠快的速度對(duì)接口數(shù)據(jù)進(jìn)行有效處理。

  舉例來(lái)說(shuō),STM32神舟系列開發(fā)板的CPU是ST公司出品的一款工業(yè)級(jí)微處理器,它基于CORTEX M3的核心,處理主頻可達(dá)72MHZ,同時(shí)處理器內(nèi)部配置了USB、SPI、IIC等接口,像STM32神舟IV號(hào)的107處理器還支持Ethernet 等輸出接口,其目的是更方便的利用這些接口開發(fā)出嵌入式產(chǎn)品。

  需要注意的是,由于許多處理器具有的局限性沒(méi)有在處理器技術(shù)資料中給予足夠的說(shuō)明,因此一定要仔細(xì)閱讀處理器的指標(biāo)說(shuō)明。例如,在閱讀資料的過(guò)程中發(fā)現(xiàn),該資料可能會(huì)說(shuō)明其串行接口可以在最高波特率下工作,但仔細(xì)研究該處理器的指標(biāo)數(shù)據(jù)時(shí),可能會(huì)發(fā)現(xiàn)并非該串口接口的所有操作模式都可以在最大波特率下運(yùn)行。

  深入了解并明確接口要求的方法:可以自己動(dòng)手編寫一些程序來(lái)對(duì)接口進(jìn)行實(shí)際測(cè)試,以確認(rèn)某種處理器是否可以滿足應(yīng)用的要求;因?yàn)?,確認(rèn)某個(gè)處理器是否可以滿足接口要求并非是一件簡(jiǎn)單的任務(wù)。

  2.3.需要使用的內(nèi)存容量

  決定內(nèi)存容量的大小是嵌入式產(chǎn)品設(shè)計(jì)過(guò)程中的一個(gè)基本步驟,如果對(duì)所需內(nèi)存容量估計(jì)過(guò)高,那么我們就有可能會(huì)選擇成本較高的解決方案;反之,如果低估了所需內(nèi)存容量,就有可能因系統(tǒng)需要重新設(shè)計(jì)而導(dǎo)致項(xiàng)目不能按時(shí)完工。

  a.RAM和ROM的區(qū)別:存儲(chǔ)器分為隨機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)兩種。其中ROM通常用來(lái)固化存儲(chǔ)一些生產(chǎn)廠家寫入的程序或數(shù)據(jù),用于啟動(dòng)電腦和控制電腦的工作方式。而RAM則用來(lái)存取各種動(dòng)態(tài)的輸入輸出數(shù)據(jù)、中間計(jì)算結(jié)果以及與外部存儲(chǔ)器交換的數(shù)據(jù)和暫存數(shù)據(jù)。設(shè)備斷電后,RAM中存儲(chǔ)的數(shù)據(jù)就會(huì)丟失。

  b.隨即存儲(chǔ)器(RAM)的選擇:RAM容量的預(yù)測(cè)是比較直觀的,我們只需把所有變量數(shù)目與所有內(nèi)部緩沖區(qū)的容量以及先入先出(FIFO)隊(duì)列長(zhǎng)度和堆棧長(zhǎng)度直接相加,就能得到所需RAM容量的總數(shù)。

  如果所需內(nèi)存容量超出這類處理器的尋址范圍,那么只能通過(guò)增加外部RAM來(lái)滿足需求;然而,增加外部RAM的同時(shí)將會(huì)占用一定數(shù)量的I/O管腳來(lái)對(duì)擴(kuò)展內(nèi)存進(jìn)行尋址,這種擴(kuò)展往往會(huì)影響到處理器來(lái)實(shí)現(xiàn)應(yīng)用的初衷。

  需要注意的一個(gè)問(wèn)題是,某些微處理器限制RAM的使用,這種限制的目的是為了借用部分內(nèi)存存儲(chǔ)器作為內(nèi)部寄存器組使用。除了以上因素外,所使用的開發(fā)語(yǔ)言也對(duì)所需RAM容量有一定的影響,某些效率較低的編譯程序可能會(huì)占用大量寶貴的RAM空間。

  c.只讀存儲(chǔ)器(ROM)的選擇:系統(tǒng)所需ROM的大小應(yīng)該是系統(tǒng)程序代碼與所有基于ROM的數(shù)據(jù)表容量之和。預(yù)測(cè)所需ROM空間容量比較困難的部分是預(yù)測(cè)程序代碼的長(zhǎng)度,解決這類問(wèn)題的方法只能是隨著經(jīng)驗(yàn)的逐步積累來(lái)提高預(yù)測(cè)精度。

  然而,最重要的并不是精確計(jì)算程序的代碼長(zhǎng)度,而是要清楚地估算代碼長(zhǎng)度的上限。根據(jù)經(jīng)驗(yàn),如果80%的ROM空間被代碼占用的話,那么就太擁擠了,除非能確保系統(tǒng)需求不會(huì)有任何變化,否則至少要為可能發(fā)生的變化保留足夠的備用ROM空間。

  在多數(shù)情況下,我們可以試著在ROM中寫入一部分程序代碼,以便觀察代碼占用空間的情況,對(duì)于帶有內(nèi)部ROM的微處理器系統(tǒng)來(lái)說(shuō),系統(tǒng)程序都只能占用有限的程序存儲(chǔ)器空間。

  d.經(jīng)驗(yàn)之談:ROM與RAM使用情況相類似,程序代碼長(zhǎng)度與所選用的開發(fā)語(yǔ)言有關(guān)。舉例來(lái)說(shuō),使用匯編語(yǔ)言編制的程序要比使用C語(yǔ)言編制的程序占用少得多的空間。

  對(duì)于追求低成本的小型系統(tǒng)來(lái)說(shuō),一般不提倡使用高級(jí)程序設(shè)計(jì)語(yǔ)言;這是因?yàn)殡m然高級(jí)語(yǔ)言在使用、調(diào)試以及維護(hù)方面來(lái)的比較容易,但同時(shí)這類語(yǔ)言需要占用更多的內(nèi)存空間和大量的處理器時(shí)鐘周期。

  如果開發(fā)語(yǔ)言選擇不當(dāng),其后果可能是把一個(gè)簡(jiǎn)單、低成本的單片機(jī)系統(tǒng)變?yōu)橐粋€(gè)需要使用配置若干兆字節(jié)RAM空間的64位嵌入式處理器系統(tǒng)。

  2.4.需要使用的中斷數(shù)量

  中斷的主要用途是向中央處理器通報(bào)當(dāng)前發(fā)生的某類特殊事件,這類事件包括諸如定時(shí)器超時(shí)事件、硬件引發(fā)的事件等。

  需要強(qiáng)調(diào)的是,多數(shù)系統(tǒng)設(shè)計(jì)師經(jīng)常過(guò)多地使用中斷功能,實(shí)際上,中斷的主要作用只是中斷現(xiàn)行程序的執(zhí)行,中斷最適用于必須要求中央處理器立即提供服務(wù)的事件。

  在需要設(shè)計(jì)和使用中斷的情況下,一定要首先確認(rèn)實(shí)際需要的中斷數(shù)量,然后必須考慮到系統(tǒng)內(nèi)部占用的中斷資源,如果需要使用的中斷資源超出了處理器可以接收的中斷數(shù)量,我們就應(yīng)借助于某些特殊手段來(lái)減少所需中斷信號(hào)的數(shù)量。

  2.5.實(shí)時(shí)處理方面的考慮

  實(shí)時(shí)處理是一個(gè)涉及范圍很廣的題目,其主要內(nèi)容與系統(tǒng)的處理速度有密切聯(lián)系,實(shí)時(shí)事件是嵌入式微處理器需要關(guān)注的主要任務(wù)。

  例如:處理器跟串口進(jìn)行通信時(shí),通常通過(guò)上層軟件(為了保證實(shí)時(shí)性,進(jìn)行任務(wù)切換的時(shí)間足夠短),然后再占用處理器去執(zhí)行從串口拿數(shù)據(jù)的任務(wù),并且要保證處理器的速率比串口速率快,那么處理器可以以最快的速度反應(yīng)并處理串口的相關(guān)的任務(wù),這樣就可以達(dá)到最大的實(shí)時(shí)性;

  另一方面,如果處理器本身就內(nèi)置了串口控制器、或DMA、或LCD的控制器等,那么它就可以保證直接使用這些處理器內(nèi)置的接口去控制串口、液晶屏等對(duì)象,以達(dá)到最大的實(shí)時(shí)性能。

  2.6.該廠商是否提供好的開發(fā)工具和環(huán)境

  選擇一款新的處理器,很可能就要使用一個(gè)新的開發(fā)工具和開發(fā)環(huán)境,包括軟件的編譯環(huán)境等;對(duì)于開發(fā)日程安排比較緊張的項(xiàng)目來(lái)說(shuō),開發(fā)人員往往無(wú)法抽出專門的時(shí)間來(lái)研究,熟悉新的開發(fā)工具,從而也無(wú)法全面掌握開發(fā)工具的使用技巧。

  并且,有的開發(fā)工具價(jià)格也比較昂貴,而且很可能只能從制造商那里購(gòu)買,還有仿真工具也是需要付費(fèi)的,這些對(duì)我們?cè)谶x擇一款處理器的時(shí)候,是都應(yīng)該考慮進(jìn)去的成本因素。

  2.7.處理器速度方面的考慮

  主要考慮幾個(gè)細(xì)節(jié)問(wèn)題:

  1)處理器速度與處理器時(shí)鐘之間的關(guān)系

  例:?jiǎn)纹瑱C(jī)8031為例,由該處理器可以適應(yīng)12MHz頻率的輸入時(shí)鐘,因此就可以認(rèn)為它是一個(gè)速度為12MHz的處理器了嗎?不是,實(shí)際上,由于該處理器內(nèi)部邏輯電路執(zhí)行每條指令需要多種不同頻率的時(shí)鐘脈沖,因此該處理器內(nèi)部時(shí)鐘電路要對(duì)輸入的12MHz時(shí)鐘12分頻處理;最終為處理器提供的只是 1MHz主頻。

  有的時(shí)候,80MHz主頻的處理器(80MHz輸入時(shí)鐘,80MHz執(zhí)行速度)要比200MHz主頻的處理器(200MHz輸入時(shí)鐘,50MHz執(zhí)行速度)執(zhí)行速度要快得多。

  2)處理器指令系統(tǒng)

  如果不需要執(zhí)行復(fù)雜數(shù)學(xué)運(yùn)算的應(yīng)用,那么RISC指令集的處理器要快;如果執(zhí)行比較復(fù)雜的操作,則CISC指令集的處理器速度要更快。

  3)芯片結(jié)構(gòu)體系

  現(xiàn)在有的芯片是將多個(gè)不同功能的核封裝到一個(gè)芯片IC中,定制某種特定的功能,比如DSP,其中包括用于實(shí)現(xiàn)數(shù)字解碼、乘法運(yùn)算的硬件乘法器和移相器等;然而,這類處理器也由其自身局限,往往在執(zhí)行某些普通操作之前必須要使用額外的指令來(lái)把RAM中的數(shù)據(jù)放入內(nèi)部寄存器,相比之下,一般處理器只允許對(duì) RAM中的數(shù)據(jù)進(jìn)行直接訪問(wèn)。

  2.8.只讀存儲(chǔ)器(ROM)的選擇

  多數(shù)工程項(xiàng)目在其開發(fā)階段一般使用可擦寫可編程只讀存儲(chǔ)器(EPROM)或快速存儲(chǔ)器(Flash Memory);這類可擦寫可重復(fù)寫入存儲(chǔ)器的主要優(yōu)點(diǎn)是可多次使用。一旦產(chǎn)品研制完畢,就可以用一次寫入設(shè)備(OTP)來(lái)取代EPROM存儲(chǔ)器,一次性寫入器件的外觀與封裝幾乎與EPROM完全一樣,惟一不同之處就是其表面沒(méi)有擦出窗口,并且價(jià)格要比EPROM低很多。

  但是,另外一種情況,如果該產(chǎn)品今后需要升級(jí)固件,或在線編程,那么我們還是應(yīng)該選擇可擦寫可編程的存儲(chǔ)器。

  還有一種是非易失的存儲(chǔ)器,例如制造一臺(tái)電視機(jī),就有可能需要該設(shè)備具有記憶上次觀看最后一個(gè)頻道的功能,即使在切斷電源后,該頻道信息也不會(huì)丟失。

  總結(jié):所以,根據(jù)不同的產(chǎn)品選擇不同的存儲(chǔ)器也是一門很講究的學(xué)問(wèn)。

  2.9.電源的要求

  在某些設(shè)計(jì)中方案中,電源根本不存在問(wèn)題,對(duì)電源唯一的要求就是可以為電路正常供電;實(shí)際上,選擇電源主要要考慮三個(gè)方面的問(wèn)題:

  1)要注意設(shè)計(jì)方案中是否對(duì)電源的供電方式有所限制,例如,是否像大多數(shù)家用電器那樣需要使用屋內(nèi)墻上的電源插座供電,或是是使用USB接口供電

  2)看系統(tǒng)是否需要使用電池供電方式,如果這樣,我們就要考慮選擇那種對(duì)驅(qū)動(dòng)電流要求不高的處理器,然后再為其選擇合適的電池。

  3)休眠電流:許多微處理器都支持低功率運(yùn)行模式,在這種模式下,系統(tǒng)的CPU處理器將處于休眠狀態(tài),同時(shí)所有外部設(shè)備的電源供電都被暫時(shí)切斷,以便減少系統(tǒng)的電能消耗;某些微處理器在這種方式下需要的維持電流極小,但也有一些微處理器在這種方式下并不能節(jié)省多少功率;不管怎樣,我們都要對(duì)系統(tǒng)在節(jié)點(diǎn)模式下的工作時(shí)間有一個(gè)估測(cè),以便對(duì)具體情況選擇使用的電池。

  總之,無(wú)論哪種情況,我們都要對(duì)系統(tǒng)需要的供電總功率做到心中有數(shù)。

  2.10.設(shè)備工作環(huán)境的要求

  環(huán)境要求主要內(nèi)容是考慮溫度,濕度等;如果系統(tǒng)必須在溫度范圍較大的環(huán)境下運(yùn)行,諸如用于軍事設(shè)備或汽車的控制系統(tǒng),那么處理器可選擇的范圍就要小得多;

  并且由于大范圍溫度變化的設(shè)備通常比較昂貴,因此在設(shè)計(jì)過(guò)程中就不能再根據(jù)一般工業(yè)級(jí)器件的價(jià)格來(lái)制定預(yù)算。

  2.11.使用周期成本

  如果我們的產(chǎn)品是stm32神舟開發(fā)板,在一般情況下,可以不必考慮在用戶現(xiàn)場(chǎng)對(duì)stm32神舟開發(fā)板程序進(jìn)行修改的問(wèn)題,也不用為是否可以得到設(shè)備備件而著急,這是因?yàn)閟tm32神舟開發(fā)板是一種學(xué)習(xí)型的消費(fèi)產(chǎn)品,僅僅只是一款開發(fā)板而已。

  換句話說(shuō),如果我們的產(chǎn)品是價(jià)值幾萬(wàn)塊的工業(yè)設(shè)備并且需要常年不斷地運(yùn)行,那么我們?cè)诋a(chǎn)品設(shè)計(jì)過(guò)程中就必須從長(zhǎng)計(jì)議了:

  a.首先,我們需要選擇一種處理器或存儲(chǔ)體系結(jié)構(gòu)都可以升級(jí)的器件

  b.考慮到程序升級(jí)的可能,我們還要選擇較大容量的內(nèi)存

  c.最后要注意的則是所選處理器是否可以長(zhǎng)期供貨,這一點(diǎn)的重要性遠(yuǎn)遠(yuǎn)大于處理器的價(jià)格

  除了上面的考慮之外,使用周期成本也是在設(shè)計(jì)之初要考慮的因素??偟膩?lái)說(shuō),生產(chǎn)的部件越多,則可以接受的前期開發(fā)成本也就越大。如果產(chǎn)品是mp3,我們可能會(huì)選擇一個(gè)低價(jià)微處理器,同時(shí)投入一大筆錢來(lái)開發(fā)控制mp3的軟件。

  但如果我們的產(chǎn)品是價(jià)格昂貴的工業(yè)用設(shè)備,那么在產(chǎn)品的使用期內(nèi),該設(shè)備的銷售量將只有幾百臺(tái),毫無(wú)疑問(wèn),開發(fā)這種產(chǎn)品最重要的就是降低開發(fā)成本(降低開發(fā)成本而不是硬件成本!!!);除此之外,工業(yè)產(chǎn)品的成本也不像家用電器或消費(fèi)電子產(chǎn)品那么敏感。綜上所述,開發(fā)工業(yè)產(chǎn)品當(dāng)然要選擇一種便于進(jìn)行開發(fā)并且有助于縮短開發(fā)過(guò)程的處理器。

  2.12.處理器相關(guān)資料是否豐富

  如果該款處理器在市場(chǎng)上已經(jīng)用得很廣了,那么我們可以獲取更多的相關(guān)資料,觀察人家的產(chǎn)品是如何使用處理器的,也能在網(wǎng)絡(luò)上找到不少的相關(guān)的設(shè)計(jì)資料以及相關(guān)技術(shù)主題,這樣就進(jìn)一步降低了技術(shù)門檻,確保了使用該處理器做產(chǎn)品可行性,減低了風(fēng)險(xiǎn);例如STM32神舟IV號(hào)開發(fā)板就有針對(duì)該板子有個(gè)700多頁(yè)的手冊(cè)文檔,如果我們選擇STM32芯片來(lái)開發(fā)產(chǎn)品的話,借助詳細(xì)資料開發(fā)起來(lái)就輕松了,達(dá)到事半功倍的效果。

  反之,如果是廠商全新推出的處理器,因?yàn)槭袌?chǎng)上還沒(méi)有可以借鑒的產(chǎn)品,我們就只能從全英文的芯片手冊(cè)開始閱讀,了解這款芯片,這樣開發(fā)周期不僅變長(zhǎng),而且不可預(yù)知的風(fēng)險(xiǎn)也很大。

  3.開發(fā)成本的預(yù)測(cè)和估計(jì)

  大多數(shù)項(xiàng)目或產(chǎn)品都有專人負(fù)責(zé)預(yù)測(cè)整個(gè)過(guò)程的開發(fā)成本,對(duì)于任何項(xiàng)目來(lái)說(shuō),其開發(fā)成本主要包括人力和材料開銷。

  預(yù)測(cè)開發(fā)成本在很大程度上需要根據(jù)經(jīng)驗(yàn),這也是為什么大型公司一般指定有經(jīng)驗(yàn)的高級(jí)工程師來(lái)完成這一任務(wù)的原因,除了人力和材料的開銷之外,總結(jié)下來(lái),還有以下的開銷:

  1)人力成本(開發(fā)人員、管理人員、銷售人員、其他行政等輔助人員)的開銷

  2)材料(硬件物料和損耗,有時(shí)候需要投幾次PCB版才把產(chǎn)品穩(wěn)定下來(lái))的開銷

  3)開發(fā)系統(tǒng)和開發(fā)工具軟件的開銷

  4)硬件工具的開銷(例如示波器、仿真器等)

  對(duì)于整個(gè)項(xiàng)目來(lái)說(shuō),上述的開銷將直接可能導(dǎo)致產(chǎn)品成本增加,其中人力成本最為關(guān)鍵,尤其是在中國(guó)。

  4.產(chǎn)品開發(fā)設(shè)計(jì)文檔(需要包括硬件和軟件兩個(gè)方面)

  4.1 硬件文檔撰寫思路

  1)首先是需求定義或產(chǎn)品規(guī)格:

  如果這些是產(chǎn)品最終目標(biāo)的話,那么產(chǎn)品對(duì)硬件和軟件的要求就是技術(shù)方案的最終目標(biāo);對(duì)硬件和軟件的要求是從定義用戶界面和系統(tǒng)功能開始的。

  2)其次,根據(jù)需求,系統(tǒng)整體定義文檔中給出硬件接口的具體定義:

  定義硬件最有效的方法是從需求開始描述,由于硬件必須支持系統(tǒng)定義的所有功能,因此硬件定義是與系統(tǒng)說(shuō)明不可分割的;

  例如,我們?cè)O(shè)計(jì)一個(gè)定時(shí)器(事先需求說(shuō)明定時(shí)器不能與個(gè)人電腦連接,故無(wú)法使用CRT顯示時(shí)間),我們只有兩種選擇:一種是使用發(fā)光二極管(LED),另一種是使用液晶顯示器件(LCD);盡管LCD的顯示效果比較好,但考慮到定時(shí)器要常年位于戶外,并且早期LCD顯示器不能在低溫下工作,最終還是選擇 LED設(shè)備(這整個(gè)過(guò)程描述了我們硬件選型時(shí)的一個(gè)思路,這個(gè)是密切跟需求掛鉤的)

  3)一旦完成了系統(tǒng)整體說(shuō)明文檔,就開始進(jìn)行系統(tǒng)設(shè)計(jì):

  首先要對(duì)硬件說(shuō)明的內(nèi)容進(jìn)行細(xì)化,包括添加能讓工程師理解的設(shè)計(jì)意圖,以及軟件工程師圍繞硬件進(jìn)行程序設(shè)計(jì)時(shí)需要使用的硬件信息等。

  完成硬件電路板說(shuō)明文檔后,我們還要在該文檔中增加一個(gè)用來(lái)描述系統(tǒng)的原始要求的前言部分,包括說(shuō)明方案的設(shè)計(jì)思路和方法,除此之外,還要附上軟件工程師用來(lái)對(duì)硬件進(jìn)行控制所需的各類信息,這類信息主要包括如下內(nèi)容(軟件工程所需信息):

  -----內(nèi)存和I/O端口地址(如果需要,還可以提供內(nèi)存映射圖)

  -----可用內(nèi)存容量

  -----狀態(tài)寄存器每一位的定義

  -----每個(gè)端口管腳的用途

  -----外部設(shè)備的驅(qū)動(dòng)方法(例如,說(shuō)明輸入定時(shí)器電路的時(shí)鐘頻率等)

  -----其他有管軟件人員設(shè)計(jì)程序需要了解的信息

  對(duì)于比較復(fù)雜的系統(tǒng)來(lái)說(shuō),硬件文檔中經(jīng)常使用兩個(gè)獨(dú)立的部分來(lái)進(jìn)行說(shuō)明;其第一部分用來(lái)描述硬件指標(biāo)和工作原理,第二部分則主要為軟件人員提供程序設(shè)計(jì)需要的信息。

  4.2 軟件文檔撰寫思路

  1) 軟件文檔與硬件文檔的組織方法類似,軟件要求文檔的主要內(nèi)容則是定義軟件要實(shí)現(xiàn)的功能;一種是在簡(jiǎn)單項(xiàng)目設(shè)計(jì)過(guò)程中,軟件定義也可以只對(duì)一種電路板使用的軟件給予描述;對(duì)較復(fù)雜的項(xiàng)目來(lái)說(shuō),由于參與這種項(xiàng)目的軟件人員分別負(fù)責(zé)設(shè)計(jì)驅(qū)動(dòng)不同硬件部分的代碼(同一電路板),因此每個(gè)軟件人員可能會(huì)為自己的設(shè)計(jì)代碼指定不同的定義,這類軟件說(shuō)明需要提供下列的內(nèi)容:

  -----論述包括需求定義、工程指標(biāo)、硬件參數(shù)等實(shí)施項(xiàng)目需要的內(nèi)容

  -----說(shuō)明軟件之間、處理器之間或處理器與其內(nèi)部器件之間使用的通信協(xié)議:其內(nèi)容應(yīng)包括對(duì)緩沖區(qū)接口機(jī)制、命令/應(yīng)答協(xié)議、信號(hào)控制等協(xié)議的具體說(shuō)明。

  -----借助流程圖、偽代碼或者其他可能的方法來(lái)描述軟件的實(shí)現(xiàn)方法和過(guò)程

  2) 軟件與硬件所考慮的不同之處(此經(jīng)驗(yàn)方便技術(shù)總監(jiān)或其他相關(guān)管理者參考,因?yàn)闊o(wú)論是多高深的技術(shù)管理者,要么是硬件出身,要么是軟件出身,要么就是非技術(shù)出身,armjishu.com里面有少數(shù)軟硬件都精通的高手)

  a. 軟件的靈活性遠(yuǎn)遠(yuǎn)大于硬件,要讓軟件人員搞清楚某個(gè)軟件的內(nèi)部格式是非常困難的任務(wù),解決的辦法:詳細(xì)定義其他程序員需要了解的編程接口具體內(nèi)容,以及其他工程人員在實(shí)施開發(fā)項(xiàng)目過(guò)程中需要使用的技術(shù)細(xì)節(jié)信息。

  b. 軟件工程師只有在收到硬件說(shuō)明文檔后,才有可能知道如何對(duì)系統(tǒng)硬件進(jìn)行操作;而硬件人員一般不需要了解軟件程序的技術(shù)細(xì)節(jié)。

  c. 由于軟件易于更改,因此程序內(nèi)容經(jīng)常會(huì)按銷售人員提供的要求發(fā)生變更,在某些情況下,軟件文檔的內(nèi)容無(wú)法及時(shí)反映程序的最新變化。

  d. 軟件經(jīng)常是工程項(xiàng)目最后完成的部分,因此其文檔也經(jīng)常因時(shí)間不夠而欠缺完整。實(shí)際上,軟件文檔是否詳細(xì)、完整,在某種程度上是與公司或客戶的要求有關(guān)的。例如,軍事或國(guó)家工程一般要求開發(fā)商就其所有軟件實(shí)現(xiàn)的功能提供全面詳細(xì)的文檔

  e. 有個(gè)潛規(guī)則,對(duì)軟件的要求越復(fù)雜,則需求的正確可能性就越小,這個(gè)是經(jīng)驗(yàn)之談了,我們需要把準(zhǔn)需求這個(gè)準(zhǔn)繩來(lái)做文章,而不是陷入個(gè)人主義以及對(duì)軟件要求而憑空發(fā)揮自己不切實(shí)際的想象。

  f. 我們可以先硬件設(shè)計(jì),接著圍繞該硬件編制軟件。雖然實(shí)際系統(tǒng)的實(shí)現(xiàn)過(guò)程可能是軟硬件并行開發(fā),但軟件人員基本上也是圍繞著已經(jīng)實(shí)現(xiàn)的硬件來(lái)進(jìn)行程序設(shè)計(jì)的;對(duì)于更為復(fù)雜的系統(tǒng)來(lái)說(shuō),開發(fā)過(guò)程可能會(huì)出現(xiàn)重復(fù)。

  例如,某個(gè)項(xiàng)目的硬件工程師和軟件工程師可能會(huì)坐下來(lái)開會(huì),共同決定使用哪種硬件來(lái)實(shí)現(xiàn)某種功能;軟件人員可能提出需要為數(shù)據(jù)緩沖區(qū)口沖內(nèi)存容量,也可能要求提供某種外部設(shè)備接口,以便充分利用現(xiàn)成接口程序提供的各種驅(qū)動(dòng)代碼。

  總的來(lái)說(shuō),必須在提高軟件開發(fā)效率與硬件系統(tǒng)的復(fù)雜性與成本之間進(jìn)行權(quán)衡。

  5.嵌入式高手對(duì)技術(shù)的理解(含辛茹苦這么多年的精華體驗(yàn))

  有很多人認(rèn)為:嵌入式系統(tǒng)性能的核心因素是軟件功能,其實(shí),如果按照這種邏輯,系統(tǒng)設(shè)計(jì)中存在的問(wèn)題就應(yīng)由軟件人員來(lái)負(fù)責(zé);其實(shí)這個(gè)觀點(diǎn)實(shí)際上反映了設(shè)計(jì)嵌入式產(chǎn)品時(shí)如何考慮劃分硬件和軟件各自應(yīng)實(shí)現(xiàn)的功能,也就是這個(gè)功能是軟件實(shí)現(xiàn),還是考慮用硬件來(lái)實(shí)現(xiàn)(硬件實(shí)現(xiàn):需要購(gòu)買處理該功能的硬件芯片,從而增加成本;軟件實(shí)現(xiàn):無(wú)需增加硬件成本,但會(huì)占用處理器以及內(nèi)存的資源,這是armjishu.com的專家們體會(huì)到的)。

  例如:我們?cè)谶@里設(shè)計(jì)的基于STM32的神舟II號(hào)開發(fā)板產(chǎn)品,我們可以使用專業(yè)的解碼芯片來(lái)負(fù)責(zé)mp3音樂(lè)文件的解碼和播放功能,也可以使用另一種方法來(lái)解碼mp3語(yǔ)音文件,讓ARM處理器利用軟件控制寄存器來(lái)驅(qū)動(dòng)耳機(jī)或音響,處理器通過(guò)對(duì)mp3語(yǔ)音文件解碼之后再將解碼后的數(shù)據(jù)流按照一定協(xié)議格式送給音頻輸出的硬件接口進(jìn)行播放。

  優(yōu)點(diǎn):這種方案在硬件方面節(jié)省了一個(gè)器件,降低了成本,并且該功能還方便調(diào)試(因?yàn)槭擒浖?shí)現(xiàn)的)。

  缺點(diǎn):從另一個(gè)角度來(lái)看,雖然節(jié)省了一塊語(yǔ)音解碼芯片,但同時(shí)要在三個(gè)方面增加成本。

  首先,要在程序中增加語(yǔ)音協(xié)議解碼的代碼;

  其次,可能要把增加ROM來(lái)存放語(yǔ)音解碼的協(xié)議,這樣可以增加速度;

  最后,運(yùn)行該程序?qū)⒄加锰幚砥鞯臅r(shí)間和資源。

  其實(shí),話又說(shuō)回來(lái),對(duì)于本案例來(lái)說(shuō),上述成本的節(jié)約并不會(huì)引發(fā)任何問(wèn)題,包括驅(qū)動(dòng)程序增加也只需少量的,我們討論這個(gè)mp3產(chǎn)品的案例的目的在于說(shuō)明如何對(duì)軟件硬件的功能進(jìn)行合理劃分。

  總的來(lái)說(shuō),交給軟件實(shí)現(xiàn)的功能越多,則產(chǎn)品的成本就越低,當(dāng)然這就要處理器必須有足夠的處理速度和內(nèi)存空間來(lái)實(shí)現(xiàn)設(shè)計(jì)指定的功能;常言說(shuō)得好,天下沒(méi)有免費(fèi)的午餐;把功能分配給軟件來(lái)實(shí)現(xiàn),會(huì)增加軟件的復(fù)雜性、開發(fā)時(shí)間、以及程序的調(diào)試時(shí)間;然而,隨著處理器的處理能力的不斷提高,可以預(yù)見,越來(lái)越多的功能將會(huì)由軟件來(lái)實(shí)現(xiàn)。

  雖然在軟件中實(shí)現(xiàn)各種功能會(huì)增加開發(fā)成本,但如果把功能移植到硬件中實(shí)現(xiàn),則會(huì)增加產(chǎn)品的成本,這類開銷是在構(gòu)造每個(gè)系統(tǒng)組件時(shí)不可避免的。在低成本設(shè)計(jì)方案中,增加任何額外的硬件都會(huì)對(duì)產(chǎn)品成本產(chǎn)生顯著的影響,因此軟硬件功能劃分就是一個(gè)決定產(chǎn)品成本的大問(wèn)題。在諸如大眾消費(fèi)產(chǎn)品這一類對(duì)成本非常敏感的設(shè)計(jì)方案中,一般都會(huì)把無(wú)法通過(guò)軟件實(shí)現(xiàn)的功能排除在外的。

image.png

  STM32單片機(jī)學(xué)習(xí)筆記

  1、 AHB系統(tǒng)總線分為APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速設(shè)備

  2、 Stm32f10x.h相當(dāng)于reg52.h(里面有基本的位操作定義),另一個(gè)為stm32f10x_conf.h專門控制外圍器件的配置,也就是開關(guān)頭文件的作用

  3、 HSE Osc(High Speed External Oscillator)高速外部晶振,一般為8MHz,HSI RC(High Speed InternalRC)高速內(nèi)部RC,8MHz

  4、 LSE Osc(Low Speed External Oscillator)低速外部晶振,一般為32.768KHz,LSI RC(Low Speed InternalRC)低速內(nèi)部晶振,大概為40KHz左右,提供看門狗時(shí)鐘和自動(dòng)喚醒單元時(shí)鐘源

  5、 SYSCLK時(shí)鐘源有三個(gè)來(lái)源:HSI RC、HSE OSC、PLL

  6、 MCO[2:0]可以提供4源不同的時(shí)鐘同步信號(hào),PA8

  7、 GPIO口貌似有兩個(gè)反向串聯(lián)的二極管用作鉗位二極管。

  8、 總線矩陣采用輪換算法對(duì)系統(tǒng)總線和DMA進(jìn)行仲裁

  9、 ICode總線,DCode總線、系統(tǒng)總線、DMA總線、總線矩陣、AHB/APB橋

  10、在使用一個(gè)外設(shè)之前,必須設(shè)置寄存器RCC_AHBENR來(lái)打開該外設(shè)的時(shí)鐘

  11、數(shù)據(jù)字節(jié)以小端存儲(chǔ)形式保存在存儲(chǔ)器中

  12、 內(nèi)存映射區(qū)分為8個(gè)大塊,每個(gè)塊為512MB

  13、 FLASH的一頁(yè)為1K(小容量和中容量),大容量是2K。

  14、 系統(tǒng)存儲(chǔ)區(qū)(SystemMemory)為ST公司出廠配置鎖死,用戶無(wú)法編輯,用于對(duì)FLASH區(qū)域進(jìn)行重新編程。所以我們燒寫程序務(wù)必選擇BOOT1 = 0,這樣通過(guò)內(nèi)嵌的自舉程序?qū)LASH進(jìn)行燒寫,比如中斷向量表和代碼

  15、 STM32核心電壓為1.8V

  16、 STM32復(fù)位有三種:系統(tǒng)復(fù)位、上電復(fù)位、備份區(qū)域復(fù)位。其中系統(tǒng)復(fù)位除了RCC_CSR中的復(fù)位標(biāo)志和BKP中的數(shù)值不復(fù)位之外,其他的所有寄存器全部復(fù)位。觸發(fā)方式例如外部復(fù)位、看門狗復(fù)位、軟件復(fù)位等;電源復(fù)位由于外部電源的上電/掉電復(fù)位或者待機(jī)模式返回。復(fù)位除了BKP中的寄存器值不動(dòng),其他全部復(fù)位;備份區(qū)域復(fù)位的觸發(fā)源為軟件復(fù)位或者VDD和VBAT全部掉電時(shí)。

  17、 單片機(jī)復(fù)位后所有I/O口均為浮空輸入狀態(tài)

  18、 68個(gè)可屏蔽中斷通道,16個(gè)可編程優(yōu)先級(jí),16個(gè)內(nèi)核中斷,一共68+16=84個(gè)中斷。103系列只有60個(gè)中斷,107系列才有68個(gè)中斷

  19、 系統(tǒng)啟動(dòng)從0x00000004開始,0x000 0000保留

  20、 (NestedVectored Interrupt Controller)NVIC嵌套向量中斷控制器,分為兩種:搶先式優(yōu)先級(jí)(可嵌套)和中斷優(yōu)先級(jí)(副優(yōu)先級(jí),不能嵌套)。兩種優(yōu)先級(jí)由4位二進(jìn)制位決定。分配下來(lái)有十六種情況:

  21、0號(hào)搶先優(yōu)先級(jí)的中斷,可以打斷任何中斷搶先優(yōu)先級(jí)為非0號(hào)的中斷;1號(hào)搶先優(yōu)先級(jí)的中斷,可以打斷任何中斷搶先優(yōu)先級(jí)為2、3、4號(hào)的中斷;……;構(gòu)成中斷嵌套。如果兩個(gè)中斷的搶先優(yōu)先級(jí)相同,誰(shuí)先出現(xiàn),就先響應(yīng)誰(shuí),不構(gòu)成嵌套。如果一起出現(xiàn)(或掛在那里等待),就看它們2個(gè)誰(shuí)的子優(yōu)先級(jí)高了,如果子優(yōu)先級(jí)也相同,就看它們的中斷向量位置了。原來(lái)中斷向量的位置是最后的決定因素!!!!

  22、 上電初始化后AIRC初始化為0,為16個(gè)搶先式優(yōu)先級(jí),但是由于所有的外部通道中斷優(yōu)先級(jí)控制字PRI_n為0,所以搶先式優(yōu)先級(jí)相同,此時(shí)就不能嵌套了

  23、 NVI中有ISER[2](Interrupt Set-Enable Registers),ICER[2](Interrupt Clear-Enable Registers),ISPR[2](Interrupt Set-Pending Registers),ICPR[2](Interrupt Clear-Pending Registers),IABR[2](Active Bit Registers),IPR[15](InterruptPriority Registers)定義。其中ISER和ICER分別為中斷使能和中斷失能寄存器,都是寫1來(lái)使能/失能中斷的。為什么寫1?為什么不采用一個(gè)寄存器而用兩個(gè)寄存器來(lái)表示中斷使能/失能狀態(tài)?由于硬件,寫0比較復(fù)雜,并且可能造成其他位的狀態(tài)改變,所以用1來(lái)表示打開或者關(guān)斷是比較合理的

  24、 中斷標(biāo)志位需要手動(dòng)清除

  25、 配置外圍器件的一般步驟:1、打開端口時(shí)鐘。2、定義初始化結(jié)構(gòu)體并初始化。3、調(diào)用

  26、串口的奇偶校驗(yàn):如果是奇偶校驗(yàn),那么USART_InitStructure.USART_WordLength= USART_WordLength_9b;這個(gè)數(shù)據(jù)的長(zhǎng)度必須設(shè)定為9位!

  27、ADC的規(guī)則組可以自定義轉(zhuǎn)換通道順序和轉(zhuǎn)換的通道個(gè)數(shù)。在實(shí)際應(yīng)用中,有時(shí)候希望有一些特別的通道具有很高的優(yōu)先權(quán),需要在規(guī)則組進(jìn)行轉(zhuǎn)換的時(shí)候強(qiáng)制打斷,進(jìn)行另一個(gè)通道的轉(zhuǎn)換,這樣一組通道,叫做注入組。

  28、定時(shí)器的輸出比較模式:Timing(凍結(jié),什么都不做,普通定時(shí)),Active(OCxREF輸出高電平有效),Inactive(OCxREF輸出低電平),Toggle(比較成功后翻轉(zhuǎn)電平)。

  29、STM32的定時(shí)器從0開始計(jì)數(shù),滿足一些條件,給出標(biāo)志位(比如匹配成功、時(shí)間更新、溢出等)然后從0開始計(jì)數(shù)。這一點(diǎn)和51不同。

  30、OCx=OCxREF+極性

  31、自動(dòng)裝載寄存器和影子寄存器:前者相當(dāng)于51當(dāng)中的溢出設(shè)定數(shù)值。而影子寄存器顧名思義是影子,就是寄存器的另一分copy。實(shí)際起作用的是影子寄存器,而程序員操縱的則是自動(dòng)裝載寄存器。如果APPE位使能,表明自動(dòng)裝載寄存器的值在下一次更新事件發(fā)生后才寫入新值。否則,寫入自動(dòng)裝載寄存器的值會(huì)被立即更新到影子寄存器。

  32、RCC_PCLK1Config(RCC_HCLK_Div4);PCLK1的4分頻給定時(shí)器基準(zhǔn)時(shí)鐘

  33、定時(shí)器配置:RCC、NVIC、GPIO(OC輸出或者PWM)、TIMx

  34、通用定時(shí)器可以輸出4路不同的PWM,高級(jí)定時(shí)器可以輸出4路不同的PWM外,還可以輸出3路互補(bǔ)的PWM信號(hào)(驅(qū)動(dòng)三相電機(jī)),一共有7路。這樣算出來(lái)STM32可以產(chǎn)生30路PWM=7*2+4*4

  36、高級(jí)定時(shí)器時(shí)鐘源掛在了APB2上,而通用定時(shí)器掛在APB1上。AHB(72mhz)→APB1分頻器(默認(rèn)2)→APB1時(shí)鐘信號(hào)(36mhz)→倍頻器(*2倍)→通用定時(shí)器時(shí)鐘信號(hào)(72mhz)。如果APB1沒(méi)有分頻,那么通用定時(shí)器的時(shí)鐘信號(hào)頻率就直接等于APB1的時(shí)鐘頻率,沒(méi)有上述的倍頻器*2過(guò)程。TIM_SetAutoreload()用來(lái)改變PWM的頻率,TIM_SetCompare1()用來(lái)改變占空比

  37、有刷電機(jī)一般啟動(dòng)力矩大一些,無(wú)刷電機(jī)啟動(dòng)力矩小,運(yùn)行起來(lái)力矩大。有刷電機(jī)采用電刷機(jī)械電流換向,而無(wú)刷電機(jī)則通過(guò)霍爾傳感器測(cè)出轉(zhuǎn)子的電流來(lái)判斷電機(jī)的運(yùn)動(dòng)位置和方向,返回給控制回路。

  38、死區(qū)是必須要有的,因?yàn)檫@涉及到電路的短路問(wèn)題。晶閘管在換向的時(shí)候需要死區(qū)時(shí)間來(lái)徹底關(guān)斷線路

  39、剎車功能用來(lái)在控制回路出現(xiàn)問(wèn)題時(shí),硬件自動(dòng)給予外部電機(jī)進(jìn)行緊急剎車制動(dòng),反應(yīng)在PWM上持續(xù)給出一個(gè)固定的占空比?(三相驅(qū)動(dòng)也是?)

  40、PWM輸出最好采用PWM模式,其他的比較輸出模式相位會(huì)慢慢改變,不精準(zhǔn)

  41、對(duì)FLASH的讀寫需要先解鎖后加鎖。FLASH寫0容易,寫1難。

  42、下載程序有兩種方式,一種為ICP(在線編程),適用于JTAG或SWD協(xié)議下的燒寫程序。另一種成為IAP(在應(yīng)用編程),適用于很多接口(USB,串口,CAN)下載到存儲(chǔ)器中,IAP允許在程序運(yùn)行時(shí)重新燒寫FLASH

  43、FLASH分為主存儲(chǔ)器(這里放置用戶的程序代碼)和信息塊(啟動(dòng)代碼),除此之外,還有一部分叫做系統(tǒng)存儲(chǔ)器,這一塊用戶不可操作,為ST公司出產(chǎn)后固化,為系統(tǒng)的上電自舉程序

  44、FLASH在寫的時(shí)候,一定不能讀,如果有讀操作,那么將會(huì)鎖住總線

  45、對(duì)FLASH操作時(shí),必須打開HIS

  46、STM32有兩種看門狗(IWDG獨(dú)立看門狗《獨(dú)立時(shí)鐘》,WWDG窗口看門狗《由APB1分頻而來(lái)》)

  47、SPI的的最高頻率為36MHz(fpclk/2)

  48、 TIM1和TIM8高級(jí)定時(shí)器在輸出PWM時(shí),需要配置一下主輸出功能(CtrlPWMOutputs)才能輸出PWM。其他的通用定時(shí)器不需要這樣配置。但是TIM6和TIM7沒(méi)有PWM輸出功能。

  49、Code為程序代碼部分

  RO-data 表示程序定義的常量(如:const temp等);

  RW-data 表示已初始化的全局變量

  ZI-data 表示未初始化的全局變量,以及初始化為0的變量

  Code, RO-data,RW-data..............flash

  RW-data, ZIdata...................RAM

  初始化時(shí)RW-data從flash拷貝到RAM

  50、STM32F103ZET6有144個(gè)引腳(Z為144),其中,可用IO口為112個(gè)(7X16=112,ABCDEFG口)

  51、ARM公司只生產(chǎn)內(nèi)核標(biāo)準(zhǔn),不生產(chǎn)芯片。ST、TI這樣的公司從ARM公司那里購(gòu)買內(nèi)核,然后外加自己的總線結(jié)構(gòu)、外設(shè)、存儲(chǔ)器、始終和復(fù)位、I/O后就組成了自己的芯片。

  52、CMSIS標(biāo)準(zhǔn)用于在向上的用戶層和下面的硬件層交換信息。這個(gè)架構(gòu)當(dāng)然可以自己定義,但是這樣的話就會(huì)沒(méi)有標(biāo)準(zhǔn)。所以強(qiáng)制使用CMSISI標(biāo)準(zhǔn)來(lái)設(shè)計(jì)芯片。通俗點(diǎn)的講就是系統(tǒng)初始化的函數(shù)名稱CMSIS定義為SystemInit(),GPIO_ResetBits()等

  53、端口復(fù)用和端口重映射是兩個(gè)概念:前者在使能其對(duì)應(yīng)的端口和對(duì)應(yīng)的功能時(shí)鐘即可。后者需要打開AFIO時(shí)鐘,然后進(jìn)行端口的重映射GPIO_PinRemapConfig()

  54、下載程序只能使用串口1,在硬件設(shè)計(jì)時(shí)一定要注意!

  55、J-TAG調(diào)試頻率一般設(shè)定為2MHz,而SWD調(diào)試頻率可以設(shè)定為10MHz

  56、SysTick的中斷實(shí)現(xiàn)可以有兩種方式:循環(huán)等待和中斷法。推薦用循環(huán)等待,中斷法可能會(huì)出問(wèn)題而且占用資源。

  57、部分I/O引腳是5V兼容的。單個(gè)I/O的最大驅(qū)動(dòng)電流和灌入電流均為25mA。整個(gè)芯片的電流為150mA

  58、KEIL支持位段操作,可以利用C語(yǔ)言中的位段知識(shí)定義位段結(jié)構(gòu)體,然后對(duì)單獨(dú)的寄存器進(jìn)行單獨(dú)的位操作。

  59、關(guān)于內(nèi)部上下拉電阻的設(shè)置:如果外部的按鍵另一頭接地,那么需要設(shè)置成上拉電阻。(理由是當(dāng)沒(méi)有按下按鍵時(shí),由于上拉,輸入為高電平;按下時(shí),由于外部接地,輸入為低電平。)同理,如果外部的按鍵另一頭接高電平,那么需要設(shè)置成下拉電阻。

  60、串口中斷TXE和TC的區(qū)別:其實(shí)很明顯,一個(gè)是發(fā)送寄存器空標(biāo)志,一個(gè)是發(fā)送完成標(biāo)志。因?yàn)榇谠诎l(fā)送的時(shí)候首先需要把發(fā)送寄存器中的數(shù)據(jù)移位到移位寄存器(影子寄存器)后再串行發(fā)送出去。所以當(dāng)發(fā)送寄存器DR空時(shí)說(shuō)明現(xiàn)在可能正在往外面發(fā)送數(shù)據(jù),數(shù)據(jù)可能還沒(méi)有發(fā)送完。但是發(fā)送完成不一樣,他是在移位寄存器將本次數(shù)據(jù)全部移位完成后設(shè)置的標(biāo)志位(也就是發(fā)送完了停止位)。這么看來(lái):TXE允許程序有更充裕的時(shí)間填寫TDR寄存器,保證發(fā)送的數(shù)據(jù)流不間斷。TC可以讓程序知道發(fā)送結(jié)束的確切時(shí)間,有利于程序控制外部數(shù)據(jù)流的時(shí)序。

  61、窗口看門狗顧名思義有一個(gè)窗口,這個(gè)窗口的橫坐標(biāo)為時(shí)間,意思是在指定的時(shí)間范圍內(nèi)刷新寄存器,否則單片機(jī)復(fù)位。窗口的上限由人來(lái)設(shè)定W[6:0],下線定死為0x40Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;Twwdg為超時(shí)時(shí)間ms,F(xiàn)pclk1為APB1時(shí)鐘KHz,

  62、TIMx通用定時(shí)器有4個(gè)獨(dú)立通道,分別可以用來(lái)作為:輸入捕獲、比較輸出、PWM生成、單脈沖模式輸出。

  63、定時(shí)器的時(shí)鐘來(lái)源有4個(gè):內(nèi)部時(shí)鐘(CK_INT),外部時(shí)鐘模式1(TIx),外部時(shí)鐘模式2(ETR),內(nèi)部觸發(fā)模式(ITRx,這個(gè)用來(lái)定時(shí)器的同步)

  64、定時(shí)器中斷溢出更新時(shí)間:Tout=((arr+1)*(psc+1))/Tclk,ARR為自動(dòng)裝載寄存器(1~65535)、PSC為分頻系數(shù),TCLK為輸入時(shí)鐘頻率(Mhz)

  65、PWM1和PWM2模式的區(qū)別僅在于相位的180度。前者高電平時(shí),后者低電平。感覺(jué)好雞肋,OCxREF極性就可以實(shí)現(xiàn)這個(gè)功能。。

  66、定時(shí)器輸入捕捉有一個(gè)濾波器,顧名思義濾波器起到的就是濾波的作用,在捕捉外部信號(hào)時(shí),信號(hào)可能不穩(wěn)定,此時(shí)需要濾波:當(dāng)檢測(cè)到有外部輸入時(shí),需要再連續(xù)采樣N次如果確定為高電平/低電平,則觸發(fā)響應(yīng)中斷(如果開啟了的話)。

  67、電容觸摸屏原理:通過(guò)充放電的曲線不同來(lái)檢測(cè)是否被按下。 實(shí)際的實(shí)驗(yàn)過(guò)程中,TPAD可以用一塊覆銅區(qū)域來(lái)替代,通過(guò)電容的充放電常數(shù)來(lái)確定是否按下。

  68、OLED,即有機(jī)發(fā)光二極管(OrganicLight-Emitting Diode),又稱為有機(jī)電激光顯示(Organic Electroluminesence Display,OELD)。下圖為OLED的GRAM與屏幕的對(duì)應(yīng)表

  PAGE2單獨(dú)列出來(lái):

  69、USART可以操縱SPI設(shè)備。不過(guò)最大頻率只有4.5MHz

  70、使用I/O口時(shí)應(yīng)該注意的問(wèn)題

  71、ADC的Vref+和Vdda與VSS,Vref-一定要加高質(zhì)量的濾波電容,切靠近單片機(jī)。

  72、ADC分為規(guī)則組和注入組,前者有16個(gè)通道,后者有4個(gè)通道。并且16個(gè)通道公用一個(gè)數(shù)值寄存器,注入組的4個(gè)通道分別有一個(gè)數(shù)值寄存器。

  73、采樣頻率越高,輸入阻抗要求越小。

  74、Stm32進(jìn)入中斷的最短周期為6個(gè)周期

  77、FSMC,即靈活的靜態(tài)存儲(chǔ)控制器。能夠與同步或異步存儲(chǔ)器和16位PC存儲(chǔ)器卡接口,STM32的FSMC接口支持包括SRAM、NANDFLASH、NORFLASH和PSRAM等存儲(chǔ)器。

  78、平時(shí)所說(shuō)的U盤里的FLASH存儲(chǔ)器有兩種類型:NANDflash和NOR flash。

  NAND FLASH

  NOR FLASH

  不能直接運(yùn)行里面的代碼

  可以直接運(yùn)行里面的代碼

  寫入和擦除速度快

  寫入和擦除速度慢

  讀取速度稍慢

  讀取速度稍快

  擦寫周期100萬(wàn)次

  擦寫周期10萬(wàn)次

  成本低,容量高

  成本高,容量低

  一般為串行接口

  有SRAM接口

  79、TFT在操作時(shí),可以當(dāng)作外部SRAM來(lái)操作,這樣的話,如果單片機(jī)有FSMC接口,就可以使用NORFLASH的SRAM接口去控制,速度非常快。

  80、Stm32的的FSMC有4個(gè)256MB的存儲(chǔ)塊,一共尋址1GB的外部存儲(chǔ)器空間。

  81、在STM32內(nèi)部,F(xiàn)SMC的一端通過(guò)內(nèi)部高速總線AHB連接到內(nèi)核Cortex-M3,另一端則是面向擴(kuò)展存儲(chǔ)器的外部總線。內(nèi)核對(duì)外部存儲(chǔ)器的訪問(wèn)信號(hào)發(fā)送到AHB總線后,經(jīng)過(guò)FSMC轉(zhuǎn)換為符合外部存儲(chǔ)器通信規(guī)約的信號(hào),送到外部存儲(chǔ)器的相應(yīng)引腳,實(shí)現(xiàn)內(nèi)核與外部存儲(chǔ)器之間的數(shù)據(jù)交互。

  82、FSMC中的DATASET和ADDSET的設(shè)置需要參看外部存儲(chǔ)器的時(shí)序圖來(lái)確定。一般而言,DATASET指的是數(shù)據(jù)建立時(shí)間,也就是讀/寫信號(hào)開始到讀/寫信號(hào)停止(上升沿存儲(chǔ)數(shù)據(jù))的持續(xù)時(shí)間。(一般來(lái)說(shuō)寫比讀快!)。而ADDSET指的是地址建立時(shí)間,指的是片選之后到讀/寫操作之前的時(shí)間,這是針對(duì)SRAM來(lái)說(shuō)的,如果操縱的是TFT,不存在地址線,所以此時(shí)的ADDSET就是讀/寫信號(hào)結(jié)束到RS電平的轉(zhuǎn)換時(shí)間。

  85、FSMC的三個(gè)配置寄存器:FSMC_BCRx(片選控制配置)、FSMC_BTRx(片選時(shí)序)、FSMC_BWTRx(片選寫時(shí)序)。

  86、 RTC時(shí)鐘配置必須要用到BKP寄存器,BKP寄存器在單片機(jī)復(fù)位、電源復(fù)位、待機(jī)喚醒模式下是不會(huì)更改值的,他的供電由VDD供電,VDD被切斷后自動(dòng)切換至外部的VBAT供電。

  87、 要修改BKP寄存器的值,必須取消其寫保護(hù)的標(biāo)志。BKP寄存器在上電時(shí)自動(dòng)寫保護(hù)。

  88、 Stm32有三種省電模式:

  三種省電模式中,耗電量從上到下依次降低,待機(jī)模式的電流僅為2uA。

  89、 從待機(jī)模式中喚醒單片機(jī)等效于讓單片機(jī)復(fù)位,但是電源寄存器的值會(huì)有一個(gè)標(biāo)志位指示單片機(jī)是被喚醒的,不是被復(fù)位的。

  90、 ADC的時(shí)鐘不要超過(guò)14MHz,否則轉(zhuǎn)換精度會(huì)下降。最大轉(zhuǎn)換速率為1MHz,即轉(zhuǎn)換周期為1us(14MHz,采樣周期為1.5個(gè)ADC時(shí)鐘)

  91、 Tcovn=采樣時(shí)間+12.5個(gè)周期。采樣時(shí)間盡量選長(zhǎng)一點(diǎn),這樣精度高一些,但是轉(zhuǎn)換速率下降,這也是有利必有弊。

  93、 拿ARM7TDMI來(lái)說(shuō),T代表Thumb指令集,D是說(shuō)支持JTAG調(diào)試(Debugging),M意指快速乘法器,I則對(duì)應(yīng)一個(gè)嵌入式ICE模塊。

  94、 MMU作為嵌入式處理器與應(yīng)用處理器的分水嶺標(biāo)志à具有內(nèi)存管理單元的嵌入式處理器可以定位為應(yīng)用處理器。這么說(shuō)M系列和A系列的處理器的區(qū)別在于A系列的處理器具有MMU單元可以進(jìn)行內(nèi)存模塊的管理。

  95、ARM處理器有兩種狀態(tài):ARM狀態(tài)和Thumb狀態(tài)。

  96、 這張圖說(shuō)明了一切:Thumb2指令集做了一件很偉大的事情:將16位和32位的指令集融為一體,兼容性非常強(qiáng)!(這么說(shuō)CM3不支持某些32位ARM指令集??)

  98、MSP是系統(tǒng)復(fù)位后使用的堆棧指針,PSP由用戶的代碼使用。兩個(gè)堆棧指針為4字節(jié)對(duì)齊!!

  99、在ARM編程領(lǐng)域中,凡是打斷程序運(yùn)行的事件,統(tǒng)稱為異常(exception)。

  100、 因?yàn)榇嬖贚R(鏈接寄存器),所以可支持1級(jí)的子程序調(diào)用而不用壓棧到內(nèi)存,大大提高了運(yùn)行速度。---à這就是說(shuō),我們?cè)诰幊痰臅r(shí)候,一級(jí)調(diào)用是不會(huì)耗費(fèi)太多時(shí)間的,除非是二級(jí)調(diào)用!

  101、 處理器有兩種操作模式:handler模式和線程模式。

  處理器也有兩種特權(quán)分級(jí):特權(quán)級(jí)和用戶級(jí)。 這張圖說(shuō)明了一切:復(fù)位進(jìn)入特權(quán)級(jí)線程模式,如果有異常,進(jìn)入特權(quán)級(jí)的handler模式處理異?;蛑袛嗬蹋缓蠓祷刂撂貦?quán)級(jí)線程模式。通過(guò)修改CONTROL寄存器可以進(jìn)入用戶級(jí)線程模式。

  102、 兩個(gè)高級(jí)定時(shí)器TIM1和TIM8是掛接在APB1總線上

  103、 STM32的外部中斷是以組來(lái)區(qū)分的,也就是說(shuō)PA0,PB0,PC0單片機(jī)是無(wú)法區(qū)分其中哪個(gè)觸發(fā)的中斷à均為EXIT0線中斷服務(wù)例程。所以,外部中斷支持16路的中斷分辨率。從另一個(gè)方面來(lái)講,我們可以設(shè)置GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcex);來(lái)開通中斷線實(shí)現(xiàn)組內(nèi)的不同中斷。

  104、 DAC有兩個(gè)寄存器,一個(gè)是DHR(Data HoldingRegister)數(shù)據(jù)保持寄存器,一個(gè)DOR(Data Output Register)數(shù)據(jù)輸出寄存器。真正起作用的是DOR寄存器,該寄存器把值給數(shù)模轉(zhuǎn)換發(fā)生單元輸出以VREF+為參考電壓的電壓值。如果是硬件觸發(fā)轉(zhuǎn)換,系統(tǒng)將在1個(gè)ABP時(shí)鐘周期后把值給DOR,如果是軟件觸發(fā)轉(zhuǎn)換,時(shí)間為3個(gè)APB時(shí)鐘周期。然后,均等待Tsetting時(shí)間(Typical為3us,Max為4us)后真正輸出電壓值。

  105、 DAC分8位模式和12位模式,其中后者可以選擇左右對(duì)齊

  106、 DMA仲裁器分為軟件和硬件兩種。軟件部分分為4個(gè)等級(jí),分別是很高優(yōu)先級(jí)、高優(yōu)先級(jí)、中等、低。硬件部分由通道的大小來(lái)決定優(yōu)先級(jí),越低優(yōu)先級(jí)越高。

  107、 DMA有一個(gè)實(shí)時(shí)的傳輸數(shù)據(jù)量寄存器叫做DMA_CNDTR,最大值為65535,存放的是當(dāng)前傳輸所要傳輸?shù)臄?shù)據(jù)量。當(dāng)數(shù)據(jù)量變?yōu)?時(shí),表明傳輸完成。

  108、 CAN總線(ControllerArea Network)。CAN控制器根據(jù)兩根線上的電位差來(lái)判斷總線電平,總線電平又分為顯性電平和隱性電平,二者必居其一。

  109、 CAN總線具有6個(gè)特點(diǎn):1:多主控制(掛接在總線上的所有設(shè)備均可以成為主設(shè)備,并且設(shè)備ID是用來(lái)決定設(shè)備的優(yōu)先級(jí),沒(méi)有設(shè)備地址概念),2:系統(tǒng)若軟性(沒(méi)有設(shè)備地址概念),3、通訊速度較快,通訊距離較遠(yuǎn)(1Mbps下40M,5kbps下10KM),4、具有錯(cuò)誤檢測(cè)、錯(cuò)誤通知(通知其他設(shè)備)和錯(cuò)誤恢復(fù)功能(強(qiáng)制結(jié)束發(fā)送,重復(fù)發(fā)送接收錯(cuò)誤的信息。),5、故障封閉,當(dāng)總線上的設(shè)備發(fā)生連續(xù)故障錯(cuò)誤時(shí),CAN控制器會(huì)把改控制器踢出總線。6、連接節(jié)點(diǎn)多。理論上可以無(wú)限制加載,但是受到時(shí)間延遲和電氣負(fù)載的限制,實(shí)際數(shù)目是有限制的。降低傳輸速度可以適當(dāng)增加可掛接負(fù)載個(gè)數(shù)。

  110、 CAN協(xié)議有兩個(gè)標(biāo)準(zhǔn),ISO11898(針對(duì)125kbps~1Mbps的高速速率)和ISO11519-2(125kbps以下的低速速率)

  112、 CAN協(xié)議的有5種類型的幀:數(shù)據(jù)幀、遙控幀、錯(cuò)誤幀、過(guò)載幀、幀間隔。其中前兩種幀有標(biāo)準(zhǔn)格式(11位ID)和擴(kuò)展格式(29位ID)。

  113、 數(shù)據(jù)幀構(gòu)成:

  (1) 幀起始。 表示數(shù)據(jù)開的段幀起始。

  (2) 仲裁段。 表示該幀優(yōu)先級(jí)的仲裁段。

  (3) 控制段。 表示數(shù)據(jù)的字節(jié)及保留位段。

  (4) 數(shù)據(jù)段。 數(shù)據(jù)的內(nèi)容,一幀可發(fā)送0~8個(gè)字節(jié)的數(shù)據(jù)。

  (5) CRC段。 檢查幀的傳輸錯(cuò)誤段。

  (6) ACK段。 表示確認(rèn)正常接收的段。

  (7) 幀結(jié)束。 表示數(shù)據(jù)的段幀結(jié)束。

  114、 Stm32f103系列只有一個(gè)CAN控制器,有3個(gè)發(fā)送郵箱和3級(jí)深度的2個(gè)FIFO,14個(gè)過(guò)濾組器。

  115、 STM32的每個(gè)過(guò)濾組可以配置為1個(gè)32位過(guò)濾器和2個(gè)16位過(guò)濾器。除此之外,還可以配置為屏蔽位模式(ID+屏蔽)和標(biāo)識(shí)符列表(ID和屏蔽寄存器均用來(lái)做ID寄存器)模式。

  116、 CAN接收到有效報(bào)文被放置在3級(jí)郵箱深度的FIFO中,F(xiàn)IFO完全由硬件來(lái)管理。

  117、 CAN總線的波特率

  118、 觸摸屏一般分為電阻式觸摸屏和電容式觸摸屏。前者檢測(cè)觸摸的位置原理是利用觸摸屏控制器中的A/D轉(zhuǎn)換器經(jīng)過(guò)兩次A/D讀值后得出X和Y的坐標(biāo)值。注意:這個(gè)X和Y的值是相對(duì)于觸摸屏的,而非LCD屏。所以在這里需要注意兩個(gè)概念:觸摸屏和LCD屏。這是兩個(gè)不同的概念,也是兩個(gè)不同的物理結(jié)構(gòu),其中電阻觸摸屏是由上下兩個(gè)導(dǎo)電層中間夾著一層非常薄的透明隔層;而LCD就是指顯示屏。

  119、 電阻觸摸屏有X和Y、X和Y的比例因子、坐標(biāo)軸方向、偏移量。LCD也有自己的這些參數(shù)。兩者完全不相干,所以在定位的時(shí)候需要進(jìn)行坐標(biāo)轉(zhuǎn)換。公式:

  ,通過(guò)對(duì)屏幕的四個(gè)點(diǎn)進(jìn)行校準(zhǔn),得到四元一次方程,求解即可。

  120、 NEC協(xié)議的數(shù)據(jù)幀格式:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼由一個(gè)9ms的低電平和一個(gè)4.5ms的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是8位數(shù)據(jù)格式。按照低位在前,高位在后的順序發(fā)送。

  121、 NEC協(xié)議在發(fā)送的時(shí)候,會(huì)有560us的38KHz的載波信號(hào),而在接收的時(shí)候這部分載波信號(hào)被認(rèn)定為低電平,而剩余的(2.25ms-650us)的邏輯“1”和(1.12ms-650us)的邏輯“0”時(shí)間則被認(rèn)定為高電平。

  122、 在單位時(shí)間內(nèi)的位移被定義為速度,速度有線速度和角速度之分,分別對(duì)應(yīng)兩種傳感器測(cè)量這兩種不同的速度:線速度傳感器(加速度計(jì))、角速度傳感器(陀螺儀)。前者多應(yīng)用在靜態(tài)或者低慢速運(yùn)動(dòng)中的姿態(tài)求解,后者多應(yīng)用在動(dòng)態(tài)運(yùn)動(dòng)中姿態(tài)求解。

  123、 根據(jù)標(biāo)準(zhǔn)約定,零加速度(或零 G 準(zhǔn)位)通常定義為相當(dāng)于最大輸出值(12 位輸出為 4096,10 位輸出為 1024 等)一半的輸出。對(duì)于提供 12 位輸出的加速度計(jì),零 G 準(zhǔn)位將等于 2048。輸出大于 2048 表示正加速度。輸出小于 2048 表示負(fù)加速度。加速度的數(shù)量通常用單位 g (1g = 9.8m/s2 = 重力加速度)表示。通過(guò)確定測(cè)量的輸出與零 G 準(zhǔn)位之間的差值,然后除以加速度計(jì)的靈敏度(用計(jì)數(shù)/g 或 LSB/g表示)來(lái)計(jì)算加速度。對(duì)于提供 12 位數(shù)字輸出的 2g 加速度計(jì),靈敏度為 819 計(jì)數(shù)/g 或 819 LSB/g。加速度等于:a = (Aout - 2048)/(819 計(jì)數(shù)/g),單位為 g。

  124、 加速度計(jì)測(cè)得的加速度的方向和設(shè)備設(shè)定的坐標(biāo)系是相反的,因?yàn)樵肀砻髟跍y(cè)量力的時(shí)候采用的是非慣性系參考系,而我們高中時(shí)代研究的坐標(biāo)系是慣性系參考系,前者在物體進(jìn)行運(yùn)動(dòng)產(chǎn)生加速度時(shí),假想一個(gè)與速度方向相反的力作用在物體上,這個(gè)力就是慣性力;后者我們說(shuō)不存在慣性力,只說(shuō)存在慣性,因?yàn)樵趹T性坐標(biāo)系中,我們研究的是物體,而非坐標(biāo)系(即假定坐標(biāo)系相對(duì)地球靜止),當(dāng)我們把坐標(biāo)系也考慮在內(nèi)時(shí),當(dāng)坐標(biāo)系運(yùn)動(dòng),就產(chǎn)生了慣性力f,這種力作用會(huì)假想作用在物體上,只是與運(yùn)動(dòng)方向相反。

  125、 由上可知,加速度計(jì)的本質(zhì)是測(cè)量力而非加速度。

  126、 NRF24L01工作在2.4GHz的頻段,由于頻段頻率較高,所以傳輸速率較快,為2Mbps

  127、 STM32的閃存模塊由:主存儲(chǔ)器、信息塊和閃存存儲(chǔ)器接口寄存器3個(gè)部分構(gòu)成。主存儲(chǔ)器用來(lái)存放代碼和const常量;信息塊由兩個(gè)部分組成:?jiǎn)?dòng)程序代碼、用戶選擇字節(jié)。其中啟動(dòng)程序代碼為ST公司自帶的啟動(dòng)程序,用于串口下載。最后的閃存存儲(chǔ)器接口寄存器用于控制整個(gè)對(duì)閃存區(qū)域的操作。

  128、 CPU的運(yùn)行速度比FLASH的操作速度快的多,一般FLASH的最快訪問(wèn)速度≤24Mhz。如果CPU的速度超過(guò)這個(gè)頻率,那么在讀取FLASH的時(shí)候必須加入等待時(shí)間(FLASH_ACR設(shè)置)

  129、 FLASH編程時(shí),寫入必須為半字(16位)。并且在寫入的時(shí)候必須保證所寫區(qū)域的數(shù)據(jù)必須為0xFFFF。

  130、 STM32的FSMC有HADDR[27:0],其中[27:26]用來(lái)選擇BANK區(qū)域的4個(gè)不同塊。剩下的[25:0]則用來(lái)連接外部存儲(chǔ)區(qū)域的地址線FSMC_A[25:0]。如果數(shù)據(jù)寬度是8bit,此時(shí)的HADDR[25:0]和FSMC_A[25:0]是完全對(duì)應(yīng)的。如果數(shù)據(jù)寬度是16bit,此時(shí)的HADDR[25:1]和FSMC_A[24:0]是對(duì)應(yīng)起來(lái)的。需要注意:無(wú)論數(shù)據(jù)寬度是多少,外部的FSMC_A[0]和A[0]總是對(duì)應(yīng)的。

  131、 關(guān)于LB和UB的信號(hào)控制是由硬件自動(dòng)控制的,當(dāng)AHB的數(shù)據(jù)寬度小于外部存儲(chǔ)器的數(shù)據(jù)寬度時(shí),此時(shí)LB和UB的控制信號(hào)自動(dòng)產(chǎn)生(比如字節(jié)讀取/寫入16bit的外部存儲(chǔ)器)

  132、 __attribute__ (函數(shù)屬性、變量屬性、類型屬性等)。如果在使用SRAM時(shí),可以采用u32 sram_array[xx] __attribute__ ((at(0x68000000))代表將外部SRAM的空間全部給了sram_array這個(gè)變量,他具有在at0x68000000這個(gè)地址的屬性。往里面寫值就直接在SRAM里面寫值。

  133、

  內(nèi)存管理有一種方式叫做分塊式內(nèi)存管理。

  注意表中的分配方向,從頂?shù)降住C恳豁?xiàng)對(duì)應(yīng)一個(gè)內(nèi)存塊。里面的數(shù)值代表了內(nèi)存池的狀態(tài):如果為0,表示該內(nèi)存沒(méi)有被分配;如果非0,那么數(shù)值的大小就表示了該塊內(nèi)存被連續(xù)占用的內(nèi)存數(shù)。比如說(shuō)數(shù)值為20,意思是包括該項(xiàng)在內(nèi)的內(nèi)存塊被連續(xù)占用了20塊分給了指針。

  134、SD卡的分類:

  一般的SD卡支持兩種傳輸模式:SD卡模式(SDIO)、SPI模式。顯然前面一種是專用模式,所以速度比較快。

  135、 常用的漢字內(nèi)碼系統(tǒng)有GB2313、GB13000、GBK、BIG5(繁體)。其中GB2313只有幾千個(gè)漢字,而GBK則有2萬(wàn)多漢字。

  136、 要顯示漢字,采用的方式如果用點(diǎn)陣的形式是不可取的,因?yàn)檫@無(wú)法查找漢字。采用的方式就是內(nèi)碼系統(tǒng)。GBK標(biāo)準(zhǔn)中,一個(gè)漢字對(duì)應(yīng)2個(gè)字節(jié):前者稱為區(qū)(0x81~0xFE)后者為(0x40~0x7E)和(0x80~0xFE)。前者有126個(gè)區(qū),后者有190,那么可以顯示的漢字?jǐn)?shù)量有126*190=23940個(gè)。根據(jù)這兩個(gè)值用來(lái)查找字庫(kù),字庫(kù)中存放的還是每個(gè)漢字的點(diǎn)陣數(shù)據(jù)。這個(gè)字庫(kù)非常大,如果是16*16的字體,那么一個(gè)字體就需要32個(gè)字節(jié),如此說(shuō)來(lái)需要23940*32=748K的空間,可見非常大,所以需要外部的Flash來(lái)存儲(chǔ)這個(gè)字庫(kù)。

  137、 由于漢字內(nèi)碼系統(tǒng)不具有國(guó)際通用性,但是Unicode幾乎把所有的語(yǔ)言都放置進(jìn)來(lái),這樣在單片機(jī)中操作漢字時(shí),就需要將GBK和Unicode轉(zhuǎn)化。尤其是在FATFS中,創(chuàng)建中文文件名和讀取中文文件信息時(shí)需要將Unicode換轉(zhuǎn)為GBK后再進(jìn)行修改操作,再反轉(zhuǎn)換成Unicode保存修改。這么說(shuō),兩者的存在是由于標(biāo)準(zhǔn)的不統(tǒng)一,并且Unicode中只有6064個(gè)漢字,而GBK顯然是一種漢字?jǐn)U展。

  138、 BMP圖片編碼的順序是從左到右,從下到上。

  139、 VS1053是一款高性能的數(shù)字音頻解碼芯片,從SD卡中將mp3等音樂(lè)音頻文件通過(guò)SPI送給VS1053后,由其進(jìn)行音頻解碼,輸出音樂(lè)給耳機(jī)。耳機(jī)驅(qū)動(dòng)可以采用TDA1308芯片,這款芯片為AB類耳機(jī)驅(qū)動(dòng)芯片。

  140、

  141、 IAP(In Application Programming)在應(yīng)用編程是為了后期開發(fā)更新程序方便而提出的概念。具體的實(shí)現(xiàn)方法如下圖所示:

  在普通編程中,flash中的code是通過(guò)JTAG和ISP等工具下載到單片機(jī)中。而在IAP編程中,flash被分區(qū)為A和B兩個(gè)區(qū)域,A區(qū)域只允許用USB/USART等方式下載,此區(qū)域作為更新B區(qū)域的代碼用。B區(qū)域則是用戶的code區(qū)域,真正的代碼在這里被執(zhí)行,放置的就是app。

  上圖表示STM32正常運(yùn)行的流程圖,可以看到上電復(fù)位后系統(tǒng)從0x80000004處開始運(yùn)行程序,這里放置的是復(fù)位中斷向量,然后跳轉(zhuǎn)至復(fù)位中斷程序入口后再跳轉(zhuǎn)至main函數(shù)運(yùn)行用戶的程序。

  上圖表示加入IAP后的STM32程序運(yùn)行流程圖。可以看到上電復(fù)位后跳到IAP程序的main函數(shù)處運(yùn)行IAP過(guò)程(這個(gè)過(guò)程就是把下面灰底色塊的程序代碼燒進(jìn)B區(qū)域à代碼更新)。后面的過(guò)程和STM32正常運(yùn)行一樣,如果出現(xiàn)中斷請(qǐng)求,還是跳轉(zhuǎn)到A區(qū)域中的中斷向量表中,然后再跳轉(zhuǎn)到B區(qū)域的中斷服務(wù)入口。

  142、 USB有四根線,VCC、GND、D+、D-。在USB主機(jī)上,D+和D-均通過(guò)一個(gè)15K的電阻接地,這樣兩條線均為低電平。在USB設(shè)備中,對(duì)于高速設(shè)備會(huì)在D+通過(guò)一個(gè)1.5K的電阻接到VCC,而低俗設(shè)備會(huì)在D-通過(guò)一個(gè)1.5K的電阻接到VCC。這樣主機(jī)就可以通過(guò)D+和D-的高電平的到來(lái)來(lái)檢測(cè)是否有設(shè)備接入,并且識(shí)別高低速設(shè)備。

  143、 UCOSII是一種實(shí)時(shí)操作系統(tǒng),具有執(zhí)行效率高、占有空間小(最小內(nèi)核2KB)、實(shí)施性能優(yōu)良、擴(kuò)展性強(qiáng)和移植性強(qiáng)等優(yōu)點(diǎn)。

  UCOS具有多任務(wù)并發(fā)工作的特點(diǎn)(注意,任何時(shí)候只有一個(gè)任務(wù)能夠占用CPU。并發(fā)只是任務(wù)輪流占用CPU而不是同時(shí)工作)。最大支持255個(gè)任務(wù)并發(fā)工作。

  stm32單片機(jī)自學(xué)方法,主要是做好這四個(gè)步驟!

  1.建立開發(fā)環(huán)境

  我選擇的是通用的MDK,也就是Keil5。安裝完軟件以后,要安裝類似于芯片型號(hào)的庫(kù),就是新建工程時(shí)選擇的芯片型號(hào)。

  2.準(zhǔn)備一塊開發(fā)板和豐富的資料例程

  推薦選擇最小系統(tǒng)板,個(gè)人感覺(jué)這樣可以自己學(xué)會(huì)外圍電路的搭建。避免依賴開發(fā)板的電路。(其實(shí)就是太窮,買不起開發(fā)板,哈哈)開發(fā)板這塊如果是新手建議買F103系列的,這個(gè)系列產(chǎn)品用的很多,也更容易上手。不要一上來(lái)就要干最高配,一口想吃成胖子最后大概率都是失敗結(jié)尾。

  3.了解STM32

  這個(gè)階段可以看視頻教程,一般教程都會(huì)有基本的介紹

  4.開始學(xué)習(xí)推薦使用庫(kù)函數(shù)開發(fā)的方法。這樣很多底層的寄存器不需要自己配置,只要會(huì)用官方庫(kù)函數(shù)就行了。配合庫(kù)函數(shù)使用手冊(cè),可以清楚的查到每個(gè)函數(shù)的使用方法。

  很多初學(xué)者面臨的難題就是不知從何入手??傁敫?1一樣弄明白基礎(chǔ)的東西,又感覺(jué)太復(fù)雜。因此推薦先使用例程的工程文件,逐步學(xué)習(xí)如何修改。比如點(diǎn)亮流水燈的工程,對(duì)于IO口的操作并不太復(fù)雜,初始化完成之后通過(guò)Setbit和Resetbit這兩個(gè)函數(shù)就可以實(shí)現(xiàn)高低電平的輸出。然后,可以試著改一下亮滅,增加一個(gè)按鍵控制,中斷延時(shí),等等。

  當(dāng)你學(xué)到STM32的時(shí)候,說(shuō)明已經(jīng)有一定的基礎(chǔ)了。

  這個(gè)時(shí)候我建議你直接通過(guò)STM32開發(fā)的產(chǎn)品去學(xué)習(xí)單片機(jī),這樣學(xué)完以后既學(xué)會(huì)了STM32,也有了產(chǎn)品思維,到時(shí)候拿著產(chǎn)品去面試,成功率也會(huì)高幾倍。

  那這種產(chǎn)品去哪里找?這塊【華維單片機(jī)編程】有提供這樣的基于產(chǎn)品的開發(fā)板,往物聯(lián)網(wǎng)方向的。

  整個(gè)硬件和軟件都是基于實(shí)際產(chǎn)品改版,學(xué)完以后可以無(wú)縫對(duì)接實(shí)際工作的產(chǎn)品開發(fā)。

  最后說(shuō)一下,很多人學(xué)STM32會(huì)犯的錯(cuò)誤,就是總是想系統(tǒng)學(xué)習(xí),巴不得從內(nèi)核結(jié)構(gòu)要寄存器配置,到固件庫(kù)代碼都搞懂,這是不現(xiàn)實(shí)的

  當(dāng)你有這種思維的時(shí)候注定要走很多彎路,很有可能會(huì)越走越遠(yuǎn)!

  并不是說(shuō)有些基礎(chǔ)不重要,而是人在不同階段理解能力是不同的。

  比如你是新手,剛學(xué)完C語(yǔ)言沒(méi)多久,你就想去吃透別人固件庫(kù),現(xiàn)實(shí)嗎?

  新手在第一階段的目標(biāo)很簡(jiǎn)單,把stm32當(dāng)做一個(gè)工具,學(xué)會(huì)常用外設(shè)的使用,別的一律不管。

  然后開始做項(xiàng)目,幾個(gè)項(xiàng)目下來(lái),你再去研究他們固件庫(kù)學(xué)習(xí)下程序架構(gòu)會(huì)有不一樣的感受。

  芯片嘛,我個(gè)人認(rèn)為能用起來(lái)就行了,畢竟快速做出產(chǎn)品才是重要的。

  總而言之。如果是剛?cè)腴T單片機(jī)的,建議還是從51單片機(jī)開始學(xué)起。8位機(jī)在實(shí)踐經(jīng)驗(yàn),是一個(gè)硬件工程師的基礎(chǔ),先不說(shuō)4位機(jī)。

  現(xiàn)在網(wǎng)上的普遍現(xiàn)象,有些自以為很牛逼的老鳥人建議直接越級(jí)學(xué)stm32單片機(jī),很多人會(huì)學(xué)得很困難,理解上很有偏差,不排除有些人天賦異稟可以不必完全弄清楚硬件結(jié)構(gòu)和原理。

  站在老鳥的角度,覺(jué)得stm32很簡(jiǎn)單,站在新手的角度有多難和迷茫只有自己知道。

  但相信大多數(shù)都喜歡單片機(jī),就會(huì)有學(xué)單片機(jī)就學(xué)stm32的錯(cuò)覺(jué)!

  學(xué)習(xí)51單片機(jī)的目的,主要是培養(yǎng)直接調(diào)試寄存器與軟硬件接口bug的能力,內(nèi)部結(jié)構(gòu)和寄存器數(shù)量及難度都是一個(gè)新手可以接受的范圍,慢慢就認(rèn)識(shí)了單片機(jī)

  STM32復(fù)雜而多樣的內(nèi)部結(jié)構(gòu)和功能部件,光寄存器就可能上百個(gè),軟件也是基于固件庫(kù)開發(fā),基本不會(huì)接觸到寄存器配置。

  如果對(duì)這塊基礎(chǔ)的缺失會(huì)導(dǎo)致你后面在學(xué)習(xí)過(guò)程中,每學(xué)到一個(gè)知識(shí)點(diǎn)都是一臉懵逼,導(dǎo)致整體知識(shí)體系是畸形的!白白浪費(fèi)時(shí)間

  比如說(shuō)為什么這么配置?配置怎么改?改出問(wèn)題,要怎么解決,你都會(huì)繞很多彎路。

  如何系統(tǒng)地入門學(xué)習(xí)stm32?

  我從事單片機(jī)開發(fā)多年,用過(guò)非常多芯片,有stc、中穎、GD、新唐、BLE、Zigbee、NXP、還有一些國(guó)產(chǎn)SOC等等,唯獨(dú)ST的讓我最省心,不管是STM8還是STM32。

  省心只要是體現(xiàn)在穩(wěn)定,只需要按照常規(guī)方法配置就不會(huì)有亂七八糟奇奇怪怪的問(wèn)題出現(xiàn)。

  之前碰到過(guò)最蛋疼的芯片,有些Flash會(huì)掉數(shù)據(jù),有些串口不穩(wěn)定,最后還得用程序來(lái)規(guī)避芯片的不人性化,明明1個(gè)小時(shí)能搞定的,硬是給這些奇怪的問(wèn)題拖了幾天。

  如果說(shuō)在樣品階段測(cè)試出來(lái)還好,如果是大批量才慢慢出現(xiàn)這些問(wèn)題,估計(jì)老板撕了你的心都有。

  所以在成本要求不是特別苛刻的情況下,我一般都會(huì)用ST的。

  STM32對(duì)剛?cè)腴T的不是那么友好,但是對(duì)有一點(diǎn)開發(fā)經(jīng)驗(yàn)的,還是能大大縮短開發(fā)周期的。

  那新手要如何去學(xué)習(xí)STM32呢?無(wú)際根據(jù)自己的經(jīng)歷總結(jié)出最有建設(shè)性的學(xué)習(xí)方法,如果你能適應(yīng)這種學(xué)習(xí)方法,1周搞定stm32絕對(duì)沒(méi)問(wèn)題!

  1. 改變思維

  當(dāng)你有系統(tǒng)學(xué)習(xí)stm32的時(shí)候,就注定你會(huì)走很多彎路,甚至浪費(fèi)很多時(shí)間最后也學(xué)不會(huì)。

  因?yàn)閮?nèi)部結(jié)構(gòu)越復(fù)雜的單片機(jī),你學(xué)習(xí)需要花費(fèi)的時(shí)間就越多。

  但是你有沒(méi)有想過(guò),你學(xué)單片機(jī)的目的是什么?

  肯定不可能只是為了學(xué)單片機(jī)這么簡(jiǎn)單對(duì)吧?而是通過(guò)單片機(jī)來(lái)做產(chǎn)品,或者說(shuō)DIY一些有趣的項(xiàng)目。

  人的一天真正高效工作學(xué)習(xí)的時(shí)間或許8小時(shí)都不到,我們?cè)趺蠢煤眠@8個(gè)小時(shí)直接決定你和別人的差距。

  比如說(shuō)我做一件事,我會(huì)拆解完成這件事我要做哪些工作,然后把最核心的環(huán)節(jié)拿出來(lái)優(yōu)先做,就像做產(chǎn)品,先實(shí)現(xiàn)功能再優(yōu)化細(xì)節(jié)。

  同樣的方法用在學(xué)習(xí)stm32也很合適,stm32在整個(gè)產(chǎn)品當(dāng)中其實(shí)只是一個(gè)工具而已。

  既然是工具,那當(dāng)然是能用起來(lái)就行了,無(wú)非就是用芯片的外設(shè)而已,你系統(tǒng)的去研究它干嘛?

  2. 正確學(xué)習(xí)姿勢(shì)

  我一直都比較提倡新手從51單片機(jī)學(xué)起,把精力放在c編程和培養(yǎng)項(xiàng)目思維上,與其有空去深挖單片機(jī),還不如多做幾個(gè)項(xiàng)目。

  我剛開始是使用stc的芯片做過(guò)幾個(gè)項(xiàng)目,然后產(chǎn)品需要接觸到stm32。

  我先把產(chǎn)品需要用到的單片機(jī)外設(shè)整理出來(lái),再買一個(gè)開發(fā)板,然后把我要的外設(shè)先在開發(fā)板上跑一遍。

  同一個(gè)例程我會(huì)改一些參數(shù),比如說(shuō)換個(gè)引腳、換個(gè)定時(shí)時(shí)間、換個(gè)串口,換個(gè)ADC通道,DMA通道等等。

  大概知道知道怎么配置以后,我就不會(huì)再去研究別的功能了,比如內(nèi)部時(shí)鐘樹架構(gòu),USB、CAN、FSMC這些。

  照樣不影響我把產(chǎn)品做出來(lái),慢慢地我經(jīng)驗(yàn)也豐富了,對(duì)stm32也熟悉了,就是這么自然而然的過(guò)程。

  3. 最后總結(jié)

  一個(gè)新鮮事物,我認(rèn)為正確的順序應(yīng)該是先用起來(lái),用熟了你再去研究它原理會(huì)事半功倍。

  很多人說(shuō)單片機(jī)很簡(jiǎn)單,沒(méi)前途,玩linux才牛逼。

  我個(gè)人的觀點(diǎn)是,如果你把思維局限在單片機(jī)上確實(shí)是。

  對(duì)于老手來(lái)說(shuō),單片機(jī)只不過(guò)一個(gè)工具而已,核心的還是你的編程水平和產(chǎn)品思維以及在這個(gè)行業(yè)的經(jīng)驗(yàn)。

  在我看來(lái),不見得玩Arm+Linux就比單片機(jī)的工資高或者牛逼。

  任何行業(yè)都有大神和半桶水,

  如果你能編寫一個(gè)類似于Ti藍(lán)牙協(xié)議棧的輕量級(jí)系統(tǒng)在單片機(jī)中運(yùn)行,你覺(jué)得技術(shù)會(huì)比Linux差嗎?

  或許他們對(duì)系統(tǒng)的理解都沒(méi)你深,更別說(shuō)對(duì)硬件驅(qū)動(dòng)的理解了。


責(zé)任編輯:David

【免責(zé)聲明】

1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。

2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。

3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。

4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。

拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。

標(biāo)簽: stm32單片機(jī)

相關(guān)資訊

資訊推薦
芯片lm2596s開關(guān)電壓調(diào)節(jié)器的中文資料_引腳圖及功能_內(nèi)部結(jié)構(gòu)及原理圖_電路圖及封裝

芯片lm2596s開關(guān)電壓調(diào)節(jié)器的中文資料_引腳圖及功能_內(nèi)部結(jié)構(gòu)及原理圖_電路圖及封裝

28nm光刻機(jī)卡住“02專項(xiàng)”——對(duì)于督工部分觀點(diǎn)的批判(睡前消息353期)

28nm光刻機(jī)卡住“02專項(xiàng)”——對(duì)于督工部分觀點(diǎn)的批判(睡前消息353期)

2023手機(jī)傳感器排行榜,imx傳感器天梯圖排行榜2023

2023手機(jī)傳感器排行榜,imx傳感器天梯圖排行榜2023

lt1083典型應(yīng)用電路分析 LT1083構(gòu)建7.5A穩(wěn)壓器

lt1083典型應(yīng)用電路分析 LT1083構(gòu)建7.5A穩(wěn)壓器

接近開關(guān)信號(hào)正常,可PLC就是沒(méi)輸入!

接近開關(guān)信號(hào)正常,可PLC就是沒(méi)輸入!

齊納二極管怎么使用

齊納二極管怎么使用

拍明芯城微信圖標(biāo)

各大手機(jī)應(yīng)用商城搜索“拍明芯城”

下載客戶端,隨時(shí)隨地買賣元器件!

拍明芯城公眾號(hào)
拍明芯城抖音
拍明芯城b站
拍明芯城頭條
拍明芯城微博
拍明芯城視頻號(hào)
拍明
廣告
恒捷廣告
廣告
深亞廣告
廣告
原廠直供
廣告
XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

          特黄毛片免费看| 中文高清av| 男女爽爽爽免费视频| 欧美一级爽| 国产乱老熟妇吃嫩| 国产66精品久久久久999小说| 久久久永久久久人妻精品麻豆 | 国产大片一区二区| 欧美三级国产一级| 欧美极品少妇xxxx| 日韩中文字幕av| 日韩人妻久久久| 91黄色视屏| 少妇张开双腿| 77影视网| 亚洲av综合一区| 尤物精品在线观看| 苍井そら无码av| 亚洲国精产品二二三三区| 欧美性生交xxxx| 丝袜高跟av| 国产精品高潮呻吟视频| 熟妇人妻AV无码一区二区三区| 国产精品一区免费| 日韩欧美激情| av先锋资源| 樱桃小视频在线| 91精品国产综合久久精品| 午夜福利强行xxoo视频| 亚洲黄色美女| 免费a级黄毛片| 亚洲欧美日韩人妻| 久久99精品久久久久久三级小说| 波多野结av衣东京热无码专区 | 99热在线看| 无码人妻精品中文字幕免费时间| 欧美jizz性欧美18| 国产精品久久久久一区二区三区| 国产精品对白久久久久粗| 亚洲AV激情无码专区在线播放| 亚洲丰满性熟妇|