1 STM32簡介
注:筆記主要參考B站 江科大自化協(xié) 教學(xué)視頻“STM32入門教程-2023持續(xù)更新中”。
注:工程及代碼文件放在了本人的Github倉庫。
1.1 套件簡介
本教程使用STM32最小系統(tǒng)板(STM32F103C8T6)+面包板硬件平臺進行學(xué)習(xí)。使用面包板可以完成任意硬件的連接,相比于成品的開發(fā)板方式,使用面包板更有利于對硬件電路的學(xué)習(xí),而且也可以避免開發(fā)板的一些問題(如引腳沖突、引腳無法更改等)。但是,面包板也有缺點,比如實驗現(xiàn)象不對有可能時程序接線的問題,所以連線時要更加細心一些。主要套件如下:

STM32是一款32位單片機(51單片機是8位單片機),其中“ST”是ST公司(得捷電子Digi-Key是其官方授權(quán)的分銷商),“M”則是“MicroController Unit, MCU”的縮寫,即STM32基于ARM Cortex-M內(nèi)核開發(fā)的32位微控制器。補充一點概念上的區(qū)別(不是非常認同但先這么記著):
MCU 和單片機的區(qū)別:
- 原理不同:
mcu又稱單片微型計算機(Single Chip Microcomputer )或者單片機,重點在于單片。
單片機則是把一個計算機系統(tǒng)集成到一個芯片上,重點在于芯片,相當于微型計算機但缺少I/O設(shè)備。- 指代對象不同:
MCU是指單片微型計算機或者單片機。單片機則是微型計算機家族中的一個分支而已。- 范疇不同:
CPU有三個分支:DSP、MCU(Micro Control Unit,微控制器單元)、MPU(Micro Processor Unit,微處理器單元)。
單片機是MCU中最具有代表性,是MCU的實現(xiàn)。- 功能不同。
MCU在不同的場合有不同的應(yīng)用。例如手機、遙控器甚至汽車電子和機器手臂的控制等都有涉及。
單片機的使用領(lǐng)域比MCU的要更為廣泛,從家用電器和通訊設(shè)備到智能儀表以及導(dǎo)航系統(tǒng)都有應(yīng)用。- 用途不同:
MCU傾向于不同信息源的多種數(shù)據(jù)的處理診斷和運算,更側(cè)重于控制。
而單片機就是一塊芯片,主要是對數(shù)據(jù)進行高速化處理。注:但通常認為MCU和單片機概念等價。
STM32功能強大、性能優(yōu)異、片上資源豐富、功耗低,是一款經(jīng)典的嵌入式微控制器,常應(yīng)用在嵌入式領(lǐng)域,如智能車、無人機、機器人、無線通信、物聯(lián)網(wǎng)、工業(yè)控制、娛樂電子產(chǎn)品等。下面是ST公司官網(wǎng)上對于自家STM32 MCU的產(chǎn)品型號介紹:

注:通常來說,無線wifi都用esp,用stm32的個人玩家很少。
ARM既指ARM公司,也指ARM處理器內(nèi)核。ARM公司是全球領(lǐng)先的半導(dǎo)體知識產(chǎn)權(quán)(IP)提供商(只設(shè)計內(nèi)核,不生產(chǎn)實物),全世界超過95%的智能手機和平板電腦都采用ARM架構(gòu)。ARM公司設(shè)計ARM內(nèi)核,半導(dǎo)體廠商完善內(nèi)核周邊電路并生產(chǎn)芯片。ST公司就是ARM公司的授權(quán)廠商之一。下面是ARM公司設(shè)計的內(nèi)核系列:

根據(jù)上圖,ARM針對不同的應(yīng)用場景設(shè)計了不同型號的內(nèi)核。經(jīng)典款逐漸不夠用之后,AREM公司推出了新一代的Cortex內(nèi)核來滿足市場需求,并推出了Cortex-A、Cortex-R、Cortex-M三種系列。通常,A系列適用于高端應(yīng)用領(lǐng)域(如手機芯片),R系列主要針對實時處理領(lǐng)域(如硬盤監(jiān)控器),M系列適用于單片機領(lǐng)域。
1.2 STM32芯片內(nèi)部的外設(shè)
下圖的左側(cè)是所有STM32芯片的內(nèi)部結(jié)構(gòu)示意圖??梢钥闯鯝RM公司設(shè)計的內(nèi)核只是其中的一部分(但最關(guān)鍵,相當于CPU),其他公司圍繞著這個內(nèi)核設(shè)計一系列外圍電路配合其工作,進而發(fā)揮內(nèi)核的性能。右側(cè)圖則給出了本節(jié)課程所使用的STM32芯片:STM32F103C8T6。
STM32F103C8T6主要指標:
系列:主流系列STM32F1
內(nèi)核:ARM Cortex-M3
主頻:72MHz
RAM(運行內(nèi)存):20K(SRAM)
ROM(程序存儲器):64K(Flash)
供電:2.0~3.6V(標準3.3V)。由于USB供電是5V,所以還要加穩(wěn)壓芯片。(注:51單片機為5V供電)
封裝:LQFP48

英文縮寫 | 名稱 | 補充說明 | 英文縮寫 | 名稱 | 補充說明 |
---|---|---|---|---|---|
NVIC | 嵌套向量中斷控制器 | 內(nèi)核中用于管理中斷的設(shè)備,如配置中斷優(yōu)先級。 | CAN | CAN通信 | 常用于汽車領(lǐng)域。 |
SysTick | 系統(tǒng)滴答定時器 | 內(nèi)核中的定時器,給操作系統(tǒng)(如FreeRTOS、UCOS等)提供定時服務(wù),以完成任務(wù)切換。 | USB | USB通信 | 可以做模擬鼠標、模擬U盤等設(shè)備。 |
RCC | 復(fù)位和時鐘控制 | 使能各模塊時鐘,上電默認其他外設(shè)模塊均無時鐘。 | RTC | 實時時鐘 | 可接備用電池,掉電保持運行。 |
GPIO | 通用IO口 | 可以用GPIO來點燈、讀取按鍵等。 | CRC | CRC校驗 | — |
AFIO | 復(fù)用IO口 | 可以完成復(fù)用端口的重定義,中斷端口的配置。 | PWR | 電源控制 | 可使芯片進入睡眠模式,節(jié)能。 |
EXTI | 外部中斷 | 引腳有電平變化會觸發(fā)中斷。 | BKP | 備份寄存器 | 接備用電池,掉電保存數(shù)據(jù)。 |
TIM | 定時器 | 最常用,功能最多的外設(shè),可以測頻率、生成PWM波等。分為高級定時器、通用定時器(最常用)、基本定時器。 | IWDG | 獨立看門狗 | 當程序死機或死循環(huán)時,復(fù)位程序。 |
ADC | 模數(shù)轉(zhuǎn)換器 | 芯片內(nèi)的12位ADC外設(shè),無需外接AD芯片。 | WWDG | 窗口看門狗 | |
DMA | 直接內(nèi)存訪問 | 幫助CPU搬運大量數(shù)據(jù)。 | DAC | 數(shù)模轉(zhuǎn)換器 | — |
USART | 同步/異步串口通信 | 異步串口UART應(yīng)用更多。 | SDIO | SD卡接口 | 用于讀取SD卡數(shù)據(jù)。 |
I2C | I2C通信 | — | FSMC | 可變靜態(tài)存儲控制器 | 用于擴展內(nèi)存,或配置成其他總線協(xié)議。 |
SPI | SPI通信 | — | USB OTG | USB主機接口 | 讓STM32作為USB主機,讀取其他設(shè)備。 |
注意:
- 前兩個加粗資源表示是位于Cortex-M3內(nèi)核里面的外設(shè),剩下的都是位于內(nèi)核之外的外設(shè)。
- 上表給出的是STM32F1系列芯片中所有的外設(shè),而具體到STM32F103C8T6芯片,則不包含最后4種外設(shè)。
- 關(guān)于芯片外設(shè)的具體介紹,可以參考數(shù)據(jù)手冊《STM32F10xxx參考手冊》、《STM32F103x8B數(shù)據(jù)手冊》。

1.3 STM32芯片系統(tǒng)結(jié)構(gòu)

首先來看看STM32的芯片系統(tǒng)結(jié)構(gòu)(只需要大致了解一下即可):
- Cortex-M3:內(nèi)核。注意ICode、DCode、System是直接從內(nèi)核引出的三根總線。
- Flash:存儲編寫的程序。ICode總線和DCode總線主要用于連接Flash閃存。
- SRAM:用于存儲程序運行時的變量數(shù)據(jù)。
- ICode:指令總線。加載程序指令。
- DCode:數(shù)據(jù)總線。加載數(shù)據(jù),如常量和調(diào)試參數(shù)。
- System:系統(tǒng)總線。連接到Flash以外其他外設(shè)上,如SRAM、FSMC(本課程不會用到)。
- AHB系統(tǒng)總線:先進高性能總線。用于掛載最基本的(如復(fù)位和時鐘控制RCC、SDIO)、或者性能比較高的外設(shè)。
- APB2、APB1:先進外設(shè)總線。用于連接一般的外設(shè)。通常AHB(72MHz)性能總體高于APB,而APB2(72MHz)性能高于APB1(36MHz)。所以APB2連接外設(shè)中稍微重要的部分,如GPIO、各外設(shè)的1號接口;剩下的次要外設(shè)給APB1。
- 橋接2、橋接1:由于AHB和APB的總線協(xié)議、 總線速度、數(shù)據(jù)傳輸格式上的差異,需要加上2個橋接,來完成數(shù)據(jù)的轉(zhuǎn)換和緩存。
- DMA2、DMA1:擁有和CPU相同的總線控制權(quán),用于幫助CPU完成數(shù)據(jù)搬運這樣簡單但重復(fù)的活,相當于CPU的小秘書。若外設(shè)需要進行數(shù)據(jù)搬運,那么會直接找DMA(DMA請求),DMA就會獲得總線控制權(quán)來搬運數(shù)據(jù),整個過程無需CPU的參與。
1.4 STM32芯片引腳定義

上圖給出了UP主自己做的STM32F103C8T6引腳定義。一些說明如下:
- 標紅色的是電源相關(guān)的引腳,標藍色的是最小系統(tǒng)相關(guān)的引腳,標綠色的是IO口、功能口引腳。所以 最小系統(tǒng)板主要關(guān)心紅色和藍色部分。
- 類型:S代表電源、I代表輸入、O代表輸出、I/O代表輸入輸出。
- I/O口電平:表示I/O所能容忍的電壓,默認3.3V,F(xiàn)T表示5V。注意沒有FT標志的引腳都需要加裝電平轉(zhuǎn)換電路。
- 主功能:上電默認功能。
- 默認復(fù)用功能:I/O口上同時連接的外設(shè)功能引腳,配置IO口時可以設(shè)置是主功能/復(fù)用功能。
- 重定義功能:如果需要某一個端口上實現(xiàn)兩個功能,那么可以將其中一個功能重映射到另一個空閑端口上,這個空閑端口的重定義功能需要包含相應(yīng)的功能。
- 推薦優(yōu)先使用加粗的IO口,沒有加粗的可能需要配置或兼具其他功能,使用時需要注意。
下面來一一介紹這些引腳的功能(包括PA0~PA15、PB0~PB15、PC13~PC15、9個供電、2個時鐘、1復(fù)位、1個BOOT0):文章來源:http://www.zghlxwxcb.cn/news/detail-786776.html
- 引腳1:備用電池供電??山?V電池,系統(tǒng)斷電時為芯片內(nèi)部的RTC和備用寄存器提供電源。
- 引腳2:IO口/入侵檢測/RTC。IO口輸出或讀取高低電平;入侵檢測提供安全保障,可以將外部一些防拆的觸點接在此端口,若觸點電平變化,STM32芯片會自動清空寄存器數(shù)據(jù);RTC可輸出RTC校準時鐘、RTC鬧鐘脈沖、秒脈沖。
- 引腳3、4:IO口/32.765kHzRTC晶振。
- 引腳5、6:系統(tǒng)主晶振,一般8MHz,芯片內(nèi)的鎖相環(huán)電路將時鐘倍頻成72MHz作為系統(tǒng)主時鐘。
- 引腳7:系統(tǒng)復(fù)位引腳。N表示低電平復(fù)位。
- 引腳8、9:芯片內(nèi)部模擬部分的電源,如ADC、RC振蕩器等。VSS接地、VDD接3.3V。
- 引腳10~19、21~22、25~33、41~43、45~46:共26個默認普通IO口。 其中的PA0兼具WKUP功能,用于喚醒處于待機狀態(tài)的STM32。
- 引腳20:IO口/BOOT1引腳。BOOT1引腳用于控制啟動模式。
- 引腳23/24、35/36、47/48:系統(tǒng)的主電源口。STM32采用分區(qū)供電的方式,所以供電口多。
- 引腳34、37~40:IO口/調(diào)試端口。STM32支持SWD和JTAG兩種調(diào)試方式。SWD只需SWDIO、SWCLK兩根線;JTAG需要全部的5根。教程使用STLINK(SWD)下載程序,此時剩余3個引腳可配置成IO口。
- 引腳44:BOOT0,和BOOT1配合,用于啟動配置。啟動配置就是指定程序開始運行的位置,一般程序在Flash程序存儲器中運行,但在某些情況下可以指定程序在別的地方開始執(zhí)行以完成特殊功能。
![]()
- “主閃存存儲器”啟動模式最常用。
- “系統(tǒng)存儲器”模式用于串口下載程序,系統(tǒng)存儲器中存儲的是一段STM32的BootLoader程序,其作用就是接收串口數(shù)據(jù)然后刷新到主閃存中。當5個調(diào)試端口全被配置成IO口時,單片機將無法再下載程序??! 此時只能使用串口下載程序的方式進行補救。另外,當手頭上沒有STLINK和JLINK,也可以使用串口來下載程序,通俗來說就是“刷機”。??
- “內(nèi)置SRAM”模式主要用于程序調(diào)試,使用較少,本教程不會出現(xiàn)。
- 注意BOOT值是在上電一瞬間(第4個時鐘上升沿)有效,后面隨意,即BOOT1引腳后續(xù)會變成普通IO口。
1.5 STM32最小系統(tǒng)

上面給出了STM32最小板的原理圖。單片機只有一個芯片無法正常工作,還需要連接一些最基本的電路,稱之為最小系統(tǒng)電路。即,最小板僅保留引腳中的電源部分(紅色)和最小系統(tǒng)部分(藍色)。文章來源地址http://www.zghlxwxcb.cn/news/detail-786776.html
- STM32及供電:連接了4個電源進行分區(qū)供電,每個電源的正負極之間都加了濾波電容濾除電源波紋。備用電源VBAT有需要就接上。
- 晶振:8MHz主時鐘,內(nèi)部鎖相環(huán)倍頻到72MHz主頻。C1、C2是兩個起振電容。若需要RTC功能還需要接32.768kHz晶振,這個晶振經(jīng)過215分頻就可以得到1s的計數(shù)。
- 復(fù)位:給單片機提供復(fù)位信號,低電平復(fù)位。C3保證上電瞬間NRST為低電平,后續(xù)充電變成高電平。左側(cè)并聯(lián)的按鍵提供手動復(fù)位的功能。
- 啟動配置:撥動中間的開關(guān)就可以讓BOOT1、BOOT0引腳選擇相應(yīng)的高低電平了。開發(fā)板上選擇了跳線帽實現(xiàn)。
- 下載端口:使用STLINK下載程序,需要將SWDIO、SWCLK兩個引腳接出來方便引線,GND必須引出來,3.3V供電可以不引,但是建議這四個引腳都引出來。
- 沒有給出的穩(wěn)壓芯片:常用的5V轉(zhuǎn)3.3V穩(wěn)壓芯片有XC6204、XC6206、AMS1117等。
到了這里,關(guān)于stm32學(xué)習(xí)筆記-1 STM32簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!