今天來說說高端處理器的基本知識,開發(fā)32位單片機首先要了解基本芯片的硬件基礎,所以今天就講講基于STM32的硬件資源。
STM32基礎硬件知識
STM32與單片機的硬件接口基本一致,都是調用硬件接口控制I/O,完成相應的功能。另外,STM32在軟件方面具有ST官方的源代碼開放的庫文件,開發(fā)速度相對輕松方便,而且BUG較少。
本文以STM32F103為例對STM32的硬件資源進行介紹。
1、STM32最小系統(tǒng)
72 MHz -40~105°C ,有內置的ARM核心,因此它與所有的ARM工具和軟件兼容, 128k 閃存。
NVIC 嵌套的向量式中斷控制器---可處理43個可屏蔽中斷通道(不含16個中斷線)和16個優(yōu)先級。
EXTI 外部中斷/事件控制器,含19個邊沿檢測器,用于產生中斷/事件請求。
時鐘和啟動復位時內部8MHz的RC振蕩器被選為默認的CPU時鐘,有多個預分頻器用于配置AHB的頻率、高速APB(APB2)和低速APB(APB1)區(qū)域。AHB和高速APB 的最高頻率是72MHz,低速APB的最高頻率為36MHz。
低功耗模式:睡眠,停機,待機
DMA可以用于主要的外設:SPI、I2C、USART、通用和高級定時器TIMx和ADC。
通用同步/異步接受發(fā)送器(USART)
ADC(模擬/數(shù)字轉換器)::內嵌2個12位的模擬/數(shù)字轉換器(ADC),每個ADC有多達16個外部通道。
VDD:器件內部的工作電壓,芯片的工作電壓(Vcc>Vdd)
VCC:電路的供電電壓。
VSS:電路公共接地端電壓——接地端——接地點
圖1-STM32F103最小系統(tǒng)
2、啟動選擇
圖1中上部的BOOT0和BOOT1用于設置STM32的啟動方式,其對應啟動模式如下表所示:
表1- BOOT0、BOOT1啟動模式表
BOOT0 | BOOT1 | 啟動模式 | 說明 |
0 | X | 用戶閃存存儲器 | 用戶閃存存儲器,也就是FLASH啟動 |
1 | 0 | 系統(tǒng)存儲器 | 系統(tǒng)存儲器啟動,用于串口下載 |
1 | 1 | SRAM啟動 | SRAM啟動,用于在SRAM中調試代碼 |
用串口下載代碼時,則配置BOOT0為1,BOOT1為0即可,如果想讓STM32一按復位鍵就開始跑代碼,則需要配置BOOT0為0,BOOT1隨便設置都可以。
3、復位
圖2-按鍵復位電路
STM32支持三種復位方式,分別是系統(tǒng)復位、上電復位和備份區(qū)域復位
系統(tǒng)復位:除了時鐘控制器的RCC_CSR寄存器中的復位標志和備份區(qū)域中的寄存器以外,系統(tǒng)復位將復位所有寄存器的至它們的復位狀態(tài)。當發(fā)生以下任一事件是產生系統(tǒng)復位:
(1)NRST引腳上的低電平(外部復位);
(2)窗口看門狗計數(shù)終止(WWDG復位);
(3)獨立看門狗計數(shù)終止(IWDG復位);
(4)軟件復位(SW復位);
(5)低功耗管理復位。
可以通過查看RC_CSR控制狀態(tài)寄存器中的復位狀態(tài)標志位識別復位時間來源。
當以下事件中之一發(fā)生時,產生電源復位:
(1)上電/掉電復位(POR/PDR復位);
(2)從待機模式中返回。
備份域復位:
當以下事件中之一發(fā)生時,產生備份區(qū)域復位:
(1)軟件復位,備份區(qū)域復位可由設置備份域控制寄存器(RCC_BDCR)中的BDRST位產生;
(2)在VDD和VBAT兩者掉電的前提下,VDD或VBAT上電將引發(fā)備份區(qū)域復位。
4、 IO口
圖1中STM32的PORTA、PORTB以及PORTC的IO口全部引出,以便于與外部設備連接。
STM32每個GPIO 端口有兩個32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個32位數(shù)據寄存器(GPIOx_IDR,GPIOx_ODR),一個32 位置位/復位寄存器(GPIOx_BSRR),一個16 位復位寄存器(GPIOx_BRR)和一個32 位鎖定寄存器(GPIOx_LCKR)。
GPIO 端口的每個位可以由軟件分別配置成多種模式,如下所述。每個I/O 端口位可以自由編程,然而I/O端口寄存器必須按32 位字被訪問(不允許半字或字節(jié)訪問)。GPIOx_BSRR 和GPIOx_BRR 寄存器允許對任何GPIO 寄存器的讀/更改的獨立訪問;這樣,在讀和更改訪問之間產生IRQ 時不會發(fā)生危險。端口位配置 CNFx[1:0]=xxb,MODEx[1:0]=xxb
對于STM32的IO口可以根據需要由軟件配置成八種模式(模電中有相關電路的具體分析):
(1)GPIO_Mode_AIN 模擬輸入;
(2)GPIO_Mode_IN_FLOATING 浮空輸入;
(3)GPIO_Mode_IPD 下拉輸入;
(4)GPIO_Mode_IPU 上拉輸入;
(5)GPIO_Mode_Out_OD 開漏輸出;
(6)GPIO_Mode_Out_PP 推挽輸出;
(7)GPIO_Mode_AF_OD 復用開漏輸出;
(8)GPIO_Mode_AF_PP 復用推挽輸出。
5、電源
圖3-電源電路
這里STM32的供電采用的是REG1117-3.3的方式,將DC5V電源轉換成為DC3.3V電源,電容作用都是一樣濾出電路中寄生的雜波,不同電容的容值通過的頻率不一樣所以電路中用了不同容值的電容把所有的雜波對地短路??梢栽贒C5V端增加兩個濾波電容(濾波電容通常是一大一小配合使用),基本形式是:電容濾波—三端穩(wěn)壓—電容濾波。
圖4-STM32電源框圖
Vdda是為模擬部分供電的,如果不接Vdda,芯片應該無法運行。
STM32的工作電壓(VDD)為2.0~3.6V。通過內置的電壓調節(jié)器提供所需的1.8V電源。當主電源VDD掉電后,通過Vbat腳為實時時鐘(RTC)和備份寄存器提供電源。如果應用中沒有使用外部電池,VBAT必須連接到VDD引腳上面。
供電方案:
VDD=2.0~3.6V:VDD管腳提供IO管腳和內部調壓器的供電;
VSSA,VDDA=2.0~3.6V:為ADC、復位模塊、RC振蕩器和PLL的模擬部分供電。使用ADC時,VDD不得小于2.4V;
VBAT=1.8~3.6V:當(通過電源開關)關閉VDD時,為RTC、外部32KHz振蕩器和后備寄存器供電。
6、燒寫接口
圖5-JTAG接口電路
如果要減小插座的數(shù)量,就用SWD模式的仿真,在這個模式下,如果用JLINK只要四根線就可以了,這四根線分別是:3.3V、GND、SWDIO(PA13)、SWCLK(PA14)。
其中:
STM32的JTMS/SWDIO接JTAG口的TMS;
STM32的JTCK/SWCLK接JTAG口的TCK。
如果要用ULINK2,則再加多一條“NRST”,即5條。
STM32的SWD接口與JTAG是共用的,只要接上JTAG,就可以使用SWD模式了(其實并不需要JTAG這么多線),JLINKV8和ULINK2都支持SWD。
這個接口可自行定義,在使用時用杜邦線跳接或做塊轉換接口板聯(lián)接仿真器與目標板即可。
7、時鐘與晶振
在STM32中,有五個時鐘源,分別為HSI、HSE、LSI、LSE、PLL。其實是四個時鐘源,如圖6所示(灰藍色),PLL是由鎖相環(huán)電路倍頻得到PLL時鐘。
(1)HSI是高速內部時鐘,RC振蕩器,頻率為8MHz。
(2)HSE是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。
(3)LSI是低速內部時鐘,RC振蕩器,頻率為40kHz。
(4)LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。
(5) PLL為鎖相環(huán)倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,但是其輸出頻率最大不得超過72MHz。
圖6-STM32時鐘系統(tǒng)框圖
對于單片機系統(tǒng)來說,CPU和總線以及外設的時鐘設置是非常重要的,因為沒有時鐘就沒有時序。由于時鐘是一個由內而外的東西,具體設置要從寄存器開始。一般板子上只有8Mhz的晶振,而增強型最高工作頻率為72Mhz,顯然需要用PLL倍頻9倍,這些設置都需要在初始化階段完成。一般性的時鐘設置需要先考慮系統(tǒng)時鐘的來源,是內部RC還是外部晶振還是外部的振蕩器,是否需要PLL。STM需要2個晶振,1個是HSE,常用外部高頻,PLL倍頻用,常8MHz;另一個為外部低頻晶振,系統(tǒng)待機或低功耗時用,為32.6KHz。外接的那個用于 RTC 的32768 晶振,需要專用的負載晶振。
圖7-STM32外部晶振電路圖
然后考慮內部總線和外部總線,最后考慮外設的時鐘信號。遵從先倍頻作為CPU時鐘,然后在由內向外分頻,下級遷就上級的原則有點兒類似PCB制圖的規(guī)范化要求,在這里也一樣。
本文對STM32 的硬件部分做大致介紹,設計時用到其它的具體知識后期會陸續(xù)進行補充介紹,并附實例程序。
責任編輯:lq
-
ARM
+關注
關注
134文章
9029瀏覽量
366499 -
STM32
+關注
關注
2264文章
10854瀏覽量
354311 -
硬件設計
+關注
關注
18文章
394瀏覽量
44517
原文標題:【值得學習的好文章】經典的STM32硬件設計學習筆記
文章出處:【微信號:KY_QRS,微信公眾號:開源嵌入式】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論