stm32f405中文手册


前言
STM32F405系列微控制器是意法半导体(STMicroelectronics)基于ARM Cortex-M4内核开发的高性能产品,广泛应用于工业控制、医疗设备、消费电子等领域。本手册旨在为工程师和开发者提供一份详细的中文参考资料,深入解析STM32F405的各项功能、寄存器配置以及编程方法。通过本手册的学习,读者将能够全面掌握STM32F405的开发要点,为实际项目应用打下坚实基础。我们将着重介绍其核心架构、存储器组织、时钟系统、中断管理、通用I/O以及部分常用外设,力求内容详尽、易于理解,并提供足够的细节以满足实际开发需求。
第一章 STM32F405概述
1.1 Cortex-M4内核
STM32F405系列微控制器搭载了高性能的ARM Cortex-M4处理器,该内核在Cortex-M3的基础上增加了单精度浮点运算单元(FPU)和数字信号处理(DSP)指令集,使其在处理复杂算法和信号处理任务时具备显著优势。Cortex-M4内核具有哈佛结构,指令和数据总线分离,可以同时进行指令取指和数据访问,极大地提高了处理效率。此外,其内置的NVIC(嵌套向量中断控制器)提供了高效的中断管理机制,支持多个中断源的优先级配置和嵌套处理,确保系统在实时性要求高的应用中表现出色。内核的低功耗特性也使其适用于对能耗有严格要求的嵌入式系统。
1.2 器件特性
STM32F405系列微控制器拥有丰富的片上资源和强大的处理能力。其主频最高可达168 MHz,提供了充足的运算能力来应对各种复杂的应用场景。片内存储器包括高达1MB的闪存(Flash)用于程序存储,以及高达192KB的SRAM用于数据存储和运行时变量。这些存储器提供了充足的空间来承载复杂的操作系统、图形界面和大数据处理任务。
除了强大的处理核心和存储器,STM32F405还集成了众多高性能外设,包括多个高速模数转换器(ADC)、数模转换器(DAC)、定时器、通用同步/异步收发器(USART)、串行外设接口(SPI)、I2C总线接口、USB OTG全速/高速控制器、以太网MAC、CAN总线等。这些外设为各类应用提供了丰富的数据采集、通信和控制能力。例如,其多达3个12位ADC,支持多通道采样和交错模式,可实现高速精确的模拟信号采集;多达2个12位DAC可用于生成模拟信号;多达17个定时器提供了灵活的PWM生成、输入捕获和计数功能。广泛的通信接口使其能够轻松地与其他设备或网络进行数据交换。
1.3 引脚和封装
STM32F405系列提供了多种封装类型,以适应不同的应用需求,常见的有LQFP64、LQFP100、LQFP144等。不同封装的引脚数量和可用GPIO资源有所差异。用户在选择封装时需要根据实际项目的引脚需求、PCB板尺寸以及成本等因素进行综合考量。每个引脚的功能都是可编程的,可以通过配置相应的寄存器来选择作为通用输入/输出(GPIO)、模拟输入、外部中断源、或特定外设的功能引脚。理解引脚复用功能是STM32开发中的重要环节,它允许在有限的引脚资源上实现多种功能。
第二章 存储器和总线
2.1 存储器映射
STM32F405的存储器采用统一的线性地址空间,所有片内和片外存储器以及外设寄存器都被映射到这个地址空间中,用户可以通过指针访问任何地址。这种统一的存储器映射极大地简化了编程模型。地址空间被划分为多个区域,每个区域对应不同的功能:例如,闪存区域用于存储程序代码和常量数据,SRAM区域用于存储运行时数据和堆栈,外设寄存器区域用于配置和控制各种片内外设。这种清晰的划分有助于开发者管理存储器资源和优化代码。了解存储器映射图对于进行底层编程、优化内存使用以及调试都至关重要。
2.2 闪存(Flash Memory)
闪存是STM32F405用于存储程序代码、常量数据以及用户配置数据的主要非易失性存储器。其容量根据具体型号有所不同,最高可达1MB。闪存被划分为多个扇区,每个扇区可以独立擦除和编程。闪存具有掉电保持数据的特性,确保程序在芯片断电后不会丢失。STM32F405的闪存控制器提供了读保护、写保护和扇区保护等功能,可以有效保护程序的知识产权和数据的安全性。此外,它还支持IAP(在应用编程)和ISP(在系统编程)功能,允许用户通过软件或外部编程器对闪存进行更新。
2.3 SRAM(Static Random Access Memory)
SRAM是高速的易失性存储器,用于存储程序运行时的数据、变量、堆栈以及DMA缓冲区。STM32F405的SRAM容量最高可达192KB,分为多个区域,包括主SRAM和CCM(Core Coupled Memory)SRAM。CCM SRAM与Cortex-M4内核紧密耦合,具有更低的访问延迟,适合存放对实时性要求高的代码段或关键数据,以提高程序执行效率。由于SRAM是易失性的,当芯片断电时,其中存储的数据将会丢失。因此,对于需要掉电保持的数据,通常会将其存储在闪存或外部EEPROM中。
2.4 总线结构
STM32F405内部采用了多层AHB(Advanced High-performance Bus)和APB(Advanced Peripheral Bus)总线矩阵结构,实现了CPU、DMA控制器、闪存、SRAM以及各种外设之间的高效并行数据传输。这种多层总线架构允许多个主设备(如CPU和DMA)同时访问不同的从设备(如闪存和SRAM),从而避免了总线冲突,提高了系统整体性能。AHB总线负责高速外设和存储器的数据传输,而APB总线则连接速度相对较慢的外设。这种分层设计优化了总线带宽的利用率,确保了系统各部分的协调工作。
第三章 时钟系统
3.1 时钟源
STM32F405提供了多种灵活的时钟源,以满足不同应用对精度、稳定性和功耗的需求。主要时钟源包括:
高速外部晶体(HSE): 通常连接一个外部晶体振荡器,提供高精度和高稳定性的时钟源,是系统主时钟的理想选择。HSE可以作为PLL(锁相环)的输入,生成更高的系统时钟频率。
高速内部RC振荡器(HSI): 片内RC振荡器,无需外部元件,启动时间快,但精度相对较低。适用于对时钟精度要求不高的应用,或作为HSE失效时的备用时钟。
低速外部晶体(LSE): 通常连接一个32.768kHz的外部晶体,主要用于实时时钟(RTC)和低功耗模式下的唤醒功能,提供精确的计时。
低速内部RC振荡器(LSI): 片内RC振荡器,频率较低且精度不高,主要用于独立看门狗(IWDG)和自动唤醒单元(AWU),提供极低功耗操作。
PLL(锁相环): PLL能够将低频时钟源倍频到更高的频率,是生成系统主时钟(SYSCLK)和USB、SDIO等高速外设时钟的关键。它可以通过配置分频和倍频系数,灵活地生成所需频率。
3.2 时钟树
STM32F405的时钟树是一个复杂的网络,它将不同的时钟源经过分频、倍频和多路选择后,分配给CPU内核、总线以及各个外设。理解时钟树的结构和配置对于正确地使能和配置外设至关重要。
SYSCLK(系统时钟): 可以选择HSE、HSI或PLL作为系统主时钟源。CPU内核、AHB总线和许多外设都工作在SYSCLK或其分频后的频率上。
AHB总线时钟(HCLK): 由SYSCLK经过AHB预分频器生成,提供给CPU内核、DMA、闪存和SRAM。
APB1总线时钟(PCLK1): 由HCLK经过APB1预分频器生成,用于连接低速外设,如TIM2-7、UART2-5、SPI2-3、I2C1-3、PWR、DAC等。
APB2总线时钟(PCLK2): 由HCLK经过APB2预分频器生成,用于连接高速外设,如TIM1、TIM8、USART1、USART6、ADC1-3、SDIO、SPI1等。
正确配置时钟分频系数对于确保外设正常工作和达到所需性能至关重要。过高的时钟频率可能导致功耗增加和不稳定,而过低的时钟频率则会影响系统性能。
3.3 时钟配置
时钟配置涉及到操作RCC(Reset and Clock Control)寄存器。开发者需要根据应用需求,选择合适的时钟源,配置PLL的输入源、倍频系数和分频系数,然后将生成的SYSCLK分频到AHB、APB1和APB2总线。通常的配置步骤包括:
使能选定的时钟源(HSE/HSI)。
等待时钟源稳定。
配置PLL的各项参数,包括PLL输入时钟源、倍频因子、分频因子等。
选择PLL作为系统时钟源。
配置AHB、APB1、APB2总线预分频器。
更新系统时钟变量SystemCoreClock,以便库函数和用户代码能够正确获取当前的系统时钟频率。
STM32CubeMX等工具可以帮助开发者图形化配置时钟,并生成相应的初始化代码,大大简化了时钟配置的复杂性。
第四章 中断管理
4.1 中断向量表
中断向量表是存储中断服务程序(ISR)入口地址的表格。当发生中断时,处理器会根据中断源的编号查找中断向量表中对应的地址,然后跳转到该地址执行中断服务程序。STM32F405的中断向量表位于闪存的起始地址(或根据启动模式配置的偏移地址),包含复位向量、NMI(不可屏蔽中断)向量、硬故障向量以及所有外设中断的向量。理解中断向量表的结构和作用是编写中断驱动程序的关键。
4.2 NVIC(嵌套向量中断控制器)
NVIC是Cortex-M内核的一个重要组成部分,负责管理系统中的所有中断请求。它提供了以下关键功能:
中断使能/禁用: 可以独立使能或禁用每个中断源,以控制其是否能够触发中断。
中断优先级管理: 每个中断源都可以配置一个优先级,当多个中断同时发生时,优先级高的中断将优先得到响应。NVIC支持中断的抢占和嵌套,即一个高优先级中断可以打断一个正在执行的低优先级中断。
中断挂起/清除: 可以手动设置或清除中断挂起状态,用于软件触发中断或清除已处理的中断标志。
向量表重映射: 允许将中断向量表重映射到SRAM,这在需要运行时动态更新中断向量表时非常有用。
4.3 外部中断/事件控制器(EXTI)
EXTI是STM32F405特有的一个外设,它允许将GPIO引脚配置为外部中断或事件的触发源。EXTI模块有23条中断/事件线,其中大部分与GPIO引脚复用。
中断模式: 当外部信号满足触发条件(上升沿、下降沿或双边沿)时,EXTI会产生一个中断请求,并由NVIC处理。
事件模式: 当外部信号满足触发条件时,EXTI会产生一个事件脉冲,可以用于触发其他外设(如定时器、ADC、DMA等),而无需CPU介入,从而降低CPU的负载。
配置EXTI涉及到以下步骤:
使能相应的GPIO时钟和EXTI时钟。
配置GPIO引脚为输入模式。
通过SYSCFG(系统配置控制器)将GPIO引脚映射到EXTI线。
配置EXTI线的触发方式(上升沿、下降沿或双边沿)。
使能EXTI线的中断/事件请求。
配置NVIC中对应EXTI中断的优先级并使能。
EXTI广泛应用于按键检测、传感器信号采集、外部设备唤醒等场景。
第五章 通用输入/输出(GPIO)
5.1 GPIO概述
GPIO(General Purpose Input/Output)是STM32F405最基本也是最重要的外设之一,它允许微控制器通过引脚与外部世界进行交互。STM32F405的GPIO引脚具有高度的灵活性和可配置性,每个GPIO引脚都可以独立地配置为多种模式,以适应不同的应用需求。GPIO模块通常通过寄存器进行操作,每个引脚都有一组专用的控制寄存器位。
5.2 GPIO工作模式
STM32F405的每个GPIO引脚都可以配置为以下八种基本工作模式:
输入模式(Input Mode):
浮空输入(Floating Input): 引脚不对信号进行上拉或下拉,适用于连接外部带有上拉/下拉电阻的设备,或用于模拟信号输入。
上拉输入(Pull-up Input): 引脚内部连接一个上拉电阻到VDD,当外部输入为低电平时,引脚为低;当外部输入断开或高阻态时,引脚被上拉到高电平。常用于按键检测等。
下拉输入(Pull-down Input): 引脚内部连接一个下拉电阻到VSS,当外部输入为高电平时,引脚为高;当外部输入断开或高阻态时,引脚被下拉到低电平。
模拟输入(Analog Input): 用于连接模拟信号,将引脚配置为模拟输入模式后,ADC(模数转换器)可以对该引脚上的电压进行采样。
输出模式(Output Mode):
开漏输出(Open-drain Output): 引脚的输出级只包含一个N沟道MOSFET晶体管连接到VSS,当输出高电平时,MOSFET关断,引脚呈高阻态;当输出低电平时,MOSFET导通,引脚连接到VSS。开漏输出通常需要外部上拉电阻,可用于I2C总线、电平转换或连接多个设备的共享总线。
推挽输出(Push-pull Output): 引脚的输出级包含一个N沟道MOSFET和一个P沟道MOSFET,当输出高电平时,P沟道MOSFET导通,N沟道MOSFET关断;当输出低电平时,N沟道MOSFET导通,P沟道MOSFET关断。推挽输出能够提供更大的驱动电流,适用于驱动LED、继电器或数字信号传输。
复用功能模式(Alternate Function Mode):
在这种模式下,GPIO引脚不再作为通用输入或输出,而是将其功能分配给片内其他外设,例如USART、SPI、I2C、定时器、ADC等。通过配置相应的AFR(Alternate Function Register)寄存器,可以选择引脚对应的复用功能。
JTAG/SWD调试模式:
某些特定的GPIO引脚被指定用于JTAG或SWD调试接口。在调试模式下,这些引脚的功能被专用调试电路占用。
除了模式配置,GPIO引脚还可以配置输出速度(低速、中速、高速、超高速)和锁存功能。输出速度决定了引脚电平翻转的速度,对于高速信号传输和降低电磁干扰(EMI)具有重要意义。锁存功能则可以防止引脚状态在调试模式下被意外修改。
5.3 GPIO寄存器
GPIO的配置和控制是通过操作一系列专用寄存器来实现的。每个GPIO端口(GPIOA, GPIOB, ..., GPIOI)都有一组独立的寄存器。以下是一些主要寄存器:
MODER(Port mode register): 配置引脚的工作模式(输入、通用输出、复用功能、模拟)。
OTYPER(Port output type register): 配置输出模式下的输出类型(推挽或开漏)。
OSPEEDR(Port output speed register): 配置输出模式下的输出速度。
PUPDR(Port pull-up/pull-down register): 配置输入模式下的上拉/下拉电阻。
IDR(Port input data register): 读取GPIO引脚的当前输入状态。
ODR(Port output data register): 设置GPIO引脚的输出状态。
BSRR(Port bit set/reset register): 原子地设置或清除单个或多个GPIO引脚的输出状态,避免读-改-写操作带来的竞态问题。
LCKR(Port configuration lock register): 锁存GPIO配置,防止意外修改。
AFR(Alternate function low/high register): 配置引脚的复用功能。
通过直接操作这些寄存器,或者使用HAL库/LL库提供的API函数,开发者可以实现对GPIO的精确控制。
第六章 定时器(TIM)
6.1 定时器概述
STM32F405系列微控制器集成了多种功能强大的定时器,包括基本定时器、通用定时器和高级控制定时器。这些定时器是实现延时、周期性任务、PWM生成、输入捕获、编码器接口等功能的关键。
基本定时器(TIM6/TIM7): 主要用于提供基本的定时功能,没有外部I/O引脚,不能用于PWM生成或输入捕获。它们常用于触发DAC转换或作为通用延时。
通用定时器(TIM2/TIM3/TIM4/TIM5/TIM9/TIM10/TIM11/TIM12/TIM13/TIM14): 功能最丰富的定时器,除了基本的定时功能外,还支持PWM输出、输入捕获、输出比较、单脉冲模式、编码器接口等。它们通常连接到GPIO引脚,可以生成或捕获外部信号。
高级控制定时器(TIM1/TIM8): 在通用定时器功能的基础上,增加了死区生成、互补输出、刹车输入等高级特性,特别适合于复杂的电机控制应用。
6.2 通用定时器核心功能
以通用定时器为例,其核心功能包括:
6.2.1 定时模式(Time-base unit)
定时器通过一个内部计数器(CNT)来计数。计数器可以向上计数、向下计数或中心对齐计数。计数器的工作频率由时钟源和预分频器(PSC)决定。当计数器达到自动重载寄存器(ARR)的值时,会产生一个更新事件(Update Event),并可以选择性地触发中断或DMA请求。
计数器(CNT): 存储当前的计数值。
预分频器(PSC): 对定时器时钟源进行分频,从而控制计数器的计数速度。
自动重载寄存器(ARR): 设定计数器的最大值(或周期),当计数器达到ARR值时,会产生更新事件并可选地复位计数器。
通过配置PSC和ARR,可以精确地控制定时器的周期,从而实现延时或周期性任务。
6.2.2 PWM生成(Pulse Width Modulation)
PWM是一种通过调整方波的占空比来模拟模拟信号的技术。通用定时器通过配置输出比较模式(Output Compare Mode)来实现PWM输出。
比较寄存器(CCR): 每个通道都有一个比较寄存器,用于设置PWM的占空比。当计数器值与CCR值匹配时,输出波形的状态会发生改变。
PWM模式: 定时器支持多种PWM模式,包括PWM模式1和PWM模式2,它们定义了在计数器达到CCR值时,输出电平的变化方式。
输出使能: 需要使能相应的通道输出以及主输出,才能将PWM波形输出到GPIO引脚。
通过调整CCR的值,可以在运行时动态地改变PWM的占空比,广泛应用于电机调速、LED亮度控制、DAC功能模拟等。
6.2.3 输入捕获(Input Capture)
输入捕获功能用于测量外部信号的脉冲宽度、周期或频率。当定时器通道的输入引脚检测到设定的触发边沿(上升沿、下降沿或双边沿)时,当前的计数器值会被捕获到相应的捕获/比较寄存器(CCR)中,并可选地触发中断。
捕获通道: 每个输入捕获通道都对应一个CCR寄存器。
输入极性: 可配置捕获触发的边沿类型。
输入预分频器: 可对输入信号进行分频,以捕获更长的脉冲。
通过捕获不同边沿的时间戳,可以计算出外部信号的周期、脉冲宽度等信息,广泛应用于测频、测速、超声波测距等。
6.2.4 输出比较(Output Compare)
输出比较功能用于在计数器值与比较寄存器(CCR)值匹配时,改变GPIO引脚的输出状态。这可以用于生成单次脉冲、切换引脚状态或触发其他外设。与PWM不同的是,输出比较通常用于生成非周期性的事件。
6.2.5 编码器接口模式
通用定时器还可以配置为编码器接口模式,用于解码正交编码器的A/B相信号,从而测量旋转角度和速度。定时器计数器会根据A/B相信号的相位差进行增减计数。
6.3 定时器配置
配置定时器通常涉及以下步骤:
使能定时器时钟: 通过RCC寄存器使能相应定时器的时钟。
配置时基单元: 设置预分频器(PSC)和自动重载寄存器(ARR)来确定定时器周期。
配置功能模式: 根据需求选择PWM模式、输入捕获模式、输出比较模式等。
配置通道: 对于PWM、输入捕获或输出比较功能,需要配置相应的通道,包括模式、极性、CCR值等。
配置GPIO引脚: 将定时器功能映射到相应的GPIO引脚,并配置GPIO为复用功能模式。
使能定时器: 启动计数器。
配置中断(可选): 如果需要中断,配置NVIC并使能定时器更新中断或捕获/比较中断。
第七章 模数转换器(ADC)
7.1 ADC概述
STM32F405集成了多达3个12位精度的模数转换器(ADC1、ADC2、ADC3),可以将模拟电压信号转换为数字量,以便微控制器进行处理。ADC具有多通道、多种转换模式和灵活的触发源,广泛应用于传感器数据采集、电压电流测量等场景。每个ADC都可以独立工作,也可以通过“三路交错模式”或“双模”模式实现并行或交替转换,提高采样速率。
7.2 ADC主要特性
12位精度: 能够将模拟信号转换为4096个离散的数字值(212)。
多达24个外部通道: 可以连接多个外部模拟信号源。
内部通道: 包括片内温度传感器、内部参考电压(VREFINT)和VBAT/2(电池电压的一半)通道。
转换模式:
单次转换模式(Single Conversion Mode): 完成一次转换后停止。
连续转换模式(Continuous Conversion Mode): 连续不断地进行转换。
扫描模式(Scan Mode): 自动依次转换多个选定的通道。
间断模式(Discontinuous Mode): 允许在扫描序列中跳过部分通道。
规则组和注入组:
规则组(Regular Group): 用于常规的ADC转换,通常由软件触发或定时器等外部事件触发。
注入组(Injected Group): 具有更高的优先级,可以“注入”到规则组的转换序列中,通常用于紧急或需要快速响应的测量。
DMA支持: ADC可以直接通过DMA将转换结果传输到存储器,减轻CPU的负担。
触发源: 转换可以由软件触发,也可以由外部事件(如定时器、EXTI线等)触发。
数据对齐: 转换结果可以是左对齐或右对齐。
校准功能: 内置校准电路,以提高转换精度。
7.3 ADC工作原理
ADC的工作原理主要基于逐次逼近型(SAR)架构。转换过程大致如下:
采样保持: 在转换开始时,ADC内部的采样保持电路会在极短的时间内捕获输入模拟电压,并将其保持住。
量化: 采样保持的电压与内部参考电压进行比较和量化,最终生成一个数字值。
转换时间: 整个转换过程需要一定的时间,这个时间与ADC时钟频率和采样周期(Sample Time)有关。增加采样周期可以提高转换精度,但会降低转换速率。
7.4 ADC配置
配置ADC通常涉及以下步骤:
使能ADC时钟和GPIO时钟: 通过RCC寄存器使能相应ADC模块和模拟输入引脚所在端口的时钟。
配置GPIO引脚为模拟模式: 将需要进行ADC转换的GPIO引脚配置为模拟输入模式。
复位ADC: 软件复位ADC模块,确保其处于初始状态。
配置ADC参数:
工作模式: 选择单次、连续、扫描或间断模式。
数据对齐: 选择左对齐或右对齐。
分辨率: STM32F405为12位。
外部触发源(如果使用): 选择触发转换的外部事件(如定时器输出、EXTI线)。
配置规则组/注入组通道:
通道顺序: 如果使用扫描模式,需要定义通道的转换顺序。
采样周期: 为每个通道设置合适的采样周期。
使能ADC: 启动ADC模块。
进行校准: 在首次使用ADC或环境变化时,进行ADC校准可以提高转换精度。
启动转换: 可以通过软件触发或等待外部事件触发转换。
读取转换结果:
查询模式: 轮询ADC状态寄存器中的EOC(End Of Conversion)标志位,当EOC置位时读取结果。
中断模式: 配置并使能ADC中断,在中断服务程序中读取结果。
DMA模式: 配置DMA控制器,将ADC转换结果自动传输到存储器。
正确配置ADC对于获取准确的模拟数据至关重要,需要注意参考电压、模拟地线、噪声抑制等问题。
第八章 串行通信接口(USART)
8.1 USART概述
STM32F405系列微控制器集成了多个通用同步/异步收发器(USART),支持全双工、同步/异步串行通信。USART是与外部设备进行数据交换最常用的接口之一,广泛应用于与PC、传感器、其他微控制器等进行数据通信。USART支持多种工作模式,包括异步模式(UART)、同步模式(SPI主/从)、LIN、IrDA和智能卡模式。
8.2 USART主要特性
全双工通信: 可以同时发送和接收数据。
灵活的波特率生成: 支持从几百bps到数Mbps的波特率。
可编程数据字长: 支持7位、8位或9位数据字长。
可编程停止位: 支持0.5、1、1.5或2个停止位。
奇偶校验控制: 支持偶校验或奇校验。
发送/接收缓冲区: 内置发送数据寄存器(TDR)和接收数据寄存器(RDR),实现数据的暂存。
中断管理: 提供多种中断源,如发送完成中断、接收完成中断、空闲帧中断、错误中断等。
DMA支持: 可以通过DMA实现数据的自动收发,减轻CPU负担。
多处理器通信模式: 支持多机通信,可识别地址。
同步模式(SPI主/从): 可用于简单的同步通信。
LIN模式: 支持局部互联网络(LIN)协议。
IrDA模式: 支持红外数据传输。
智能卡模式: 用于与智能卡通信。
8.3 异步模式(UART)工作原理
在异步模式下,USART通过两个信号线进行通信:
TX(发送): 数据输出线。
RX(接收): 数据输入线。
通信双方需要预先约定好波特率、数据字长、停止位和奇偶校验方式。数据以帧的形式传输,每帧数据通常包含一个起始位、数据位、可选的奇偶校验位和一个或多个停止位。
发送过程: 当CPU将数据写入TDR时,USART会自动将数据按位发送出去,并在发送完成后触发发送完成中断。
接收过程: 当USART接收到数据时,会将数据存储到RDR中,并可选地触发接收完成中断。接收过程中也会监测各种错误,如帧错误、过载错误、噪声错误等。
8.4 USART配置
配置USART通常涉及以下步骤:
使能USART时钟和GPIO时钟: 通过RCC寄存器使能相应USART模块和TX/RX引脚所在端口的时钟。
配置GPIO引脚为复用功能模式: 将TX和RX引脚配置为USART的复用功能模式,并选择正确的AF功能。
复位USART: 软件复位USART模块。
配置USART参数:
波特率: 根据通信需求计算并设置波特率。
字长: 设置数据位长度(7、8或9位)。
停止位: 设置停止位数量。
奇偶校验: 选择无校验、偶校验或奇校验。
收发使能: 使能发送器和接收器。
配置中断(可选): 如果需要中断驱动的收发,使能相应的USART中断(如接收非空中断、发送完成中断)并配置NVIC。
配置DMA(可选): 如果需要DMA传输,配置DMA控制器进行发送和接收。
使能USART: 启动USART模块。
数据收发:
发送: 将数据写入USART_DR寄存器(或使用HAL库的发送函数)。
接收: 从USART_DR寄存器读取数据(或使用HAL库的接收函数)。
在进行USART通信时,应注意波特率匹配、信号电平兼容性、以及对数据错误的检查和处理。
第九章 调试与ISP
9.1 调试接口
STM32F405提供了两种主要的硬件调试接口:
JTAG(Joint Test Action Group): 是一种更通用、功能更强大的调试接口,需要多达5个引脚(TMS、TCK、TDI、TDO、TRST)。JTAG不仅可以用于程序调试,还可以用于边界扫描测试和闪存编程。
SWD(Serial Wire Debug): 是一种简化的两线调试接口,只需要2个引脚(SWDIO、SWCLK),且功能与JTAG相似,但占用引脚少,更适合引脚资源有限的封装。
大多数现代STM32开发板都使用SWD接口。通过连接ST-Link、J-Link等调试器,开发者可以使用Keil MDK、STM32CubeIDE等集成开发环境进行在线调试,包括:
单步执行: 逐行执行代码。
断点设置: 在特定代码行设置断点,当程序执行到断点时暂停。
变量查看/修改: 实时查看和修改程序中的变量值。
寄存器查看: 查看CPU和外设寄存器的当前状态。
内存查看: 查看任意内存地址的内容。
实时追踪: 某些高级调试器支持指令和数据流的实时追踪。
9.2 启动模式
STM32F405支持多种启动模式,通过BOOT0和BOOT1引脚(或内部Flash选项字节)的配置来选择:
主闪存启动模式(Main Flash memory): 这是最常用的启动模式。芯片复位后,从主闪存的0x08000000地址开始执行程序。用户的应用程序通常烧录到这个区域。
系统存储器启动模式(System memory): 芯片复位后,从内置的系统存储器(System Memory)开始执行程序。系统存储器中固化了ST公司提供的Bootloader程序,可以通过UART、USB等接口对主闪存进行编程(ISP,In-System Programming)。这对于在产品生产线或现场进行固件更新非常有用。
SRAM启动模式(SRAM): 芯片复位后,从片内SRAM的起始地址开始执行程序。这主要用于调试目的,可以将程序直接加载到SRAM中运行,以提高下载速度或避免擦写闪存的限制。
选择正确的启动模式对于开发和部署应用程序至关重要。
9.3 ISP(In-System Programming)
ISP允许用户在产品系统中对微控制器的闪存进行编程,而无需移除芯片。STM32的ISP功能通常通过系统存储器中固化的Bootloader来实现。
工作流程:
将BOOT0引脚拉高,BOOT1引脚拉低(对于某些型号可能不同),使芯片进入系统存储器启动模式。
通过UART、USB或其他支持的通信接口,PC端的编程工具(如STM32CubeProgrammer)与Bootloader建立通信。
PC端发送固件数据给Bootloader,Bootloader将数据写入到主闪存中。
编程完成后,将BOOT0引脚拉低,复位芯片,程序将从更新后的主闪存启动。
ISP极大地简化了固件更新过程,特别适用于量产产品和远程维护。
9.4 IAP(In-Application Programming)
IAP是指在微控制器运行应用程序的同时,通过应用程序自身来更新闪存中的另一部分程序(通常是应用程序或数据)。
工作原理: IAP通常需要将闪存划分为两个或更多区域:一个区域存放Bootloader(或IAP程序本身),另一个区域存放用户应用程序。Bootloader负责接收新的应用程序数据,并将其写入到应用程序区域。
应用场景: 允许产品在现场通过网络(如以太网、Wi-Fi)、USB、或者其他通信接口接收新的固件包,然后由IAP程序实现自更新。这对于实现远程升级和产品功能扩展非常关键。
IAP的实现需要仔细管理闪存擦写操作,确保在更新过程中数据的完整性和系统的稳定性。通常会采用双备份或校验和等机制来提高可靠性。
结语
本手册详细介绍了STM32F405系列微控制器的核心特性和主要外设,涵盖了Cortex-M4内核、存储器、时钟系统、中断、GPIO、定时器、ADC和USART等关键模块。通过对这些内容的深入解析,希望读者能够对STM32F405有一个全面而深刻的理解。掌握这些基础知识是高效开发复杂嵌入式系统的基石。
STM32F405作为一款功能强大且资源丰富的微控制器,其应用潜力是巨大的。除了本手册中涉及的外设,STM32F405还集成了以太网MAC、CAN、USB OTG、SDIO等更高级的外设,它们能够支持更复杂的通信协议和数据存储需求。深入学习这些外设,结合RTOS(实时操作系统)和中间件,将能够开发出功能更加完善、性能更加优异的产品。
在实际开发中,除了理解硬件特性,高效的开发工具链(如STM32CubeIDE、Keil MDK)、成熟的开发库(HAL库、LL库)以及社区资源也是不可或缺的。善用这些资源,将大大提高开发效率并降低开发难度。
希望本手册能够成为您在STM32F405开发旅程中的一份宝贵参考。在探索嵌入式世界的道路上,不断学习和实践,您将能够创造出无限可能。
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。