赞
踩
目录
本文作为专栏《STM32单片机自学教程》专栏其中的一部分,返回专栏总纲,阅读所有文章,点击Link:
单独一个微处理器自己是无法工作的,还必须有供电,时钟,晶振等电路才能正常工作,即最小系统电路。那么STM32的最小系统电路有哪些部分组成呢,如下图4.1-1所示。
图4.1-1.STM32最小系统电路组成
STM32单片机的最小系统主要由以下几个部分组成:
[1].电源电路:这是为STM32芯片提供工作电压的电路部分。通常,STM32的工作电压为3.3V,因此电源电路可能需要使用LDO(低压差线性稳压器)将5V电压转换为3.3V,以满足STM32的工作需求。同时,为了稳定输入电压,电路中还会加入去耦电容进行滤波。一个设计电路图如下图4.1-2.
图4.1.2 STM32供电电路设计
[2].复位电路:复位电路在STM32单片机中起着至关重要的作用。它能在复位时,使单片机的程序计数器回到初始地址(如0000H),从而使程序从起始处重新执行。此外,复位操作还会将寄存器和存储单元的值重置为初始设定值,使单片机能够重新开始执行。STM32中有三种复位方式,分别是上电复位、手动复位和程序自动复位。复位电路如图4.1-3.
[3].时钟电路:时钟电路为STM32单片机提供时钟信号,这是单片机正常工作的基础。时钟电路通常由晶振和相关的电路组成,为单片机提供稳定的时钟频率。STM32主晶振为8MHZ,经过倍频后为72MHZ。
[4].调试接口电路:这是用于下载程序和调试单片机的接口电路,常见的调试接口有JTAG和SWD。
[5].启动配置电路:启动配置通常是通过STM32的BOOT引脚来实现的,这些引脚(如BOOT0和BOOT1)能够支持从内部FLASH启动、系统存储器启动以及内部SRAM启动等多种启动方式。这些启动配置决定了单片机在上电或复位后从哪个存储器区域开始执行程序。
因此,在设计和搭建STM32单片机的最小系统时,启动配置是不可或缺的一部分。它确保了单片机在启动时能够按照预期的方式加载和执行程序,从而实现所需的功能和控制逻辑。
图4.1-3 STM32时钟,复位,调试电路
调试接口不是系统运行的必需的接口电路,但是为了系统开发、调试、升级等方便,我们在设计最小系统时,可以加上这一部分电路。STM32 系列微处理器内置了一个JTAG和一个SWD接口,通过这两个接口可以控制芯片的运行,并可以获取内部寄存器的信息。这两个接口都要使用GPIO(普通I/O口)来供调试仿真器使用。选用其中一个接口即可将在PC上编译好的程序下载到单片机中运行调试。
JTAG 是一种国际标准测试协议,主要用于芯片内部测试。标准的JTAG调试接口有4根线,分别为模式选择(TMS)、时钟(TCK)、数据输入(TDI)和数据输出(TDO)线。JTAG 调试接口电路如图4.2-1所示。
图4.2-1 JTAG调试接口电路
图4.2-2所示为SWD接口。在高速模式和数据量大的情况下,通过JTAG下载程序会失败,但是通过SWD下载出现失败的概率会小很多,更加可靠。SWD模式支持更少的引脚接线,所以需要的PCB空间更小,在芯片体积有限的时候推荐使用SWD模式。SWD模式的连接需要2根线,其中SWDIO为双向数据口,用于主机到目标的数据传送;SWDCLK为时钟口,用于主机驱动。
图4.2-2 SWD接口
STM32系列处理器支持两种调试方式,但是采用JTAG占用了大量的PCB的面积,而采用SWD模式则占用得少得多。而且在调试速度等方面,SWD并不比JTAG模式差,所以建议在实际应用中尽量采用SWD进行设计。SWD不是采用标准端口,可以根据自己的需要排列引脚。
该处很多知识引用自正点原子的开发板资料,这块知识正点原子的资料讲的很透彻。
STM32单片机的程序计数器寄存器的默认值决定了处理器从哪个具体地址去获得第1条需要执行的指令。但是对于处理器来说,无论它挂接的是闪存、内存,还是硬盘,它在启动时是“一无所知”的,我们需要通过硬件设计来告诉它存储第一条指令的外设。STM32系列处理器的第一条执行指令地址是通过硬件设计来实现的。
表4.3-1 启动模式选择
如图表4.3-1,在STM32F10x里,可以通过配置BOOT[1:0]引脚选择3种不同的启动模式。系统复位后,在系统时钟的第4个上升沿到来时,BOOT引脚的值将被锁存,然后被CPU读取。这意味着一旦BOOT引脚的值被确定并锁存,后续改变这些引脚的状态将不会影响已经选择的启动模式。用户可以通过设置BOOT1和BOOTO引脚的状态,来选择在复位后的启动模式。
复位方式有三种:上电复位,硬件复位和软件复位。当产生复位并且离开复位状态后,Cortex-M3 内核做的第一件事就是读取下列两个 32 位整数的值:
(1)从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值,该值就是栈顶地址。
(2)从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值指向复位后执行的
第一条指令。下面用示意图表示,如图4.3-1 所示。
注: 概念解释:MSP
在嵌入式系统或低级编程中,MSP 通常指的是“Main Stack Pointer”,即主堆栈指针。堆栈是一个后进先出(LIFO)的数据结构,用于存储局部变量、返回地址和其他临时数据。MSP 指向堆栈的顶部,是堆栈操作(如入栈和出栈)的关键。
在许多微控制器和处理器中,可能会有多个堆栈,例如主堆栈和进程堆栈,用于不同的任务或线程。MSP 通常与主任务或主线程相关。
与 MSP 相对的是 PSP(Process Stack Pointer),它是进程堆栈指针,用于特定的线程或任务。了解 MSP 和其他相关概念对于理解和编写低级代码,如中断处理程序或操作系统内核代码,是非常重要的。这些概念也与实时操作系统(RTOS)和并发编程密切相关。
简而言之,MSP 是指向主堆栈顶部的指针,用于追踪和管理主线程或任务的堆栈操作
概念解释:程序计数器-PC
PC代表程序计数器(Program Counter)。它是一个16位专用寄存器,用于存放下一条将要执行的指令地址。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令取出送到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址会自动加1,以便指向下一条将要执行的指令。这样,CPU就可以依次执行每一条指令,保证程序的顺序执行。因此,程序计数器PC是保证程序顺序执行的重要特殊功能寄存器。
图.4.3-1 复位序列
上述过程中,内核是从 0x0000 0000 和 0x0000 0004 两个的地址获取堆栈指针 SP 和程序计
数器指针 PC。事实上,0x0000 0000 和 0x0000 0004 两个的地址可以被重映射到其他的地址空
间。例如:我们将 0x0800 0000 映射到 0x0000 0000,即从内部 FLASH 启动,那么内核会从地
址 0x0800 0000 处取出堆栈指针 MSP 的初始值,从地址 0x0800 0004 处取出程序计数器指针
PC 的初始值。CPU 会从 PC 寄存器指向的地址空间取出的第 1 条指令开始执行程序,就是开始
执行复位中断服务程序 Reset_Handler。将 0x0000 0000 和 0x0000 0004 两个地址重映射到其他的地址空间,就是启动模式选择。
对于 STM32F1 的启动模式,表3-1转为对应地址模式,如图4.3-2.
图4.3-2 STM32启动模式表对应地址
由图4.3-2 可以看到,STM32F1 根据 BOOT 引脚的电平选择启动模式,这两个 BOOT 引脚
根据外部施加的电平来决定芯片的启动地址。
从主闪存FALSH启动:
从系统存储器启动:
从内置SRAM启动:
【1】哔站江协科技STM32入门教程
【2】《STM32单片机原理与项目实战》刘龙、高照玲、田华著
【3】《ARM Cortex-M3嵌入式原理及应用》黄可亚著
【4】《STM32嵌入式微控制器快速上手》陈志旺著
【5】《STM32单片机应用与全案例实践》沈红卫等著
【6】《野火STM32开发指南》
【7】《正点原子STM32开发指南》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。