stm32f103c8t6中文參考手冊


STM32F103C8T6 中文參考手冊
第一章:概述
本參考手冊旨在為使用 STM32F103C8T6 微控制器的工程師和開發(fā)者提供全面、詳細(xì)的技術(shù)指導(dǎo)。STM32F103C8T6 是 STMicroelectronics(意法半導(dǎo)體)公司基于 ARM Cortex-M3 內(nèi)核的一款高性能、低功耗、高集成度的 32 位微控制器。它屬于 STM32F103 系列,因其優(yōu)越的性能和豐富的片上資源,被廣泛應(yīng)用于工業(yè)控制、消費電子、醫(yī)療設(shè)備、物聯(lián)網(wǎng)(IoT)設(shè)備等多個領(lǐng)域。本手冊將深入剖析該芯片的架構(gòu)、外設(shè)、寄存器配置以及編程方法,幫助您充分利用其強大的功能。
第二章:內(nèi)核與系統(tǒng)架構(gòu)
ARM Cortex-M3 內(nèi)核
STM32F103C8T6 的核心是 ARM Cortex-M3 內(nèi)核,這是一款專為嵌入式應(yīng)用設(shè)計的 32 位處理器。Cortex-M3 內(nèi)核的特點在于其高效的指令集、強大的中斷處理能力和低功耗設(shè)計。它支持 Thumb-2 指令集,該指令集結(jié)合了 16 位和 32 位指令,在保持代碼緊湊性的同時,提高了執(zhí)行效率。內(nèi)核內(nèi)部集成了嵌套向量中斷控制器(NVIC),可以管理多達(dá) 240 個中斷源,支持可編程的優(yōu)先級,確保了系統(tǒng)對實時事件的快速響應(yīng)。此外,Cortex-M3 還提供了多個調(diào)試接口,如 JTAG 和 SWD,方便開發(fā)者進(jìn)行程序調(diào)試和故障排查。內(nèi)核還集成了內(nèi)存保護(hù)單元(MPU),可以對內(nèi)存區(qū)域進(jìn)行權(quán)限管理,增強了系統(tǒng)的安全性和穩(wěn)定性。Cortex-M3 的架構(gòu)設(shè)計使其在功耗和性能之間取得了完美的平衡,非常適合電池供電的嵌入式應(yīng)用。
時鐘系統(tǒng)
時鐘是微控制器的“心臟”,決定了所有操作的同步和速度。STM32F103C8T6 提供了多種時鐘源,包括高速外部時鐘(HSE)、高速內(nèi)部時鐘(HSI)、低速外部時鐘(LSE)和低速內(nèi)部時鐘(LSI)。HSE 通常由外部晶體振蕩器提供,頻率范圍為 4MHz 至 16MHz,精度高,是系統(tǒng)主時鐘的首選。HSI 是一個 8MHz 的內(nèi)部 RC 振蕩器,可作為備份或在沒有外部晶振時使用。LSE 是一個 32.768kHz 的外部晶振,常用于實時時鐘(RTC)。LSI 是一個 40kHz 的內(nèi)部 RC 振蕩器,用于獨立看門狗(IWDG)。系統(tǒng)通過時鐘控制器(RCC)對這些時鐘源進(jìn)行管理和分頻,生成不同的總線時鐘(AHB、APB1、APB2),以供各個外設(shè)使用。AHB 總線通常連接到高性能外設(shè),如 DMA、SRAM 等,而 APB1 和 APB2 總線則連接到其他通用外設(shè)。靈活的時鐘配置能力使得開發(fā)者可以根據(jù)應(yīng)用需求,在功耗和性能之間進(jìn)行權(quán)衡。
電源管理
STM32F103C8T6 提供了多種電源管理模式,以滿足不同應(yīng)用場景下的功耗需求。正常運行模式下,微控制器所有功能都處于激活狀態(tài)。當(dāng)需要降低功耗時,可以進(jìn)入低功耗模式,包括睡眠模式(Sleep)、停止模式(Stop)和待機(jī)模式(Standby)。在睡眠模式下,Cortex-M3 內(nèi)核停止運行,但所有外設(shè)和 SRAM 依然保持供電,可被任何中斷喚醒,喚醒時間極短。停止模式下,主時鐘停止,所有高速時鐘域都被關(guān)閉,但 SRAM 和寄存器內(nèi)容得以保留。可以通過外部中斷或 RTC 事件喚醒。待機(jī)模式是功耗最低的模式,此時整個 1.8V 域都被斷電,只有備份域(RTC、BKPR)保持供電,喚醒后需要進(jìn)行完整的系統(tǒng)復(fù)位。通過合理選擇低功耗模式,可以大大延長電池供電產(chǎn)品的續(xù)航時間。
第三章:存儲器組織與管理
閃存(Flash)存儲器
STM32F103C8T6 內(nèi)置了 64KB 的閃存存儲器,用于存儲程序代碼和常量數(shù)據(jù)。閃存被劃分為多個扇區(qū),支持在系統(tǒng)復(fù)位后直接執(zhí)行程序。閃存控制器(FMC)負(fù)責(zé)管理對閃存的讀、寫和擦除操作。寫操作和擦除操作需要特定的編程序列,并且每次寫操作必須以半字(16 位)或字(32 位)為單位進(jìn)行。由于閃存的擦除次數(shù)有限,通常在幾萬次到幾十萬次之間,因此在設(shè)計需要頻繁寫入數(shù)據(jù)的應(yīng)用時,需要謹(jǐn)慎規(guī)劃存儲策略,例如使用磨損平衡(wear leveling)算法。STM32F103C8T6 還支持在應(yīng)用內(nèi)編程(IAP)和在系統(tǒng)內(nèi)編程(ISP),使得開發(fā)者可以在不使用外部編程器的情況下,通過串口等方式更新固件。
靜態(tài)隨機(jī)存取存儲器(SRAM)
芯片內(nèi)部集成了 20KB 的 SRAM,用于存儲程序運行時所需的變量、堆棧和堆。SRAM 是一種易失性存儲器,在斷電后數(shù)據(jù)會丟失,但其讀寫速度非??欤軌蚺c Cortex-M3 內(nèi)核以全速運行,而不需要額外的等待周期。SRAM 的地址空間被映射到內(nèi)核的數(shù)據(jù)總線上,可以直接通過 C 語言中的指針進(jìn)行訪問。高效的 SRAM 使得程序在執(zhí)行復(fù)雜算法或處理大量數(shù)據(jù)時能夠獲得最佳性能。
備份寄存器(Backup Registers)
STM32F103C8T6 提供了 10 個 16 位的備份寄存器,它們位于備份域內(nèi),由 V_BAT 供電。即使在待機(jī)模式下,當(dāng)主電源 VDD 被切斷后,這些寄存器的數(shù)據(jù)仍然可以被保留。備份寄存器通常用于存儲一些關(guān)鍵的系統(tǒng)配置參數(shù)、校準(zhǔn)數(shù)據(jù)或應(yīng)用程序狀態(tài)信息,例如 RTC 的配置。當(dāng)系統(tǒng)從待機(jī)模式喚醒后,可以從備份寄存器中恢復(fù)這些信息,從而實現(xiàn)快速啟動或狀態(tài)恢復(fù)。
第四章:通用輸入/輸出(GPIO)
GPIO 端口
STM32F103C8T6 提供了多個 GPIO 端口,每個端口最多有 16 個引腳。每個 GPIO 引腳都可以獨立配置為 輸入、輸出、復(fù)用功能 或 模擬 模式。在輸入模式下,引腳可以配置為浮空輸入、上拉輸入或下拉輸入,用于讀取外部信號電平。在輸出模式下,引腳可以配置為推挽輸出或開漏輸出,并且可以設(shè)置輸出速度(2MHz, 10MHz, 50MHz),以滿足不同驅(qū)動能力和功耗的需求。復(fù)用功能模式允許 GPIO 引腳連接到芯片內(nèi)部的其他外設(shè),例如 UART、SPI、I2C 等。模擬模式則用于連接 ADC 或 DAC 外設(shè)。每個 GPIO 端口都有相應(yīng)的控制寄存器,包括 模式寄存器(CRL/CRH)、輸出類型寄存器(OTYPER)、輸出速度寄存器(OSPEEDR)、上拉/下拉寄存器(PUPDR)、輸入數(shù)據(jù)寄存器(IDR) 和 輸出數(shù)據(jù)寄存器(ODR),通過對這些寄存器進(jìn)行編程,可以靈活控制每個引腳的行為。
外部中斷/事件控制器(EXTI)
EXTI 控制器是 STM32F103C8T6 的一個重要功能,它允許 GPIO 引腳上的電平變化觸發(fā)外部中斷或事件。EXTI 控制器有 19 個獨立的中斷/事件線,其中 16 條線連接到 GPIO 引腳,另外 3 條線連接到其他內(nèi)部事件,如 RTC 喚醒事件。每條 EXTI 線都可以獨立配置為上升沿觸發(fā)、下降沿觸發(fā)或雙邊沿觸發(fā)。當(dāng)觸發(fā)條件滿足時,EXTI 控制器會向 NVIC 發(fā)送中斷請求,從而使系統(tǒng)能夠?qū)ν獠渴录龀隹焖夙憫?yīng),例如按鍵按下、傳感器信號變化等。EXTI 的存在使得微控制器無需持續(xù)輪詢輸入狀態(tài),大大節(jié)省了 CPU 資源,特別是在低功耗應(yīng)用中至關(guān)重要。
第五章:定時器與PWM
通用定時器
STM32F103C8T6 提供了多個通用定時器,如 TIM2、TIM3 和 TIM4,每個都是一個 16 位定時器。這些定時器可以工作在多種模式下,包括基本定時器、輸入捕獲、輸出比較和 PWM 模式。作為基本定時器,它們可以生成周期性的中斷,常用于任務(wù)調(diào)度、延時和系統(tǒng)時基。在輸入捕獲模式下,定時器可以捕捉外部信號的邊沿,并記錄當(dāng)前定時器的計數(shù)值,可用于測量脈沖寬度或頻率。在輸出比較模式下,當(dāng)定時器計數(shù)值與預(yù)設(shè)值相等時,可以觸發(fā)中斷或改變引腳電平,常用于生成精確的延時或控制外部設(shè)備。
高級控制定時器
除了通用定時器,STM32F103C8T6 還包含一個高級控制定時器 TIM1。TIM1 是一個 16 位定時器,具有更強大的功能,特別適用于電機(jī)控制應(yīng)用。它支持三對互補 PWM 輸出,并且可以配置死區(qū)時間以防止上下橋臂同時導(dǎo)通。此外,TIM1 還集成了剎車(Break)功能,當(dāng)發(fā)生故障時,可以立即關(guān)閉所有 PWM 輸出,保護(hù)電機(jī)和驅(qū)動電路。TIM1 的輸入捕獲功能也支持多個通道同時捕獲,并且可以配置為編碼器接口模式,用于讀取光電編碼器的信號。
PWM (脈寬調(diào)制)
PWM 是定時器的重要應(yīng)用之一,通過改變輸出信號的占空比,可以實現(xiàn)對電機(jī)速度、LED 亮度等模擬量的精確控制。STM32F103C8T6 的定時器可以在 PWM 模式下工作,每個定時器有多個獨立的通道,可以生成不同占空比的 PWM 信號。開發(fā)者可以通過配置定時器的預(yù)分頻器(PSC)、自動重裝載寄存器(ARR)和捕獲/比較寄存器(CCR)來控制 PWM 信號的頻率和占空比。高分辨率的 PWM 輸出使得 STM32F103C8T6 在伺服電機(jī)控制、電源管理等領(lǐng)域具有顯著優(yōu)勢。
第六章:通信接口
通用同步異步收發(fā)器(USART)
STM32F103C8T6 內(nèi)置了多個 USART 接口,如 USART1、USART2 和 USART3,支持異步(UART)和同步通信。USART 是一種非常靈活的串行通信接口,支持全雙工、半雙工和單線通信。在異步模式下,它常用于與 PC、其他微控制器或藍(lán)牙模塊等設(shè)備進(jìn)行通信。開發(fā)者可以通過配置波特率、數(shù)據(jù)位、停止位和奇偶校驗位來匹配不同的通信協(xié)議。USART 還集成了 DMA 控制器,可以在不占用 CPU 資源的情況下,自動收發(fā)數(shù)據(jù),大大提高了通信效率。此外,USART 支持硬件流控制(RTS/CTS),可用于需要可靠數(shù)據(jù)傳輸?shù)膱龊稀?/span>
串行外設(shè)接口(SPI)
SPI 是一種高速、全雙工的同步串行通信協(xié)議,STM32F103C8T6 提供了兩個 SPI 接口(SPI1, SPI2)。SPI 接口通常用于連接閃存芯片、ADC/DAC、液晶顯示器等高速外設(shè)。它采用主從架構(gòu),由主設(shè)備提供時鐘信號(SCK)、片選信號(NSS)和數(shù)據(jù)線(MOSI/MISO)。SPI 接口支持多種工作模式,包括時鐘極性(CPOL)和時鐘相位(CPHA),以適應(yīng)不同的從設(shè)備。SPI 的高速度和硬件支持使其成為連接需要高吞吐量數(shù)據(jù)傳輸?shù)耐庠O(shè)的首選。
集成電路總線(I2C)
I2C 是一種雙線制(SCL 和 SDA)的半雙工串行通信協(xié)議,支持多主多從模式。STM32F103C8T6 提供了兩個 I2C 接口(I2C1, I2C2),常用于連接 EEPROM、傳感器、實時時鐘芯片等外設(shè)。I2C 協(xié)議基于地址尋址,每個設(shè)備都有一個唯一的地址,主設(shè)備通過發(fā)送地址來選擇從設(shè)備進(jìn)行通信。I2C 接口還支持快速模式(最高 400kHz)和標(biāo)準(zhǔn)模式(最高 100kHz)。其簡單的兩線接口和多主從架構(gòu)使其在系統(tǒng)集成中非常方便。
第七章:模數(shù)轉(zhuǎn)換(ADC)與DMA
模數(shù)轉(zhuǎn)換器(ADC)
STM32F103C8T6 內(nèi)置了一個 12 位 的多通道模數(shù)轉(zhuǎn)換器(ADC)。ADC 可以將模擬電壓信號轉(zhuǎn)換為數(shù)字值,廣泛應(yīng)用于傳感器數(shù)據(jù)采集、電壓監(jiān)測等領(lǐng)域。該 ADC 支持多達(dá) 16 個外部通道和兩個內(nèi)部通道(溫度傳感器和 V_REFINT),并且可以工作在單次轉(zhuǎn)換或連續(xù)轉(zhuǎn)換模式。它還支持掃描模式,可以自動按順序轉(zhuǎn)換多個通道。DMA(直接內(nèi)存訪問)控制器可以與 ADC 協(xié)同工作,將轉(zhuǎn)換結(jié)果自動傳輸?shù)絻?nèi)存中,無需 CPU 參與,極大地提高了數(shù)據(jù)采集的效率。ADC 的采樣時間可以編程,以適應(yīng)不同阻抗的模擬信號源。
直接內(nèi)存訪問(DMA)控制器
DMA 控制器是 STM32F103C8T6 的核心功能之一,它可以實現(xiàn)在不占用 CPU 資源的情況下,在內(nèi)存、外設(shè)和內(nèi)存之間進(jìn)行數(shù)據(jù)傳輸。該芯片提供了兩個 DMA 控制器,每個控制器有多個通道,可以配置為不同的傳輸方向和傳輸模式。例如,DMA 可以用于將 ADC 的轉(zhuǎn)換結(jié)果傳輸?shù)?SRAM 中,或者將 SRAM 中的數(shù)據(jù)傳輸?shù)?USART/SPI 等外設(shè)進(jìn)行發(fā)送。DMA 的使用極大地減輕了 CPU 的負(fù)擔(dān),使得 CPU 能夠?qū)W⒂谔幚砀匾娜蝿?wù),提高了整個系統(tǒng)的吞吐量和實時性。
第八章:調(diào)試與編程
JTAG 與 SWD 調(diào)試接口
JTAG(Joint Test Action Group)和 SWD(Serial Wire Debug)是兩種常用的調(diào)試接口,用于連接外部調(diào)試器,如 ST-Link、J-Link 等。JTAG 接口需要 4-5 個引腳,支持邊界掃描和程序調(diào)試。SWD 接口是一種兩線制調(diào)試接口,只占用兩個引腳(SWDIO 和 SWCLK),在節(jié)省引腳資源的同時,提供了與 JTAG 幾乎相同的調(diào)試功能。SWD 接口特別適用于引腳受限的小型封裝芯片。通過這些接口,開發(fā)者可以對程序進(jìn)行單步執(zhí)行、斷點調(diào)試、查看寄存器和內(nèi)存內(nèi)容等操作,極大地簡化了軟件開發(fā)和故障排查過程。
固件編程
STM32F103C8T6 的固件可以通過多種方式進(jìn)行編程。最常見的方式是使用 JTAG 或 SWD 調(diào)試器,將編譯好的程序鏡像文件直接下載到閃存中。另一種方式是在系統(tǒng)內(nèi)編程(ISP),通過 USART 接口使用 bootloader 協(xié)議進(jìn)行固件下載。當(dāng)芯片上電時,BOOT0 和 BOOT1 引腳的電平狀態(tài)決定了從哪個地址啟動程序。當(dāng) BOOT0 和 BOOT1 引腳配置為從系統(tǒng)引導(dǎo)程序啟動時,開發(fā)者可以通過 USART1 將固件下載到閃存中。此外,STM32F103C8T6 也支持在應(yīng)用內(nèi)編程(IAP),即在程序運行時,通過特定的代碼序列對閃存進(jìn)行擦除和寫入操作,從而實現(xiàn)固件的自更新。
第九章:其他外設(shè)
實時時鐘(RTC)
STM32F103C8T6 內(nèi)置了一個 RTC,它由低速外部時鐘(LSE)或低速內(nèi)部時鐘(LSI)供電,即使在主電源斷電后,只要有備用電池 V_BAT 供電,RTC 仍然可以保持運行,提供精確的時間和日期信息。RTC 可以配置為生成鬧鐘事件或周期性喚醒事件,常用于需要時間戳、定時喚醒等功能的設(shè)備。
看門狗(Watchdog)
STM32F103C8T6 提供了兩個看門狗定時器:獨立看門狗(IWDG) 和 窗口看門狗(WWDG)。IWDG 由獨立的 LSI 時鐘供電,即使主時鐘出現(xiàn)故障,它也能正常工作。當(dāng)程序在規(guī)定時間內(nèi)沒有“喂狗”(即沒有刷新看門狗計數(shù)器),看門狗就會溢出,并觸發(fā)系統(tǒng)復(fù)位,防止程序陷入死循環(huán)。WWDG 則提供了一個更強大的功能,它要求程序在規(guī)定的時間窗口內(nèi)進(jìn)行“喂狗”,如果喂狗太早或太晚,都會觸發(fā)系統(tǒng)復(fù)位,確保程序的運行狀態(tài)正常。
第十章:封裝與引腳
STM32F103C8T6 采用 LQFP48 封裝,共有 48 個引腳。每個引腳都具有多種復(fù)用功能,開發(fā)者需要根據(jù)實際應(yīng)用需求,通過編程配置來選擇每個引腳的功能。LQFP48 封裝尺寸小,適合空間有限的應(yīng)用。每個引腳都有其特定的功能,例如 VDD/VSS 是電源引腳,PC13-PC15 是可用于備份域的引腳,PA0-PA15、PB0-PB15 等是通用 GPIO 引腳。開發(fā)者在設(shè)計硬件時,必須參考芯片手冊中的引腳定義,正確連接電源、晶振和外設(shè)。
第十一章:編程實踐與技巧
寄存器編程與庫函數(shù)
對于 STM32F103C8T6 的編程,開發(fā)者可以選擇直接操作寄存器,或者使用 STMicroelectronics 提供的 HAL(Hardware Abstraction Layer) 庫或 LL(Low Layer) 庫。直接操作寄存器可以最大程度地發(fā)揮芯片的性能,但編程難度較大,需要深入理解每個寄存器的功能。而使用庫函數(shù)則可以簡化編程,提高開發(fā)效率,特別適合初學(xué)者或快速原型開發(fā)。HAL 庫提供了更高層次的抽象,而 LL 庫則更接近寄存器操作,兩者各有優(yōu)缺點,開發(fā)者可以根據(jù)項目需求進(jìn)行選擇。
中斷服務(wù)函數(shù)
中斷是嵌入式系統(tǒng)中的核心概念,中斷服務(wù)函數(shù)(ISR)是用來處理中斷事件的特殊函數(shù)。在 STM32F103C8T6 中,每個中斷源都有一個對應(yīng)的中斷向量,中斷向量表中存儲著 ISR 的地址。當(dāng)中斷發(fā)生時,內(nèi)核會根據(jù)中斷向量表的地址跳轉(zhuǎn)到相應(yīng)的 ISR 中執(zhí)行。在編寫 ISR 時,需要注意以下幾點:ISR 應(yīng)盡可能短小精悍,避免在其中執(zhí)行耗時操作;ISR 中需要清除中斷標(biāo)志位,以防止重復(fù)進(jìn)入中斷;ISR 中應(yīng)避免使用會引起上下文切換的函數(shù),如延遲函數(shù)。
DMA 使用技巧
在使用 DMA 時,需要注意以下幾點:首先,確保 DMA 傳輸?shù)脑吹刂泛湍康牡刂吩谡_的存儲器類型中;其次,正確配置 DMA 通道,包括傳輸方向、數(shù)據(jù)寬度、傳輸模式等;最后,在 DMA 傳輸完成后,要清除相應(yīng)的 DMA 中斷標(biāo)志位。DMA 的使用可以大大提升系統(tǒng)的性能,例如,可以通過 DMA 將 ADC 轉(zhuǎn)換結(jié)果自動存儲到數(shù)組中,而無需 CPU 持續(xù)查詢 ADC 狀態(tài)。
第十二章:系統(tǒng)復(fù)位與啟動
STM32F103C8T6 支持多種復(fù)位源,包括上電復(fù)位(POR/PDR)、外部復(fù)位、看門狗復(fù)位、軟件復(fù)位等。當(dāng)系統(tǒng)復(fù)位后,程序會從閃存的復(fù)位向量地址(通常是 0x08000004)開始執(zhí)行。在啟動過程中,系統(tǒng)會根據(jù) BOOT0 和 BOOT1 引腳的電平狀態(tài)來選擇啟動模式,可以是閃存、系統(tǒng)存儲器或 SRAM。開發(fā)者需要根據(jù)自己的應(yīng)用需求,正確配置這些啟動引腳,以確保程序能夠正常啟動。
第十三章:總結(jié)
STM32F103C8T6 是一款功能強大、應(yīng)用廣泛的微控制器。本手冊詳細(xì)介紹了其 ARM Cortex-M3 內(nèi)核、時鐘系統(tǒng)、存儲器、GPIO、定時器、通信接口、ADC、DMA 等核心功能,并提供了調(diào)試、編程和系統(tǒng)復(fù)位等方面的指導(dǎo)。通過深入學(xué)習(xí)本手冊,開發(fā)者將能夠充分理解和掌握該芯片的各項功能,為嵌入式系統(tǒng)的設(shè)計和開發(fā)打下堅實的基礎(chǔ)。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點,拍明芯城不對內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對此聲明的最終解釋權(quán)。