1.基本情況
STM32單片機正如其名是32位微控制器,相較于51單片機的8位微控制器,性能會更好,但學習難度也會提高。
在stm32單片機中內核時核心部分,是ARM公司設計的,其在stm32單片機中占據極為重要的地位。(程序指令的執行,如+-*/運算都是在內核中完成的)相當于整個芯片的CUP。就像我們現在的電腦廠商一樣,可以拿著intel或AMD的CPU,自己完善外圍電路,這樣就可以退出自己品牌的電腦。STM32單片機也是類似,以ARM為內核,自己完善外圍電路做出的芯片都叫做基于ARM內核的芯片。
STM32單片機的常用領域:
智能車:STM32單片機做尋跡小車,讀取光電傳感器或者攝像頭的數據,然后驅動電機前進和轉彎。
無人機:STM32單片機讀取陀螺儀加速計的姿態數據,然后根據控制算法去控制電機的速度,從而保證飛機穩定飛行。
機器人:STM32單片機驅動舵機,去控制機器人的關節,然后讓機器人運動。
無線通信:STM32單片機連接上一連2.4G無線模塊或藍牙、WIFI模塊,這樣STM32的單片機就具備無線通信的能力。物聯網也可以借助這些無線模塊來通信(藍牙、WIFI、ZigBee等)。再通過STM32單片機驅動繼電器來控制220V電路的通斷。
工業控制:PLC。
娛樂電子產品:愛心流水燈等。
家族序列圖
STM32單片機分為四個系列:高性能系列、主流系列、超低功耗系列、無線系列。
下圖中有相關介紹:
目前最強的STM32單片機是STM32N6系列,STM32N6 基于運行頻率達 800MHz 的 Arm Cortex-M55 處理器,是單核架構。
目前博主只學習了主流系列,跟大家分享的也只跟主流系列有關。如果你學習了主流系列后,覺得性能不夠,可以繼續學習高性能系列;如果你對功耗特別敏感,推薦專攻超低功耗系列;如果想做無線通信電子產品,可以了解無線系列。因為它們都是一個家族的,所以換一個系列再學習的話也會比換別的新派你輕松很多。
2、ARM
ARM既指ARM公司,也指ARM處理器的內核。
ARM 公司本身不直接從事芯片生產,而是通過授權其設計的芯片架構給全球各地的半導體公司,由這些公司根據各自的應用領域進行開發和生產,ARM 則收取前期許可費和根據硅片生產量支付的版稅。這個也叫做知識產權提供商,簡單解釋就是負責設計提供但不生產實物。
下面展示一幅圖,其中由介紹ARM內核的相關信息:
右側藍色所表示的是經典的ARM處理器。
由圖可知,內核有三個系列:A、R、M,正如ARM公司的組成字母。
R、M系列用于嵌入式領域,A系列適用于高端應用型領域如手機領域(蘋果、高通、聯發科)。
R系列實時性(硬盤處理器),M系列(單片機STM32領域),A系列(性能最高、發展最快的系列)。
ARM公司的內核非常多,遠不止圖上所示。想要更多了解可以另查資料,這里我就不多講了。
下面展示一款主流系列的芯片:
RAM:運行內存,實際的存儲介質是SRAM。
ROM:程序存儲器,實際的存儲介質是Flash閃存。
如圖供電電壓為2.0~3.3V,因此,如果供電電壓為5V時,需要加一個穩壓芯片,把電壓講到3.3V,再給STM32單片機供電。51單片機的供電電壓是5V。可不要弄混了。
封裝如圖,有48個引腳。
這款芯片的片上資源下圖展示:
片商資源又叫外設(Peripheral)。
主要學習內容。通過程序配置外設,來實現我們想要的功能。
表中,前兩個深顏色的,是位于Cortes-M3內核里面的外設,剩下的都是內核外的外設。
下面介紹這些外設相關的作用:
NVIC:內核里面用于管理中斷的設備,如配置中斷優先級這些東西。
SysTick:內核里的一個定時器,用來給實際操作系統提供定時服務的。
STM32單片機可以加入操作系統:FreeRTOS,UCOS等。
如果用這些操作系統,就需要SysTick提供定時器來進行任務切換的功能。
RCC:可對系統的時鐘進行配置,還有就是使能各模塊的時鐘。在STM32單片機中,其他的這些外設在上電的情況下默認是沒有時鐘的。不給時鐘的情況下,操作外設是無效的,外設也不會工作,這樣的目的是降低功耗。所以操作外設之前,必須要先使能它的時鐘,這就需要我們用RCC來完成時鐘的使能。
GPIO:通用的IO口,我們可以用GPIO來點燈,讀取按鍵等。這也是一個單片機最基本的功能。
AFIO:復用IO口,可以完成服用功能端口的重要定義,還有中斷端口的配置。
EXIT:外部中斷,配置好外部中斷后,當引腳有電平變化時,就可以觸發中斷,讓CPU來處理任務。
TIM:整個STM32單片機最常用,功能最多的外設,分為高級、通用、基本定時器三種模型。
其中高級定時器最復雜,通用定時器最常用。
它不僅可以完成定時中斷的任務,還可以完成測頻率,生成PWM波形。配置成專用的編碼器接口等功能。PWM波形就是我們電機驅動、舵機驅動最基本的要求了。
ADC:這個STM32單片機內置了12位的AD轉換器,可以直接讀取IO口的模擬電壓值,無需外部連接AD芯片,使用非常方便。
DMA:這個可以幫助CPU完成搬運大量數據這樣繁雜的任務。
USART:我們平常用的UART是異步串口的意思,這里的USART兩個都支持。分為異步、同步,實際用異步多。
I2C、SPI:非常常用的兩種通信協議。STM32單片機也內置了它們的控制器,可以用硬件來輸出時序波形,使用起來更高效,當然用通用IO口來模擬時序波形也是沒有問題的。
CAN、USB:也是通信協議,CAN運用于汽車領域,利用這個STM32USB的外設,可以做一個模擬鼠標,模擬U盤等設備。
RTC:在STM32單片機內部完成年月日,時分秒的計時功能。而且可以接外部備用電池,基石掉電也能正常運行。
CRC:一種數據的校驗方式,用于判斷數據的正確性。有這個外設的支持,進行CRC校驗就會更加方便一些。
PWR:可以讓芯片進入睡眠模式等狀態,來達到省電的目的。
BKP:這是一段存儲器,當系統掉電時,仍可由備用電池保持數據,這個根據需要,可以完成一些特殊功能。
IWDG、WWDG:是獨立看門狗和窗口看門狗。當單片機因為電磁干擾死機或者程序設計不合理出現死循環時,看門狗可及時復位芯片,保證系統的穩定。
DAC:它可以在IO口直接輸出模擬電壓,是ADC模數轉換的逆過程。
SDIO:可以用來讀取SD卡。
FSMC:可以用于擴展內存,或者配置成其他總線協議,用于某些硬件的操作。
USB OTG:用OTG功能,可以讓STM32單片機作為USB主機讀取其他USB設備。
那以上就是STM32F1系列所有外設的大致介紹了。
這是STM32F1系列的所有外設,并不是所有型號都擁有全部外設,比如我們這款C8T6芯片就沒有后面四個外設。
那具體有哪些外設?每個外設設有幾個呢?
我們還要看一下對應的數據手冊。
下面我放一張英文版的C8T6芯片的數據手冊,看一下它的外設資源表:
看到這幅圖的STM32F103Cx這一列,可以看到這個C8T6是64K閃存的,20K的SRAM,有3個通用定時器,1個高級定時器,沒有基本定時器。2個SPI,2個I^2C,3個USART,1個USB,1個CAN總線,37個IO口,2個10通道的12位ADC。在這個表里沒有出現的外設,你就要確認一下它是不是存在,要是操作了不存在的外設,那它是不會工作的。
3、芯片命名規則
看一下這個型號的每一位字母和數字代表的意義。
一般來說,引腳越多,外設越多。
4、系統結構
分為四部分,大致分布如圖:
加載數據(常量、調試數據等)。
ICode指令總線,Dcode數據總線,System系統總線。前兩個用來加載程序指令的主要用來連接Flash閃存。Flash閃存存儲的就是我們編寫的程序。
SRAM:用于存儲程序運行的變量數據。
AHB、SPIO:用于掛載主要的外設,掛載的一般是最基本或性能比較高的外設(復位、時鐘控制這些最基本的電路)。
5、引腳定義(重點)
這部分內容學習大概知道這個芯片是怎么使用的。
C8T6這個芯片的引腳序號和引腳名稱的示意圖:
左上角小黑點,代表它左邊的引腳是1號引腳。逆時針依次排列,知道48號引腳。
下面給大家展示這款芯片相關的引腳有哪些:
紅色代表電源相關,藍色代表最小系統相關,綠色代表IO口功能口。
類型:
S:電源;I:輸入;O:輸出;IO:輸入輸出。
IO口電平代表IO口所能容忍的電壓。有FT的,代表它能容忍5V的電壓。沒有FT的,容忍3.3V電壓。
如果沒有FT的需要接5V的電平,就需要加裝電平轉換電路了。
主功能就是上電后默認的功能,一般和引腳名稱相同。如果不同的話,引腳的實際功能是主功能而不是引腳名稱的功能。
默認復用功能就是IO口同時連接的外設功能引腳。這個配置IO口的時候可以選擇是通用IO口還是復用功能。
重定義功能:這個的作用是,如果有兩個功能同時復用在了一個IO口上,而你卻是需要用到這兩個功能,那你可以把其中一個復用功能重映射到其他端口上。當然前提是,這個重定義功能的表里有對應的端口。
VBAT:備用電池供電的引腳。可接3V電池。當系統電源斷電時,備用電池可以給內部的RTC時鐘和備份寄存器提供電源。
2號引腳是IO口或者侵入檢者或者RTC。
IO口可以根據程序輸出或讀取高低電平是最基本也是最常用的功能了。
侵入檢測可以用來做安全保障的功能。(你的產品安全性比較高,可以在外殼加一些防拆的觸點。然后接上電路到這個引腳上。若有強行拆開設備,那觸點斷開,這個引腳的電平變化就會觸發STM32的侵入信號,然后就會清理數據來保證安全。
RTC的引腳可以用來輸出RTC校準時鐘,RTC鬧鐘脈沖或者秒脈沖。
3、4號引腳是IO口或者接32、786Hz的RTC晶振。
5、6號引腳接系統的主晶振,一般是8MHz。然后芯片內部有鎖相環電路,可以對這個8MHz的頻率進行信頻。最終產生72MHz的頻率。作為系統的主時鐘,7號NRST是系統復位引腳,N代表它是低電平復位的。
8、9號引腳是內部模擬部分的電源,如ADC、RC振蕩器等。VSS是負極,接GND、VDD是正極,接3.3V.
10~19號引腳都是IO口,其中PAO還兼具了WKUP的功能。這個可以用于喚醒處于待機模式的STM32。
20號引腳是IO口或者BOOT1引腳。BOOT引腳是用來配置啟動模式的,另外這個IO口引腳名稱沒加粗。這是表示我推薦使用這些加粗的IO口,沒有加粗的IO口,可能需要進行配置,或者兼備其他功能,使用時需要留意一下。
21、22號也都是IO口。
23、24號的VSS_1(正極)和VDD_1(負極)是系統的主電源口。
另外,下面還有VSS_2、VDD_2、VSS_3、VDD_3。都是系統的主電源口。
這里STM32內部采用了分區供電的方式。所以供電口會比較多。在使用時,把VSS都接GND、VDD都接3.3V即可。
25~33號都是IO口。
34、27~40號。這些事IO口或者調試端口。
上面默認的主功能是調試端口。調試端口就是用來調試程序和下載程序的。
這個STM32需要2根線,分別是SWDIO和SWCLK。JTAG需要5根,分別是JTMS、JTCK、JTDI、JTDO、NJTRST。
我上面所講的都是使用STLINK來下載調試程序。STLINK用的是SWD的方式,所以只需要占用PAB和PA14這兩個IO口,在使用SWD的調試方式時,剩下的PA15、PB3、PB4可以切換為普通的IO口來使用,但要在程序中進行配置,不配置的華默認是不會用做IO口的。
41~43、45~46都是IO口。
剩下的44號引腳跟剛才介紹的BOOT1一樣,也是用來做啟動配置的。
這個表在數據手冊中也有,這些都是我在數據手冊中提取出來的,在后面會給出地址,方便大家查看。STM32F103C8T6 數據表, PDF - 全部數據表https://www.alldatasheet.com/view.jsp?Searchword=STM32F103C8T6
6、啟動配置
如圖是我們剛才看到BOOT0和BOOT1兩根引腳的功能。這個啟動配置的作用就是指定程序開始運行的位置。一般情況下,程序都是在Flash程序存儲器開始執行。但是在某些情況下,我們也可以讓程序在別的地方開始執行。用以方式完成特殊的功能。
BOOT0?按0->接地? ? ? ? ? ? ? ? BOOT1 x 不論結什么,啟動模式都是主閃存存儲器的模式最常用
1 接1就是接到3.3V電源正的意思 0?
這個不是很好理解,其實這個模式就是用來做串口下載的。系統存儲器村的就是STM32中的一段BOOtLoader程序。
作用是接受串口的數據,然后刷新到主閃存中,這樣就可以使用串口下載程序了。
一般我們需要串口下載程序的時候會配置到這個模式上。
那我們什么時候需要用到串口下載呢?可以看回到引腳定義表:
這5個是調試窗口,它們既可以用來下載程序,也可以作為普通IO口使用。
如果我們在程序中把這5個端口全部配置成了IO口,那就完了。因為這個芯片沒有調試端口,也就下載不了程序了,所以在你配置這幾個端口的時候要小心點,不要把它們全部都變成普通IO口了。
那如果全部變成IO口了,下載不進去程序了,這就需要用到串口的方式下載程序了。
如果想使用串口下載,就需要配置T1為0,T0為1.沒有STLINK、JLIK,可以用串口下載,多一種方式。
這個模式主要用來進行程序調試的,現階段用的比較少。
另外解釋一下上面那幅圖的最后一句話:BOOT引腳的值是在上電復位后的一瞬間有效的,之后就隨便了。
想讓STM32正常工作,那么首先就需要把電源部分和最小系統部分的電源連接好,也就是引腳定義表中標紅藍色的部分。
7、最小系統電路
STM32 最小系統電路主要由電源電路、時鐘源電路、BOOT 啟動電路、調試接口電路和復位電路這五部分組成,以下是各部分的詳細介紹:
電源電路
作用:為 STM32 芯片提供穩定的電源,確保芯片能夠正常工作。STM32 芯片通常需要 3.3V 的電源電壓,電源電路負責將外部輸入的電源轉換為芯片所需的穩定電壓,并進行濾波等處理,以減少電源噪聲對芯片的影響。
設計要點:通常采用線性穩壓器或開關穩壓器來實現電源轉換。如使用 AMS1117-3.3V 等線性穩壓芯片,將輸入的 5V 或其他電壓轉換為 3.3V。同時,需要在電源輸入端和芯片電源引腳處連接多個濾波電容,如 10uF 的鉭電容和 100nF 的陶瓷電容,以濾除不同頻率的噪聲信號,靠近芯片引腳放置電容,以提高濾波效果。
時鐘源電路
作用:為 STM32 芯片提供時鐘信號,時鐘信號是芯片內部各個部件同步工作的基準,決定了芯片的運行速度和時序節奏。
設計要點:可以選擇內部時鐘源或外部時鐘源。內部時鐘源一般是 RC 振蕩器,精度較低但成本低、功耗小;外部時鐘源通常采用石英晶振,精度高、穩定性好。如常用的 8MHz 外部晶振,為系統提供穩定的時鐘基準。在使用外部晶振時,需要在晶振兩端連接兩個起振電容,電容值一般在 10pF-40pF 之間,還可在晶振輸入輸出引腳之間加一個 1M 的電阻,產生負反饋,保證放大器工作在高增益的線性區,同時起到限流作用。
BOOT 啟動電路
作用:用于選擇 STM32 芯片的啟動模式,不同的啟動模式決定了芯片從何處讀取啟動代碼和數據。
設計要點:STM32 芯片有三種啟動模式,由 BOOT0 和 BOOT1 引腳在復位時的狀態決定。一般情況下,如果使用 JTAG 或 SWD 調試下載程序,會將程序下載到閃存里,可直接將 BOOT0 引腳通過一個 10K 電阻下拉接地,BOOT1 引腳置為低電平或懸空。
調試接口電路
作用:用于將計算機中的程序代碼下載到 STM32 芯片中,并對芯片進行調試和仿真,方便開發人員對程序進行調試和優化。
設計要點:常用的調試下載方式有 JTAG 和 SWD 兩種。現在一般采用 SWD 調試接口,只需要將 SWCLK(時鐘信號)、SWDIO(數據輸入輸出信號)、GND(接地)、3.3V(電源)引腳引出即可與調試器連接。不需要添加外部上拉或下拉電阻,因為 STM32 內部已經集成了相應的電阻。
復位電路
作用:將 STM32 芯片的內部電路恢復到初始狀態,確保芯片在啟動或出現異常時能夠正常初始化和運行。
設計要點:STM32 有三種復位方式,分別是系統復位、電源復位和后備域復位。常用的是電源復位方式,通過一個按鍵和一個電容組成的電路來實現。當按下按鍵時,將芯片的 RST 引腳拉低,產生外部復位信號,使芯片進入復位狀態;當按鍵松開后,電容充電,RST 引腳電位逐漸升高,復位結束,芯片開始正常運行。一般選擇 100nF 的電容,以保證 RST 引腳低電平持續的時間滿足芯片復位的最小脈寬要求。
這就是STM32單片機的簡單介紹,后續我也會繼續分享有關STM32單片機的內容,希望大家多多支持。