前言
上一篇中我們重點(diǎn)是講了一下怎么搭建開(kāi)發(fā)環(huán)境以及怎么下載燒錄的過(guò)程,這都是解決的電腦端的開(kāi)發(fā)環(huán)境問(wèn)題,還沒(méi)有到實(shí)際的開(kāi)發(fā)板上,我們的單片機(jī)是都是焊接在開(kāi)發(fā)板上的,PCB上有著它所需的工作電路。并不是直接給供電電壓就可以讓其工作的,本文主要是簡(jiǎn)介一下STM32的開(kāi)發(fā)的部分硬件知識(shí)。
單片機(jī)參數(shù)
主頻
在前面我們提到過(guò)ARM的不同架構(gòu)的主頻是不一樣的,這個(gè)主頻在單片機(jī)上的提現(xiàn)就是頻率,也就是它決定著單片機(jī)的性能或者說(shuō)是處理速度,主頻越高,單位時(shí)間內(nèi)可以處理的指令越多,處理速度越快,性能自然也就越高。
例如:STM32F103ZET6的主頻是72MHZ那么就說(shuō)明它在一秒內(nèi)可以處理72M(72 000 000)條機(jī)器指令,注意是機(jī)器指令,不是代碼條數(shù),我們所有的代碼都是被編譯器編譯二進(jìn)制的機(jī)器指令供給單片機(jī)運(yùn)行的,在編程中,最開(kāi)始使用一種基礎(chǔ)延時(shí),就是利用單片機(jī)運(yùn)行一定數(shù)量的機(jī)器周期實(shí)現(xiàn)的,而且所有的片內(nèi)外設(shè)都離不開(kāi)時(shí)鐘操作,所以對(duì)于主頻這個(gè)參數(shù)我們一定要清楚。
位數(shù)
前面也提到過(guò),STM32是一款32位的單片機(jī),這個(gè)32位的具體含義是個(gè)指在運(yùn)行過(guò)程中,單次運(yùn)行能夠處理多少位的二進(jìn)制數(shù),像51單片機(jī)這類(lèi)8位單片機(jī),單次就只能處理8個(gè)二進(jìn)制位,也就是256種狀態(tài),而STM32單次可以處理32位,也就是2^32種狀態(tài),差別可以說(shuō)是很夸張了,當(dāng)然實(shí)際中沒(méi)有這么夸張,一般都是把一個(gè)32位的寄存器分段定義給不同的外設(shè)來(lái)進(jìn)行控制的,這個(gè)在下一篇的寄存器控制GPIO中就會(huì)提到??傊?,位數(shù)也是決定單片機(jī)性能的一個(gè)參數(shù)。
STM32最小系統(tǒng)
關(guān)于STM32最小系統(tǒng)的含義直接看看“C知道”的說(shuō)法吧,怎么說(shuō)呢,這個(gè)答案差點(diǎn)意思,但是也八九不離十,個(gè)人理解STM32最小系統(tǒng)就是能讓它運(yùn)行起來(lái)的最小電路結(jié)構(gòu),以STM32為核心,圍繞其管腳設(shè)置有晶振電路、電源電路、復(fù)位電路、BOOT選擇電路、調(diào)試接口電路,以及外接GPIO口。下面我們就以幾塊常見(jiàn)開(kāi)發(fā)板為例,分模塊進(jìn)行介紹。
電源電路
電源是為STM32以及整個(gè)開(kāi)發(fā)板提供驅(qū)動(dòng)能源的,查看STM32的數(shù)據(jù)手冊(cè)我們可以看到其對(duì)于電源的要求,在手冊(cè)第五章,有一個(gè)電源架構(gòu)圖,其中VDD是標(biāo)準(zhǔn)工作電壓,STM32的標(biāo)準(zhǔn)工作電壓是3.3V,而VREF是參考電壓,是為ADC、DAC提供參考的,VBAT是后備區(qū)域供電腳。
注意在VDD左邊還放置了一個(gè)15100nf+14.7uf,這是因?yàn)镾TM32有多組電源引腳,這些都是用來(lái)對(duì)電源進(jìn)行濾波的小電容主要是用來(lái)濾除電源中的高頻雜波,而大電容一方面是濾除低頻噪聲,另一方是起到一個(gè)電源抗擾作用,可以在一定程度上防止電源被拉低。
根據(jù)芯片手冊(cè)的描述,各個(gè)開(kāi)發(fā)板生產(chǎn)商都會(huì)按照要求來(lái)制作自己的電路,
可以發(fā)現(xiàn)產(chǎn)商都是嚴(yán)格參照數(shù)據(jù)標(biāo)準(zhǔn)進(jìn)行設(shè)計(jì)的下圖是正點(diǎn)原子的探索者開(kāi)發(fā)板的電源部分截圖。
在進(jìn)行PCB繪制的時(shí)候就需要將上面的104電容放到每一組電源之前,下圖為立創(chuàng)的梁山派,白色部分為VDD電源輸入,可以看見(jiàn)每一組接到管腳的電源都是經(jīng)過(guò)了一個(gè)電容濾波的。
如果是自己做開(kāi)發(fā)板必須嚴(yán)格參照數(shù)據(jù)手冊(cè)的電壓電流限制,以及其他硬性指標(biāo),而且要多多參考市面上已有方案的設(shè)計(jì),可以借鑒。當(dāng)然軟件開(kāi)發(fā)的人也并不是一點(diǎn)硬件都不用管,就好比你去做開(kāi)發(fā),突然單片機(jī)不工作了,我們排除問(wèn)題的首選就是要去查看電源電壓是否還正常,要去測(cè)一下STM32的3.3V供電還是否正常,如果電源電壓都異常了,大概率是芯片短路了或者部分引用電路短路了。
正點(diǎn)原子資料下載中心http://www.openedv.com/docs/index.html
在設(shè)計(jì)單片機(jī)的電源時(shí),盡量選用LDO(線(xiàn)性電源)而非DCDC(開(kāi)關(guān)電源),原因在于,DCDC的紋波大,會(huì)影響單片機(jī)的運(yùn)行穩(wěn)定性。
晶振電路
晶振電路的作用是給單片機(jī)運(yùn)行提供一個(gè)準(zhǔn)確的時(shí)間基準(zhǔn),保證單片能夠有序的運(yùn)行。
在芯片手冊(cè)中關(guān)于振蕩頻率的描述是說(shuō)需要選取4-26MHZ的振蕩源(晶振)
然后官方給出了一個(gè)8MHZ的參考電路,現(xiàn)在大部分廠(chǎng)商的外置晶振都是參照的下面這個(gè)8MHZ。而且給出了CL1與CL2的參考容值,以及特別說(shuō)明PCB走線(xiàn)時(shí)MCU的腳必須盡可能的接近此電路。
下圖是正點(diǎn)原子的探索者所用的:
細(xì)心同學(xué)可能發(fā)現(xiàn)了,很多開(kāi)發(fā)板上除了一個(gè)8M的晶振還有個(gè)32.768K的晶振電路,那么為什么有兩個(gè)晶振電路呢,實(shí)際上整開(kāi)發(fā)板還不止這兩個(gè)時(shí)鐘電路,這個(gè)在芯片的時(shí)鐘樹(shù)就可以看出來(lái)了
A: LSI RC:內(nèi)部低速時(shí)鐘
B : LSE :外部低速時(shí)鐘,也就是我們看見(jiàn)的板子上的另外一個(gè)晶振電路。
C:HSE:外部高速時(shí)鐘,HSE 的特點(diǎn)是精度非常高,上面的那個(gè)8MHZ的晶振電路。
注:諧振器和負(fù)載電容必須盡可能地靠近振蕩器的引腳,以盡量減小輸出失真和起振穩(wěn)定時(shí)間。負(fù)載電容值必須根據(jù)所選振蕩器的不同做適當(dāng)調(diào)整。也就是上面提到的PCB走線(xiàn)及布局時(shí)要盡可能接近芯片,減少失真。
D:HSI:內(nèi)部高速時(shí)鐘,可以不接外部時(shí)鐘直接使用其作為時(shí)鐘源但是其存在不穩(wěn)定性,精度也不及外部晶振。
小結(jié):STM32的時(shí)鐘系統(tǒng)既有內(nèi)部時(shí)鐘又有外部時(shí)鐘,既有低速時(shí)鐘又有高速時(shí)鐘,內(nèi)部時(shí)鐘能用,但是穩(wěn)定性和精度都不是好,但是可以節(jié)省外部元器件,在一定程度上降低了成本;外部時(shí)鐘有更好的穩(wěn)定性,更高的速度,只是布線(xiàn)時(shí)需要注意盡可能的接近單片機(jī)的引腳。下圖中紅框就是立創(chuàng)梁山派的兩組晶振電路,距離主控MCU非常近。
復(fù)位電路
我們?nèi)粘J褂秒娔X或者手機(jī)的時(shí)候會(huì)偶然遇到卡死的狀況,單片機(jī)也不例外,出現(xiàn)程序卡死就需要使用到復(fù)位,讓代碼重頭開(kāi)始運(yùn)行;同理,掉電的一瞬間單片機(jī)也不知道運(yùn)行到哪兒了,如果上電不設(shè)置復(fù)位,那么就可能造成代碼混亂,所以我們需要設(shè)置上電復(fù)位電路,保證上電后代碼都說(shuō)是從第一行開(kāi)始運(yùn)行。
STM32是低電平復(fù)位,所以正常工作時(shí)我們需要為其上拉一個(gè)電阻,提供高電平。關(guān)于復(fù)位的邏輯要求芯片手冊(cè)中也已經(jīng)給出,復(fù)位時(shí)復(fù)位管腳需要一個(gè)小于0.8V的電壓,且時(shí)間要持續(xù)20us(濾波后的低脈沖時(shí)間是100ns未濾波的需要300ns)。這樣就可以復(fù)位了。
手冊(cè)中也給出了一個(gè)復(fù)位電路但這個(gè)電路是靠NRST管腳內(nèi)部上拉來(lái)實(shí)現(xiàn)正常工作時(shí)的NRST保持高電平,此電路僅僅實(shí)現(xiàn)了一個(gè)硬件復(fù)位的功能,但是現(xiàn)在似乎很少見(jiàn)這種方案的(筆者猜測(cè)是因?yàn)閮?nèi)部上拉太弱了,效果不好,僅僅是猜測(cè),懂得老鐵麻煩在評(píng)論區(qū)說(shuō)一聲)。
現(xiàn)在比較主流的方案是在此電路的基礎(chǔ)上再上拉一個(gè)電阻,形成一個(gè)RC電路,這樣在上電的時(shí)候,得益于電容充電的延時(shí)作用,這個(gè)延時(shí)時(shí)間大約為:t=0.35RC=350us(計(jì)算過(guò)程參考此文——http://t.csdn.cn/8jiKg),對(duì)于20us的邏輯要求綽綽有余,這樣就實(shí)現(xiàn)了一個(gè)上電復(fù)位的效果。同時(shí)還兼顧硬件復(fù)位的功能。
復(fù)位實(shí)物圖:
BOOT選擇電路
關(guān)于BOOT選擇電路說(shuō)白了就是決定單片機(jī)從哪兒讀取程序開(kāi)始啟動(dòng),有時(shí)候代碼量超出了片內(nèi)FLASH的存儲(chǔ)量,需要外掛內(nèi)存來(lái)存儲(chǔ)代碼,這時(shí)候就需要改變BOOT來(lái)實(shí)現(xiàn)擴(kuò)容,實(shí)際使用過(guò)程中一般都是夠用的,除了存圖片之類(lèi)的可能會(huì)超出,一般內(nèi)置FLASH的空間就夠用。
還有就是有時(shí)候會(huì)因?yàn)橐幌麓a時(shí)序問(wèn)題導(dǎo)致芯片內(nèi)部時(shí)序崩潰,無(wú)法正常燒錄和運(yùn)行,這時(shí)候就可以借用BOOT的啟動(dòng)方式來(lái)擦除不正常的代碼。
出現(xiàn)ST-LINK無(wú)法識(shí)別單片機(jī)內(nèi)核,而按下復(fù)位又可以看見(jiàn)內(nèi)核,卻無(wú)法燒錄時(shí)可以參考此文進(jìn)行BOOT操作,就可以解決——Invalid ROM Table解決方法_STM32http://t.csdn.cn/Nls6p
調(diào)試接口電路
前面概述的時(shí)候我們還有看見(jiàn)過(guò)一個(gè)東西就是下圖所示的JTAG/SW debug這兩種接口都是用來(lái)調(diào)試的,要知道,開(kāi)發(fā)過(guò)程中不可能一蹴而就的,整個(gè)產(chǎn)品的大量時(shí)間都是用來(lái)調(diào)試的,單片機(jī)廠(chǎng)商也都會(huì)留出調(diào)試的用的IO口。
其中SWD需要占用兩個(gè)專(zhuān)用IO口,SWDIO與SWCLK,這個(gè)與我們使用的ST-LINK是對(duì)應(yīng)的。
還有一種JTAG的調(diào)試方式,需要使用五個(gè)管腳。
而JTAG模式的IO包含著SW的IO口,所以我們常見(jiàn)的調(diào)試接口是2*10pin的排線(xiàn)接口。
以上就是最小系統(tǒng)的常見(jiàn)和必要電路了,除此之外我們還需要讀懂一些外設(shè)的連接方式圖,在原理圖中網(wǎng)絡(luò)標(biāo)號(hào)一致的代表這兩個(gè)位置是連接在一起的。
其他電路
除了上述必須要的電路結(jié)構(gòu)以外,通常開(kāi)發(fā)板上還會(huì)設(shè)置LED燈的驅(qū)動(dòng)、蜂鳴器的驅(qū)動(dòng)等等。這些電路也都是我們需要能夠看明白的,也需要有排查能力,遇到外設(shè)問(wèn)題要先自己排查,確保不是程序問(wèn)題再去找其他同事幫忙?,F(xiàn)在這個(gè)壓力超大的時(shí)代,能不麻煩別人盡量不麻煩,能自己解決就不辛苦他人。
關(guān)于其他電路我們?cè)诤竺娴奈恼轮杏龅揭粋€(gè)介紹一個(gè),不在此做總論述。
想要詳細(xì)了解的可以去原子的開(kāi)源廣場(chǎng)下載資料查看,下圖就來(lái)自正點(diǎn)原子的開(kāi)源資料。
本文重點(diǎn)
掌握最小系統(tǒng)的構(gòu)成、知道BOOT選擇、調(diào)試接口怎么使用。
本文參考博客鏈接
1.認(rèn)識(shí)STM32最小系統(tǒng)http://t.csdn.cn/4ShDQ
2.STM32 最小系統(tǒng)中的4種電路http://t.csdn.cn/ys4pO
3.STM32F103C8T6復(fù)位電路設(shè)計(jì)http://t.csdn.cn/8jiKg
4.STM32 復(fù)位電路設(shè)計(jì)http://t.csdn.cn/XrRVY
5.STM32 最小系統(tǒng)http://t.csdn.cn/tBM50文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-813676.html
M4系列目錄
1.嵌入式學(xué)習(xí)筆記——概述
2.嵌入式學(xué)習(xí)筆記——基于Cortex-M的單片機(jī)介紹
3.嵌入式學(xué)習(xí)筆記——STM32單片機(jī)開(kāi)發(fā)前的準(zhǔn)備
4.嵌入式學(xué)習(xí)筆記——STM32硬件基礎(chǔ)知識(shí)
5.嵌入式學(xué)習(xí)筆記——認(rèn)識(shí)STM32的 GPIO口
6.嵌入式學(xué)習(xí)筆記——使用寄存器編程操作GPIO
7.嵌入式學(xué)習(xí)筆記——寄存器實(shí)現(xiàn)控制LED小燈
8.嵌入式學(xué)習(xí)筆記——使用寄存器編程實(shí)現(xiàn)按鍵輸入功能
9.嵌入式學(xué)習(xí)筆記——STM32的USART通信概述
10.嵌入式學(xué)習(xí)筆記——STM32的USART相關(guān)寄存器介紹及其配置
11.嵌入式學(xué)習(xí)筆記——STM32的USART收發(fā)字符串及串口中斷
12.嵌入式學(xué)習(xí)筆記——STM32的中斷控制體系
13.嵌入式學(xué)習(xí)筆記——STM32寄存器編程實(shí)現(xiàn)外部中斷
14.嵌入式學(xué)習(xí)筆記——STM32的時(shí)鐘樹(shù)
15.嵌入式學(xué)習(xí)筆記——SysTick(系統(tǒng)滴答)
16.嵌入式學(xué)習(xí)筆記——M4的基本定時(shí)器
17.嵌入式學(xué)習(xí)筆記——通用定時(shí)器
18.嵌入式學(xué)習(xí)筆記——PWM與輸入捕獲(上)
19.嵌入式學(xué)習(xí)筆記——PWM與輸入捕獲(下)
20.嵌入式學(xué)習(xí)筆記——ADC模數(shù)轉(zhuǎn)換器
21.嵌入式學(xué)習(xí)筆記——DMA
22.嵌入式學(xué)習(xí)筆記——SPI通信
23.嵌入式學(xué)習(xí)筆記——SPI通信的應(yīng)用
24嵌入式學(xué)習(xí)筆記——IIC通信文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-813676.html
到了這里,關(guān)于嵌入式學(xué)習(xí)筆記——STM32硬件基礎(chǔ)知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!