stm32f405中文手冊(cè)


前言
STM32F405系列微控制器是意法半導(dǎo)體(STMicroelectronics)基于ARM Cortex-M4內(nèi)核開發(fā)的高性能產(chǎn)品,廣泛應(yīng)用于工業(yè)控制、醫(yī)療設(shè)備、消費(fèi)電子等領(lǐng)域。本手冊(cè)旨在為工程師和開發(fā)者提供一份詳細(xì)的中文參考資料,深入解析STM32F405的各項(xiàng)功能、寄存器配置以及編程方法。通過(guò)本手冊(cè)的學(xué)習(xí),讀者將能夠全面掌握STM32F405的開發(fā)要點(diǎn),為實(shí)際項(xiàng)目應(yīng)用打下堅(jiān)實(shí)基礎(chǔ)。我們將著重介紹其核心架構(gòu)、存儲(chǔ)器組織、時(shí)鐘系統(tǒng)、中斷管理、通用I/O以及部分常用外設(shè),力求內(nèi)容詳盡、易于理解,并提供足夠的細(xì)節(jié)以滿足實(shí)際開發(fā)需求。
第一章 STM32F405概述
1.1 Cortex-M4內(nèi)核
STM32F405系列微控制器搭載了高性能的ARM Cortex-M4處理器,該內(nèi)核在Cortex-M3的基礎(chǔ)上增加了單精度浮點(diǎn)運(yùn)算單元(FPU)和數(shù)字信號(hào)處理(DSP)指令集,使其在處理復(fù)雜算法和信號(hào)處理任務(wù)時(shí)具備顯著優(yōu)勢(shì)。Cortex-M4內(nèi)核具有哈佛結(jié)構(gòu),指令和數(shù)據(jù)總線分離,可以同時(shí)進(jìn)行指令取指和數(shù)據(jù)訪問(wèn),極大地提高了處理效率。此外,其內(nèi)置的NVIC(嵌套向量中斷控制器)提供了高效的中斷管理機(jī)制,支持多個(gè)中斷源的優(yōu)先級(jí)配置和嵌套處理,確保系統(tǒng)在實(shí)時(shí)性要求高的應(yīng)用中表現(xiàn)出色。內(nèi)核的低功耗特性也使其適用于對(duì)能耗有嚴(yán)格要求的嵌入式系統(tǒng)。
1.2 器件特性
STM32F405系列微控制器擁有豐富的片上資源和強(qiáng)大的處理能力。其主頻最高可達(dá)168 MHz,提供了充足的運(yùn)算能力來(lái)應(yīng)對(duì)各種復(fù)雜的應(yīng)用場(chǎng)景。片內(nèi)存儲(chǔ)器包括高達(dá)1MB的閃存(Flash)用于程序存儲(chǔ),以及高達(dá)192KB的SRAM用于數(shù)據(jù)存儲(chǔ)和運(yùn)行時(shí)變量。這些存儲(chǔ)器提供了充足的空間來(lái)承載復(fù)雜的操作系統(tǒng)、圖形界面和大數(shù)據(jù)處理任務(wù)。
除了強(qiáng)大的處理核心和存儲(chǔ)器,STM32F405還集成了眾多高性能外設(shè),包括多個(gè)高速模數(shù)轉(zhuǎn)換器(ADC)、數(shù)模轉(zhuǎn)換器(DAC)、定時(shí)器、通用同步/異步收發(fā)器(USART)、串行外設(shè)接口(SPI)、I2C總線接口、USB OTG全速/高速控制器、以太網(wǎng)MAC、CAN總線等。這些外設(shè)為各類應(yīng)用提供了豐富的數(shù)據(jù)采集、通信和控制能力。例如,其多達(dá)3個(gè)12位ADC,支持多通道采樣和交錯(cuò)模式,可實(shí)現(xiàn)高速精確的模擬信號(hào)采集;多達(dá)2個(gè)12位DAC可用于生成模擬信號(hào);多達(dá)17個(gè)定時(shí)器提供了靈活的PWM生成、輸入捕獲和計(jì)數(shù)功能。廣泛的通信接口使其能夠輕松地與其他設(shè)備或網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交換。
1.3 引腳和封裝
STM32F405系列提供了多種封裝類型,以適應(yīng)不同的應(yīng)用需求,常見(jiàn)的有LQFP64、LQFP100、LQFP144等。不同封裝的引腳數(shù)量和可用GPIO資源有所差異。用戶在選擇封裝時(shí)需要根據(jù)實(shí)際項(xiàng)目的引腳需求、PCB板尺寸以及成本等因素進(jìn)行綜合考量。每個(gè)引腳的功能都是可編程的,可以通過(guò)配置相應(yīng)的寄存器來(lái)選擇作為通用輸入/輸出(GPIO)、模擬輸入、外部中斷源、或特定外設(shè)的功能引腳。理解引腳復(fù)用功能是STM32開發(fā)中的重要環(huán)節(jié),它允許在有限的引腳資源上實(shí)現(xiàn)多種功能。
第二章 存儲(chǔ)器和總線
2.1 存儲(chǔ)器映射
STM32F405的存儲(chǔ)器采用統(tǒng)一的線性地址空間,所有片內(nèi)和片外存儲(chǔ)器以及外設(shè)寄存器都被映射到這個(gè)地址空間中,用戶可以通過(guò)指針訪問(wèn)任何地址。這種統(tǒng)一的存儲(chǔ)器映射極大地簡(jiǎn)化了編程模型。地址空間被劃分為多個(gè)區(qū)域,每個(gè)區(qū)域?qū)?yīng)不同的功能:例如,閃存區(qū)域用于存儲(chǔ)程序代碼和常量數(shù)據(jù),SRAM區(qū)域用于存儲(chǔ)運(yùn)行時(shí)數(shù)據(jù)和堆棧,外設(shè)寄存器區(qū)域用于配置和控制各種片內(nèi)外設(shè)。這種清晰的劃分有助于開發(fā)者管理存儲(chǔ)器資源和優(yōu)化代碼。了解存儲(chǔ)器映射圖對(duì)于進(jìn)行底層編程、優(yōu)化內(nèi)存使用以及調(diào)試都至關(guān)重要。
2.2 閃存(Flash Memory)
閃存是STM32F405用于存儲(chǔ)程序代碼、常量數(shù)據(jù)以及用戶配置數(shù)據(jù)的主要非易失性存儲(chǔ)器。其容量根據(jù)具體型號(hào)有所不同,最高可達(dá)1MB。閃存被劃分為多個(gè)扇區(qū),每個(gè)扇區(qū)可以獨(dú)立擦除和編程。閃存具有掉電保持?jǐn)?shù)據(jù)的特性,確保程序在芯片斷電后不會(huì)丟失。STM32F405的閃存控制器提供了讀保護(hù)、寫保護(hù)和扇區(qū)保護(hù)等功能,可以有效保護(hù)程序的知識(shí)產(chǎn)權(quán)和數(shù)據(jù)的安全性。此外,它還支持IAP(在應(yīng)用編程)和ISP(在系統(tǒng)編程)功能,允許用戶通過(guò)軟件或外部編程器對(duì)閃存進(jìn)行更新。
2.3 SRAM(Static Random Access Memory)
SRAM是高速的易失性存儲(chǔ)器,用于存儲(chǔ)程序運(yùn)行時(shí)的數(shù)據(jù)、變量、堆棧以及DMA緩沖區(qū)。STM32F405的SRAM容量最高可達(dá)192KB,分為多個(gè)區(qū)域,包括主SRAM和CCM(Core Coupled Memory)SRAM。CCM SRAM與Cortex-M4內(nèi)核緊密耦合,具有更低的訪問(wèn)延遲,適合存放對(duì)實(shí)時(shí)性要求高的代碼段或關(guān)鍵數(shù)據(jù),以提高程序執(zhí)行效率。由于SRAM是易失性的,當(dāng)芯片斷電時(shí),其中存儲(chǔ)的數(shù)據(jù)將會(huì)丟失。因此,對(duì)于需要掉電保持的數(shù)據(jù),通常會(huì)將其存儲(chǔ)在閃存或外部EEPROM中。
2.4 總線結(jié)構(gòu)
STM32F405內(nèi)部采用了多層AHB(Advanced High-performance Bus)和APB(Advanced Peripheral Bus)總線矩陣結(jié)構(gòu),實(shí)現(xiàn)了CPU、DMA控制器、閃存、SRAM以及各種外設(shè)之間的高效并行數(shù)據(jù)傳輸。這種多層總線架構(gòu)允許多個(gè)主設(shè)備(如CPU和DMA)同時(shí)訪問(wèn)不同的從設(shè)備(如閃存和SRAM),從而避免了總線沖突,提高了系統(tǒng)整體性能。AHB總線負(fù)責(zé)高速外設(shè)和存儲(chǔ)器的數(shù)據(jù)傳輸,而APB總線則連接速度相對(duì)較慢的外設(shè)。這種分層設(shè)計(jì)優(yōu)化了總線帶寬的利用率,確保了系統(tǒng)各部分的協(xié)調(diào)工作。
第三章 時(shí)鐘系統(tǒng)
3.1 時(shí)鐘源
STM32F405提供了多種靈活的時(shí)鐘源,以滿足不同應(yīng)用對(duì)精度、穩(wěn)定性和功耗的需求。主要時(shí)鐘源包括:
高速外部晶體(HSE): 通常連接一個(gè)外部晶體振蕩器,提供高精度和高穩(wěn)定性的時(shí)鐘源,是系統(tǒng)主時(shí)鐘的理想選擇。HSE可以作為PLL(鎖相環(huán))的輸入,生成更高的系統(tǒng)時(shí)鐘頻率。
高速內(nèi)部RC振蕩器(HSI): 片內(nèi)RC振蕩器,無(wú)需外部元件,啟動(dòng)時(shí)間快,但精度相對(duì)較低。適用于對(duì)時(shí)鐘精度要求不高的應(yīng)用,或作為HSE失效時(shí)的備用時(shí)鐘。
低速外部晶體(LSE): 通常連接一個(gè)32.768kHz的外部晶體,主要用于實(shí)時(shí)時(shí)鐘(RTC)和低功耗模式下的喚醒功能,提供精確的計(jì)時(shí)。
低速內(nèi)部RC振蕩器(LSI): 片內(nèi)RC振蕩器,頻率較低且精度不高,主要用于獨(dú)立看門狗(IWDG)和自動(dòng)喚醒單元(AWU),提供極低功耗操作。
PLL(鎖相環(huán)): PLL能夠?qū)⒌皖l時(shí)鐘源倍頻到更高的頻率,是生成系統(tǒng)主時(shí)鐘(SYSCLK)和USB、SDIO等高速外設(shè)時(shí)鐘的關(guān)鍵。它可以通過(guò)配置分頻和倍頻系數(shù),靈活地生成所需頻率。
3.2 時(shí)鐘樹
STM32F405的時(shí)鐘樹是一個(gè)復(fù)雜的網(wǎng)絡(luò),它將不同的時(shí)鐘源經(jīng)過(guò)分頻、倍頻和多路選擇后,分配給CPU內(nèi)核、總線以及各個(gè)外設(shè)。理解時(shí)鐘樹的結(jié)構(gòu)和配置對(duì)于正確地使能和配置外設(shè)至關(guān)重要。
SYSCLK(系統(tǒng)時(shí)鐘): 可以選擇HSE、HSI或PLL作為系統(tǒng)主時(shí)鐘源。CPU內(nèi)核、AHB總線和許多外設(shè)都工作在SYSCLK或其分頻后的頻率上。
AHB總線時(shí)鐘(HCLK): 由SYSCLK經(jīng)過(guò)AHB預(yù)分頻器生成,提供給CPU內(nèi)核、DMA、閃存和SRAM。
APB1總線時(shí)鐘(PCLK1): 由HCLK經(jīng)過(guò)APB1預(yù)分頻器生成,用于連接低速外設(shè),如TIM2-7、UART2-5、SPI2-3、I2C1-3、PWR、DAC等。
APB2總線時(shí)鐘(PCLK2): 由HCLK經(jīng)過(guò)APB2預(yù)分頻器生成,用于連接高速外設(shè),如TIM1、TIM8、USART1、USART6、ADC1-3、SDIO、SPI1等。
正確配置時(shí)鐘分頻系數(shù)對(duì)于確保外設(shè)正常工作和達(dá)到所需性能至關(guān)重要。過(guò)高的時(shí)鐘頻率可能導(dǎo)致功耗增加和不穩(wěn)定,而過(guò)低的時(shí)鐘頻率則會(huì)影響系統(tǒng)性能。
3.3 時(shí)鐘配置
時(shí)鐘配置涉及到操作RCC(Reset and Clock Control)寄存器。開發(fā)者需要根據(jù)應(yīng)用需求,選擇合適的時(shí)鐘源,配置PLL的輸入源、倍頻系數(shù)和分頻系數(shù),然后將生成的SYSCLK分頻到AHB、APB1和APB2總線。通常的配置步驟包括:
使能選定的時(shí)鐘源(HSE/HSI)。
等待時(shí)鐘源穩(wěn)定。
配置PLL的各項(xiàng)參數(shù),包括PLL輸入時(shí)鐘源、倍頻因子、分頻因子等。
選擇PLL作為系統(tǒng)時(shí)鐘源。
配置AHB、APB1、APB2總線預(yù)分頻器。
更新系統(tǒng)時(shí)鐘變量SystemCoreClock,以便庫(kù)函數(shù)和用戶代碼能夠正確獲取當(dāng)前的系統(tǒng)時(shí)鐘頻率。
STM32CubeMX等工具可以幫助開發(fā)者圖形化配置時(shí)鐘,并生成相應(yīng)的初始化代碼,大大簡(jiǎn)化了時(shí)鐘配置的復(fù)雜性。
第四章 中斷管理
4.1 中斷向量表
中斷向量表是存儲(chǔ)中斷服務(wù)程序(ISR)入口地址的表格。當(dāng)發(fā)生中斷時(shí),處理器會(huì)根據(jù)中斷源的編號(hào)查找中斷向量表中對(duì)應(yīng)的地址,然后跳轉(zhuǎn)到該地址執(zhí)行中斷服務(wù)程序。STM32F405的中斷向量表位于閃存的起始地址(或根據(jù)啟動(dòng)模式配置的偏移地址),包含復(fù)位向量、NMI(不可屏蔽中斷)向量、硬故障向量以及所有外設(shè)中斷的向量。理解中斷向量表的結(jié)構(gòu)和作用是編寫中斷驅(qū)動(dòng)程序的關(guān)鍵。
4.2 NVIC(嵌套向量中斷控制器)
NVIC是Cortex-M內(nèi)核的一個(gè)重要組成部分,負(fù)責(zé)管理系統(tǒng)中的所有中斷請(qǐng)求。它提供了以下關(guān)鍵功能:
中斷使能/禁用: 可以獨(dú)立使能或禁用每個(gè)中斷源,以控制其是否能夠觸發(fā)中斷。
中斷優(yōu)先級(jí)管理: 每個(gè)中斷源都可以配置一個(gè)優(yōu)先級(jí),當(dāng)多個(gè)中斷同時(shí)發(fā)生時(shí),優(yōu)先級(jí)高的中斷將優(yōu)先得到響應(yīng)。NVIC支持中斷的搶占和嵌套,即一個(gè)高優(yōu)先級(jí)中斷可以打斷一個(gè)正在執(zhí)行的低優(yōu)先級(jí)中斷。
中斷掛起/清除: 可以手動(dòng)設(shè)置或清除中斷掛起狀態(tài),用于軟件觸發(fā)中斷或清除已處理的中斷標(biāo)志。
向量表重映射: 允許將中斷向量表重映射到SRAM,這在需要運(yùn)行時(shí)動(dòng)態(tài)更新中斷向量表時(shí)非常有用。
4.3 外部中斷/事件控制器(EXTI)
EXTI是STM32F405特有的一個(gè)外設(shè),它允許將GPIO引腳配置為外部中斷或事件的觸發(fā)源。EXTI模塊有23條中斷/事件線,其中大部分與GPIO引腳復(fù)用。
中斷模式: 當(dāng)外部信號(hào)滿足觸發(fā)條件(上升沿、下降沿或雙邊沿)時(shí),EXTI會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求,并由NVIC處理。
事件模式: 當(dāng)外部信號(hào)滿足觸發(fā)條件時(shí),EXTI會(huì)產(chǎn)生一個(gè)事件脈沖,可以用于觸發(fā)其他外設(shè)(如定時(shí)器、ADC、DMA等),而無(wú)需CPU介入,從而降低CPU的負(fù)載。
配置EXTI涉及到以下步驟:
使能相應(yīng)的GPIO時(shí)鐘和EXTI時(shí)鐘。
配置GPIO引腳為輸入模式。
通過(guò)SYSCFG(系統(tǒng)配置控制器)將GPIO引腳映射到EXTI線。
配置EXTI線的觸發(fā)方式(上升沿、下降沿或雙邊沿)。
使能EXTI線的中斷/事件請(qǐng)求。
配置NVIC中對(duì)應(yīng)EXTI中斷的優(yōu)先級(jí)并使能。
EXTI廣泛應(yīng)用于按鍵檢測(cè)、傳感器信號(hào)采集、外部設(shè)備喚醒等場(chǎng)景。
第五章 通用輸入/輸出(GPIO)
5.1 GPIO概述
GPIO(General Purpose Input/Output)是STM32F405最基本也是最重要的外設(shè)之一,它允許微控制器通過(guò)引腳與外部世界進(jìn)行交互。STM32F405的GPIO引腳具有高度的靈活性和可配置性,每個(gè)GPIO引腳都可以獨(dú)立地配置為多種模式,以適應(yīng)不同的應(yīng)用需求。GPIO模塊通常通過(guò)寄存器進(jìn)行操作,每個(gè)引腳都有一組專用的控制寄存器位。
5.2 GPIO工作模式
STM32F405的每個(gè)GPIO引腳都可以配置為以下八種基本工作模式:
輸入模式(Input Mode):
浮空輸入(Floating Input): 引腳不對(duì)信號(hào)進(jìn)行上拉或下拉,適用于連接外部帶有上拉/下拉電阻的設(shè)備,或用于模擬信號(hào)輸入。
上拉輸入(Pull-up Input): 引腳內(nèi)部連接一個(gè)上拉電阻到VDD,當(dāng)外部輸入為低電平時(shí),引腳為低;當(dāng)外部輸入斷開或高阻態(tài)時(shí),引腳被上拉到高電平。常用于按鍵檢測(cè)等。
下拉輸入(Pull-down Input): 引腳內(nèi)部連接一個(gè)下拉電阻到VSS,當(dāng)外部輸入為高電平時(shí),引腳為高;當(dāng)外部輸入斷開或高阻態(tài)時(shí),引腳被下拉到低電平。
模擬輸入(Analog Input): 用于連接模擬信號(hào),將引腳配置為模擬輸入模式后,ADC(模數(shù)轉(zhuǎn)換器)可以對(duì)該引腳上的電壓進(jìn)行采樣。
輸出模式(Output Mode):
開漏輸出(Open-drain Output): 引腳的輸出級(jí)只包含一個(gè)N溝道MOSFET晶體管連接到VSS,當(dāng)輸出高電平時(shí),MOSFET關(guān)斷,引腳呈高阻態(tài);當(dāng)輸出低電平時(shí),MOSFET導(dǎo)通,引腳連接到VSS。開漏輸出通常需要外部上拉電阻,可用于I2C總線、電平轉(zhuǎn)換或連接多個(gè)設(shè)備的共享總線。
推挽輸出(Push-pull Output): 引腳的輸出級(jí)包含一個(gè)N溝道MOSFET和一個(gè)P溝道MOSFET,當(dāng)輸出高電平時(shí),P溝道MOSFET導(dǎo)通,N溝道MOSFET關(guān)斷;當(dāng)輸出低電平時(shí),N溝道MOSFET導(dǎo)通,P溝道MOSFET關(guān)斷。推挽輸出能夠提供更大的驅(qū)動(dòng)電流,適用于驅(qū)動(dòng)LED、繼電器或數(shù)字信號(hào)傳輸。
復(fù)用功能模式(Alternate Function Mode):
在這種模式下,GPIO引腳不再作為通用輸入或輸出,而是將其功能分配給片內(nèi)其他外設(shè),例如USART、SPI、I2C、定時(shí)器、ADC等。通過(guò)配置相應(yīng)的AFR(Alternate Function Register)寄存器,可以選擇引腳對(duì)應(yīng)的復(fù)用功能。
JTAG/SWD調(diào)試模式:
某些特定的GPIO引腳被指定用于JTAG或SWD調(diào)試接口。在調(diào)試模式下,這些引腳的功能被專用調(diào)試電路占用。
除了模式配置,GPIO引腳還可以配置輸出速度(低速、中速、高速、超高速)和鎖存功能。輸出速度決定了引腳電平翻轉(zhuǎn)的速度,對(duì)于高速信號(hào)傳輸和降低電磁干擾(EMI)具有重要意義。鎖存功能則可以防止引腳狀態(tài)在調(diào)試模式下被意外修改。
5.3 GPIO寄存器
GPIO的配置和控制是通過(guò)操作一系列專用寄存器來(lái)實(shí)現(xiàn)的。每個(gè)GPIO端口(GPIOA, GPIOB, ..., GPIOI)都有一組獨(dú)立的寄存器。以下是一些主要寄存器:
MODER(Port mode register): 配置引腳的工作模式(輸入、通用輸出、復(fù)用功能、模擬)。
OTYPER(Port output type register): 配置輸出模式下的輸出類型(推挽或開漏)。
OSPEEDR(Port output speed register): 配置輸出模式下的輸出速度。
PUPDR(Port pull-up/pull-down register): 配置輸入模式下的上拉/下拉電阻。
IDR(Port input data register): 讀取GPIO引腳的當(dāng)前輸入狀態(tài)。
ODR(Port output data register): 設(shè)置GPIO引腳的輸出狀態(tài)。
BSRR(Port bit set/reset register): 原子地設(shè)置或清除單個(gè)或多個(gè)GPIO引腳的輸出狀態(tài),避免讀-改-寫操作帶來(lái)的競(jìng)態(tài)問(wèn)題。
LCKR(Port configuration lock register): 鎖存GPIO配置,防止意外修改。
AFR(Alternate function low/high register): 配置引腳的復(fù)用功能。
通過(guò)直接操作這些寄存器,或者使用HAL庫(kù)/LL庫(kù)提供的API函數(shù),開發(fā)者可以實(shí)現(xiàn)對(duì)GPIO的精確控制。
第六章 定時(shí)器(TIM)
6.1 定時(shí)器概述
STM32F405系列微控制器集成了多種功能強(qiáng)大的定時(shí)器,包括基本定時(shí)器、通用定時(shí)器和高級(jí)控制定時(shí)器。這些定時(shí)器是實(shí)現(xiàn)延時(shí)、周期性任務(wù)、PWM生成、輸入捕獲、編碼器接口等功能的關(guān)鍵。
基本定時(shí)器(TIM6/TIM7): 主要用于提供基本的定時(shí)功能,沒(méi)有外部I/O引腳,不能用于PWM生成或輸入捕獲。它們常用于觸發(fā)DAC轉(zhuǎn)換或作為通用延時(shí)。
通用定時(shí)器(TIM2/TIM3/TIM4/TIM5/TIM9/TIM10/TIM11/TIM12/TIM13/TIM14): 功能最豐富的定時(shí)器,除了基本的定時(shí)功能外,還支持PWM輸出、輸入捕獲、輸出比較、單脈沖模式、編碼器接口等。它們通常連接到GPIO引腳,可以生成或捕獲外部信號(hào)。
高級(jí)控制定時(shí)器(TIM1/TIM8): 在通用定時(shí)器功能的基礎(chǔ)上,增加了死區(qū)生成、互補(bǔ)輸出、剎車輸入等高級(jí)特性,特別適合于復(fù)雜的電機(jī)控制應(yīng)用。
6.2 通用定時(shí)器核心功能
以通用定時(shí)器為例,其核心功能包括:
6.2.1 定時(shí)模式(Time-base unit)
定時(shí)器通過(guò)一個(gè)內(nèi)部計(jì)數(shù)器(CNT)來(lái)計(jì)數(shù)。計(jì)數(shù)器可以向上計(jì)數(shù)、向下計(jì)數(shù)或中心對(duì)齊計(jì)數(shù)。計(jì)數(shù)器的工作頻率由時(shí)鐘源和預(yù)分頻器(PSC)決定。當(dāng)計(jì)數(shù)器達(dá)到自動(dòng)重載寄存器(ARR)的值時(shí),會(huì)產(chǎn)生一個(gè)更新事件(Update Event),并可以選擇性地觸發(fā)中斷或DMA請(qǐng)求。
計(jì)數(shù)器(CNT): 存儲(chǔ)當(dāng)前的計(jì)數(shù)值。
預(yù)分頻器(PSC): 對(duì)定時(shí)器時(shí)鐘源進(jìn)行分頻,從而控制計(jì)數(shù)器的計(jì)數(shù)速度。
自動(dòng)重載寄存器(ARR): 設(shè)定計(jì)數(shù)器的最大值(或周期),當(dāng)計(jì)數(shù)器達(dá)到ARR值時(shí),會(huì)產(chǎn)生更新事件并可選地復(fù)位計(jì)數(shù)器。
通過(guò)配置PSC和ARR,可以精確地控制定時(shí)器的周期,從而實(shí)現(xiàn)延時(shí)或周期性任務(wù)。
6.2.2 PWM生成(Pulse Width Modulation)
PWM是一種通過(guò)調(diào)整方波的占空比來(lái)模擬模擬信號(hào)的技術(shù)。通用定時(shí)器通過(guò)配置輸出比較模式(Output Compare Mode)來(lái)實(shí)現(xiàn)PWM輸出。
比較寄存器(CCR): 每個(gè)通道都有一個(gè)比較寄存器,用于設(shè)置PWM的占空比。當(dāng)計(jì)數(shù)器值與CCR值匹配時(shí),輸出波形的狀態(tài)會(huì)發(fā)生改變。
PWM模式: 定時(shí)器支持多種PWM模式,包括PWM模式1和PWM模式2,它們定義了在計(jì)數(shù)器達(dá)到CCR值時(shí),輸出電平的變化方式。
輸出使能: 需要使能相應(yīng)的通道輸出以及主輸出,才能將PWM波形輸出到GPIO引腳。
通過(guò)調(diào)整CCR的值,可以在運(yùn)行時(shí)動(dòng)態(tài)地改變PWM的占空比,廣泛應(yīng)用于電機(jī)調(diào)速、LED亮度控制、DAC功能模擬等。
6.2.3 輸入捕獲(Input Capture)
輸入捕獲功能用于測(cè)量外部信號(hào)的脈沖寬度、周期或頻率。當(dāng)定時(shí)器通道的輸入引腳檢測(cè)到設(shè)定的觸發(fā)邊沿(上升沿、下降沿或雙邊沿)時(shí),當(dāng)前的計(jì)數(shù)器值會(huì)被捕獲到相應(yīng)的捕獲/比較寄存器(CCR)中,并可選地觸發(fā)中斷。
捕獲通道: 每個(gè)輸入捕獲通道都對(duì)應(yīng)一個(gè)CCR寄存器。
輸入極性: 可配置捕獲觸發(fā)的邊沿類型。
輸入預(yù)分頻器: 可對(duì)輸入信號(hào)進(jìn)行分頻,以捕獲更長(zhǎng)的脈沖。
通過(guò)捕獲不同邊沿的時(shí)間戳,可以計(jì)算出外部信號(hào)的周期、脈沖寬度等信息,廣泛應(yīng)用于測(cè)頻、測(cè)速、超聲波測(cè)距等。
6.2.4 輸出比較(Output Compare)
輸出比較功能用于在計(jì)數(shù)器值與比較寄存器(CCR)值匹配時(shí),改變GPIO引腳的輸出狀態(tài)。這可以用于生成單次脈沖、切換引腳狀態(tài)或觸發(fā)其他外設(shè)。與PWM不同的是,輸出比較通常用于生成非周期性的事件。
6.2.5 編碼器接口模式
通用定時(shí)器還可以配置為編碼器接口模式,用于解碼正交編碼器的A/B相信號(hào),從而測(cè)量旋轉(zhuǎn)角度和速度。定時(shí)器計(jì)數(shù)器會(huì)根據(jù)A/B相信號(hào)的相位差進(jìn)行增減計(jì)數(shù)。
6.3 定時(shí)器配置
配置定時(shí)器通常涉及以下步驟:
使能定時(shí)器時(shí)鐘: 通過(guò)RCC寄存器使能相應(yīng)定時(shí)器的時(shí)鐘。
配置時(shí)基單元: 設(shè)置預(yù)分頻器(PSC)和自動(dòng)重載寄存器(ARR)來(lái)確定定時(shí)器周期。
配置功能模式: 根據(jù)需求選擇PWM模式、輸入捕獲模式、輸出比較模式等。
配置通道: 對(duì)于PWM、輸入捕獲或輸出比較功能,需要配置相應(yīng)的通道,包括模式、極性、CCR值等。
配置GPIO引腳: 將定時(shí)器功能映射到相應(yīng)的GPIO引腳,并配置GPIO為復(fù)用功能模式。
使能定時(shí)器: 啟動(dòng)計(jì)數(shù)器。
配置中斷(可選): 如果需要中斷,配置NVIC并使能定時(shí)器更新中斷或捕獲/比較中斷。
第七章 模數(shù)轉(zhuǎn)換器(ADC)
7.1 ADC概述
STM32F405集成了多達(dá)3個(gè)12位精度的模數(shù)轉(zhuǎn)換器(ADC1、ADC2、ADC3),可以將模擬電壓信號(hào)轉(zhuǎn)換為數(shù)字量,以便微控制器進(jìn)行處理。ADC具有多通道、多種轉(zhuǎn)換模式和靈活的觸發(fā)源,廣泛應(yīng)用于傳感器數(shù)據(jù)采集、電壓電流測(cè)量等場(chǎng)景。每個(gè)ADC都可以獨(dú)立工作,也可以通過(guò)“三路交錯(cuò)模式”或“雙模”模式實(shí)現(xiàn)并行或交替轉(zhuǎn)換,提高采樣速率。
7.2 ADC主要特性
12位精度: 能夠?qū)⒛M信號(hào)轉(zhuǎn)換為4096個(gè)離散的數(shù)字值(212)。
多達(dá)24個(gè)外部通道: 可以連接多個(gè)外部模擬信號(hào)源。
內(nèi)部通道: 包括片內(nèi)溫度傳感器、內(nèi)部參考電壓(VREFINT)和VBAT/2(電池電壓的一半)通道。
轉(zhuǎn)換模式:
單次轉(zhuǎn)換模式(Single Conversion Mode): 完成一次轉(zhuǎn)換后停止。
連續(xù)轉(zhuǎn)換模式(Continuous Conversion Mode): 連續(xù)不斷地進(jìn)行轉(zhuǎn)換。
掃描模式(Scan Mode): 自動(dòng)依次轉(zhuǎn)換多個(gè)選定的通道。
間斷模式(Discontinuous Mode): 允許在掃描序列中跳過(guò)部分通道。
規(guī)則組和注入組:
規(guī)則組(Regular Group): 用于常規(guī)的ADC轉(zhuǎn)換,通常由軟件觸發(fā)或定時(shí)器等外部事件觸發(fā)。
注入組(Injected Group): 具有更高的優(yōu)先級(jí),可以“注入”到規(guī)則組的轉(zhuǎn)換序列中,通常用于緊急或需要快速響應(yīng)的測(cè)量。
DMA支持: ADC可以直接通過(guò)DMA將轉(zhuǎn)換結(jié)果傳輸?shù)酱鎯?chǔ)器,減輕CPU的負(fù)擔(dān)。
觸發(fā)源: 轉(zhuǎn)換可以由軟件觸發(fā),也可以由外部事件(如定時(shí)器、EXTI線等)觸發(fā)。
數(shù)據(jù)對(duì)齊: 轉(zhuǎn)換結(jié)果可以是左對(duì)齊或右對(duì)齊。
校準(zhǔn)功能: 內(nèi)置校準(zhǔn)電路,以提高轉(zhuǎn)換精度。
7.3 ADC工作原理
ADC的工作原理主要基于逐次逼近型(SAR)架構(gòu)。轉(zhuǎn)換過(guò)程大致如下:
采樣保持: 在轉(zhuǎn)換開始時(shí),ADC內(nèi)部的采樣保持電路會(huì)在極短的時(shí)間內(nèi)捕獲輸入模擬電壓,并將其保持住。
量化: 采樣保持的電壓與內(nèi)部參考電壓進(jìn)行比較和量化,最終生成一個(gè)數(shù)字值。
轉(zhuǎn)換時(shí)間: 整個(gè)轉(zhuǎn)換過(guò)程需要一定的時(shí)間,這個(gè)時(shí)間與ADC時(shí)鐘頻率和采樣周期(Sample Time)有關(guān)。增加采樣周期可以提高轉(zhuǎn)換精度,但會(huì)降低轉(zhuǎn)換速率。
7.4 ADC配置
配置ADC通常涉及以下步驟:
使能ADC時(shí)鐘和GPIO時(shí)鐘: 通過(guò)RCC寄存器使能相應(yīng)ADC模塊和模擬輸入引腳所在端口的時(shí)鐘。
配置GPIO引腳為模擬模式: 將需要進(jìn)行ADC轉(zhuǎn)換的GPIO引腳配置為模擬輸入模式。
復(fù)位ADC: 軟件復(fù)位ADC模塊,確保其處于初始狀態(tài)。
配置ADC參數(shù):
工作模式: 選擇單次、連續(xù)、掃描或間斷模式。
數(shù)據(jù)對(duì)齊: 選擇左對(duì)齊或右對(duì)齊。
分辨率: STM32F405為12位。
外部觸發(fā)源(如果使用): 選擇觸發(fā)轉(zhuǎn)換的外部事件(如定時(shí)器輸出、EXTI線)。
配置規(guī)則組/注入組通道:
通道順序: 如果使用掃描模式,需要定義通道的轉(zhuǎn)換順序。
采樣周期: 為每個(gè)通道設(shè)置合適的采樣周期。
使能ADC: 啟動(dòng)ADC模塊。
進(jìn)行校準(zhǔn): 在首次使用ADC或環(huán)境變化時(shí),進(jìn)行ADC校準(zhǔn)可以提高轉(zhuǎn)換精度。
啟動(dòng)轉(zhuǎn)換: 可以通過(guò)軟件觸發(fā)或等待外部事件觸發(fā)轉(zhuǎn)換。
讀取轉(zhuǎn)換結(jié)果:
查詢模式: 輪詢ADC狀態(tài)寄存器中的EOC(End Of Conversion)標(biāo)志位,當(dāng)EOC置位時(shí)讀取結(jié)果。
中斷模式: 配置并使能ADC中斷,在中斷服務(wù)程序中讀取結(jié)果。
DMA模式: 配置DMA控制器,將ADC轉(zhuǎn)換結(jié)果自動(dòng)傳輸?shù)酱鎯?chǔ)器。
正確配置ADC對(duì)于獲取準(zhǔn)確的模擬數(shù)據(jù)至關(guān)重要,需要注意參考電壓、模擬地線、噪聲抑制等問(wèn)題。
第八章 串行通信接口(USART)
8.1 USART概述
STM32F405系列微控制器集成了多個(gè)通用同步/異步收發(fā)器(USART),支持全雙工、同步/異步串行通信。USART是與外部設(shè)備進(jìn)行數(shù)據(jù)交換最常用的接口之一,廣泛應(yīng)用于與PC、傳感器、其他微控制器等進(jìn)行數(shù)據(jù)通信。USART支持多種工作模式,包括異步模式(UART)、同步模式(SPI主/從)、LIN、IrDA和智能卡模式。
8.2 USART主要特性
全雙工通信: 可以同時(shí)發(fā)送和接收數(shù)據(jù)。
靈活的波特率生成: 支持從幾百bps到數(shù)Mbps的波特率。
可編程數(shù)據(jù)字長(zhǎng): 支持7位、8位或9位數(shù)據(jù)字長(zhǎng)。
可編程停止位: 支持0.5、1、1.5或2個(gè)停止位。
奇偶校驗(yàn)控制: 支持偶校驗(yàn)或奇校驗(yàn)。
發(fā)送/接收緩沖區(qū): 內(nèi)置發(fā)送數(shù)據(jù)寄存器(TDR)和接收數(shù)據(jù)寄存器(RDR),實(shí)現(xiàn)數(shù)據(jù)的暫存。
中斷管理: 提供多種中斷源,如發(fā)送完成中斷、接收完成中斷、空閑幀中斷、錯(cuò)誤中斷等。
DMA支持: 可以通過(guò)DMA實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)收發(fā),減輕CPU負(fù)擔(dān)。
多處理器通信模式: 支持多機(jī)通信,可識(shí)別地址。
同步模式(SPI主/從): 可用于簡(jiǎn)單的同步通信。
LIN模式: 支持局部互聯(lián)網(wǎng)絡(luò)(LIN)協(xié)議。
IrDA模式: 支持紅外數(shù)據(jù)傳輸。
智能卡模式: 用于與智能卡通信。
8.3 異步模式(UART)工作原理
在異步模式下,USART通過(guò)兩個(gè)信號(hào)線進(jìn)行通信:
TX(發(fā)送): 數(shù)據(jù)輸出線。
RX(接收): 數(shù)據(jù)輸入線。
通信雙方需要預(yù)先約定好波特率、數(shù)據(jù)字長(zhǎng)、停止位和奇偶校驗(yàn)方式。數(shù)據(jù)以幀的形式傳輸,每幀數(shù)據(jù)通常包含一個(gè)起始位、數(shù)據(jù)位、可選的奇偶校驗(yàn)位和一個(gè)或多個(gè)停止位。
發(fā)送過(guò)程: 當(dāng)CPU將數(shù)據(jù)寫入TDR時(shí),USART會(huì)自動(dòng)將數(shù)據(jù)按位發(fā)送出去,并在發(fā)送完成后觸發(fā)發(fā)送完成中斷。
接收過(guò)程: 當(dāng)USART接收到數(shù)據(jù)時(shí),會(huì)將數(shù)據(jù)存儲(chǔ)到RDR中,并可選地觸發(fā)接收完成中斷。接收過(guò)程中也會(huì)監(jiān)測(cè)各種錯(cuò)誤,如幀錯(cuò)誤、過(guò)載錯(cuò)誤、噪聲錯(cuò)誤等。
8.4 USART配置
配置USART通常涉及以下步驟:
使能USART時(shí)鐘和GPIO時(shí)鐘: 通過(guò)RCC寄存器使能相應(yīng)USART模塊和TX/RX引腳所在端口的時(shí)鐘。
配置GPIO引腳為復(fù)用功能模式: 將TX和RX引腳配置為USART的復(fù)用功能模式,并選擇正確的AF功能。
復(fù)位USART: 軟件復(fù)位USART模塊。
配置USART參數(shù):
波特率: 根據(jù)通信需求計(jì)算并設(shè)置波特率。
字長(zhǎng): 設(shè)置數(shù)據(jù)位長(zhǎng)度(7、8或9位)。
停止位: 設(shè)置停止位數(shù)量。
奇偶校驗(yàn): 選擇無(wú)校驗(yàn)、偶校驗(yàn)或奇校驗(yàn)。
收發(fā)使能: 使能發(fā)送器和接收器。
配置中斷(可選): 如果需要中斷驅(qū)動(dòng)的收發(fā),使能相應(yīng)的USART中斷(如接收非空中斷、發(fā)送完成中斷)并配置NVIC。
配置DMA(可選): 如果需要DMA傳輸,配置DMA控制器進(jìn)行發(fā)送和接收。
使能USART: 啟動(dòng)USART模塊。
數(shù)據(jù)收發(fā):
發(fā)送: 將數(shù)據(jù)寫入U(xiǎn)SART_DR寄存器(或使用HAL庫(kù)的發(fā)送函數(shù))。
接收: 從USART_DR寄存器讀取數(shù)據(jù)(或使用HAL庫(kù)的接收函數(shù))。
在進(jìn)行USART通信時(shí),應(yīng)注意波特率匹配、信號(hào)電平兼容性、以及對(duì)數(shù)據(jù)錯(cuò)誤的檢查和處理。
第九章 調(diào)試與ISP
9.1 調(diào)試接口
STM32F405提供了兩種主要的硬件調(diào)試接口:
JTAG(Joint Test Action Group): 是一種更通用、功能更強(qiáng)大的調(diào)試接口,需要多達(dá)5個(gè)引腳(TMS、TCK、TDI、TDO、TRST)。JTAG不僅可以用于程序調(diào)試,還可以用于邊界掃描測(cè)試和閃存編程。
SWD(Serial Wire Debug): 是一種簡(jiǎn)化的兩線調(diào)試接口,只需要2個(gè)引腳(SWDIO、SWCLK),且功能與JTAG相似,但占用引腳少,更適合引腳資源有限的封裝。
大多數(shù)現(xiàn)代STM32開發(fā)板都使用SWD接口。通過(guò)連接ST-Link、J-Link等調(diào)試器,開發(fā)者可以使用Keil MDK、STM32CubeIDE等集成開發(fā)環(huán)境進(jìn)行在線調(diào)試,包括:
單步執(zhí)行: 逐行執(zhí)行代碼。
斷點(diǎn)設(shè)置: 在特定代碼行設(shè)置斷點(diǎn),當(dāng)程序執(zhí)行到斷點(diǎn)時(shí)暫停。
變量查看/修改: 實(shí)時(shí)查看和修改程序中的變量值。
寄存器查看: 查看CPU和外設(shè)寄存器的當(dāng)前狀態(tài)。
內(nèi)存查看: 查看任意內(nèi)存地址的內(nèi)容。
實(shí)時(shí)追蹤: 某些高級(jí)調(diào)試器支持指令和數(shù)據(jù)流的實(shí)時(shí)追蹤。
9.2 啟動(dòng)模式
STM32F405支持多種啟動(dòng)模式,通過(guò)BOOT0和BOOT1引腳(或內(nèi)部Flash選項(xiàng)字節(jié))的配置來(lái)選擇:
主閃存啟動(dòng)模式(Main Flash memory): 這是最常用的啟動(dòng)模式。芯片復(fù)位后,從主閃存的0x08000000地址開始執(zhí)行程序。用戶的應(yīng)用程序通常燒錄到這個(gè)區(qū)域。
系統(tǒng)存儲(chǔ)器啟動(dòng)模式(System memory): 芯片復(fù)位后,從內(nèi)置的系統(tǒng)存儲(chǔ)器(System Memory)開始執(zhí)行程序。系統(tǒng)存儲(chǔ)器中固化了ST公司提供的Bootloader程序,可以通過(guò)UART、USB等接口對(duì)主閃存進(jìn)行編程(ISP,In-System Programming)。這對(duì)于在產(chǎn)品生產(chǎn)線或現(xiàn)場(chǎng)進(jìn)行固件更新非常有用。
SRAM啟動(dòng)模式(SRAM): 芯片復(fù)位后,從片內(nèi)SRAM的起始地址開始執(zhí)行程序。這主要用于調(diào)試目的,可以將程序直接加載到SRAM中運(yùn)行,以提高下載速度或避免擦寫閃存的限制。
選擇正確的啟動(dòng)模式對(duì)于開發(fā)和部署應(yīng)用程序至關(guān)重要。
9.3 ISP(In-System Programming)
ISP允許用戶在產(chǎn)品系統(tǒng)中對(duì)微控制器的閃存進(jìn)行編程,而無(wú)需移除芯片。STM32的ISP功能通常通過(guò)系統(tǒng)存儲(chǔ)器中固化的Bootloader來(lái)實(shí)現(xiàn)。
工作流程:
將BOOT0引腳拉高,BOOT1引腳拉低(對(duì)于某些型號(hào)可能不同),使芯片進(jìn)入系統(tǒng)存儲(chǔ)器啟動(dòng)模式。
通過(guò)UART、USB或其他支持的通信接口,PC端的編程工具(如STM32CubeProgrammer)與Bootloader建立通信。
PC端發(fā)送固件數(shù)據(jù)給Bootloader,Bootloader將數(shù)據(jù)寫入到主閃存中。
編程完成后,將BOOT0引腳拉低,復(fù)位芯片,程序?qū)母潞蟮闹鏖W存啟動(dòng)。
ISP極大地簡(jiǎn)化了固件更新過(guò)程,特別適用于量產(chǎn)產(chǎn)品和遠(yuǎn)程維護(hù)。
9.4 IAP(In-Application Programming)
IAP是指在微控制器運(yùn)行應(yīng)用程序的同時(shí),通過(guò)應(yīng)用程序自身來(lái)更新閃存中的另一部分程序(通常是應(yīng)用程序或數(shù)據(jù))。
工作原理: IAP通常需要將閃存劃分為兩個(gè)或更多區(qū)域:一個(gè)區(qū)域存放Bootloader(或IAP程序本身),另一個(gè)區(qū)域存放用戶應(yīng)用程序。Bootloader負(fù)責(zé)接收新的應(yīng)用程序數(shù)據(jù),并將其寫入到應(yīng)用程序區(qū)域。
應(yīng)用場(chǎng)景: 允許產(chǎn)品在現(xiàn)場(chǎng)通過(guò)網(wǎng)絡(luò)(如以太網(wǎng)、Wi-Fi)、USB、或者其他通信接口接收新的固件包,然后由IAP程序?qū)崿F(xiàn)自更新。這對(duì)于實(shí)現(xiàn)遠(yuǎn)程升級(jí)和產(chǎn)品功能擴(kuò)展非常關(guān)鍵。
IAP的實(shí)現(xiàn)需要仔細(xì)管理閃存擦寫操作,確保在更新過(guò)程中數(shù)據(jù)的完整性和系統(tǒng)的穩(wěn)定性。通常會(huì)采用雙備份或校驗(yàn)和等機(jī)制來(lái)提高可靠性。
結(jié)語(yǔ)
本手冊(cè)詳細(xì)介紹了STM32F405系列微控制器的核心特性和主要外設(shè),涵蓋了Cortex-M4內(nèi)核、存儲(chǔ)器、時(shí)鐘系統(tǒng)、中斷、GPIO、定時(shí)器、ADC和USART等關(guān)鍵模塊。通過(guò)對(duì)這些內(nèi)容的深入解析,希望讀者能夠?qū)TM32F405有一個(gè)全面而深刻的理解。掌握這些基礎(chǔ)知識(shí)是高效開發(fā)復(fù)雜嵌入式系統(tǒng)的基石。
STM32F405作為一款功能強(qiáng)大且資源豐富的微控制器,其應(yīng)用潛力是巨大的。除了本手冊(cè)中涉及的外設(shè),STM32F405還集成了以太網(wǎng)MAC、CAN、USB OTG、SDIO等更高級(jí)的外設(shè),它們能夠支持更復(fù)雜的通信協(xié)議和數(shù)據(jù)存儲(chǔ)需求。深入學(xué)習(xí)這些外設(shè),結(jié)合RTOS(實(shí)時(shí)操作系統(tǒng))和中間件,將能夠開發(fā)出功能更加完善、性能更加優(yōu)異的產(chǎn)品。
在實(shí)際開發(fā)中,除了理解硬件特性,高效的開發(fā)工具鏈(如STM32CubeIDE、Keil MDK)、成熟的開發(fā)庫(kù)(HAL庫(kù)、LL庫(kù))以及社區(qū)資源也是不可或缺的。善用這些資源,將大大提高開發(fā)效率并降低開發(fā)難度。
希望本手冊(cè)能夠成為您在STM32F405開發(fā)旅程中的一份寶貴參考。在探索嵌入式世界的道路上,不斷學(xué)習(xí)和實(shí)踐,您將能夠創(chuàng)造出無(wú)限可能。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。