stm32单片机的原理-stm32单片机原理
STM32 单片机就是颗小小的、自当作挺“智慧”的方铁疙瘩,它实际上就是一个超级棒的逻辑电路盒子。别被名字骗了,它本质上就是个微管住器,也就是微型计算机。
只有拥有 CPU 的芯片,才算得上是单片机,没 CPU 的,比如只负责管住电压的电源管理芯片,那只能算外设。 拿人肉来打比方,CPU 就是大脑,负责算数、推理;存器就是仓库,存着程序和数据;外设就像是胳膊、舌头,负责干活。STM32 之故此了得,是出于它把这块“大脑”做得充足精细,并且还能外部连接大量“手脚”。 它的核心心脏叫 CPU,具体型号看板子,大量通用的 STM32 是 Cortex-M 系列,比如 M3、M4。M3 是多核的,像个人多手,能与此同时处理几个任务;M4 则是单核的,专注力更强,适合做高性能任务。甭管哪种,它们都靠一组寄存器来干活。
这组寄存器叫 CPU 寄存器。 这些寄存器分好几种。地址寄存器负责找东西,比如你要找程序里的某个字节,内存地址寄存器告诉你这一格内存的位置。操作寄存器负责动作,比如取数、存入、比较、跳转。管住寄存器最管得宽,它管着电源、时钟、中断、看门狗这些硬件开关。 时钟是它进食的家伙,没有时钟,芯片就是瞎子。STM32 内部有 PLL(锁相环)能随意放大时钟频率,常见的有 72MHz、84MHz、168MHz,就连更高。M0 系列起步就是 72MHz,M4 起步 168MHz。外部晶振(Crystal)选好后,PLL 会自动调整内部时钟,最终让 CPU 跑在一个稳定的频率上。
这个频率对于 STM32 来说,根本上代表了它的工作速度上限。
要是它跑忒慢,就是“猪”。 程序跑在内存里,那些“零基础”的汇编代码,实际上就是数据。STM32 的内存分区域。程序代码区和数据区是分开的,这挺关键。程序区只放指令数据,数据区放变量。STM32 默认是只读只写,不能随意改代码。要修改程序,得去 Flash 编程器里烧录,要么用 Dip 线在片上改,但这风险有点大,万一烧坏了就万劫不复了。 断电后,程序跑在哪个内存地址叫堆栈(Stack)。堆栈是现场保存的地方。STM32 做栈是向下增长的,推的时候地址变小,抽的时候地址变大。
要是栈用多了,栈溢出,程序就回不去了,这玩意儿贼悬,一不小心就会死机。 复位(Reset)机制也是关键。上电复位是上电那一刻触发的;看门狗复位是看门狗定时器超时触发的;外部复位是按键按下去要么电压变化触发的;测试复位是调试器插上去触发的。STM32 有硬件看门狗,一般定个 60ms(2000Hz)或 1s(1000Hz)。
要是程序跑飞了,定时器没工作,代码没跑够 60ms,看门狗就会强制复位,把你拉回来。硬件看门狗负责保命,软件看门狗负责防呆。 中断是 STM32 的灵魂。在没有中断之前,芯片乖乖地执行程序;一旦有中断形成,CPU 会立马跳下来处理那个事件,然后再跳回原来的代码持续跑。 中断有源中断和软件中断。主程序响应的是程序中断,比如按键按下、定时器超时、串口发送数据搞定。硬件响应的是外部中断,比如按键按下(GPIO 的上升沿或下降沿)、ADC 搞定采样、SPI 通信终止。STM32 内部有各种外设的中断管住器,负责匹配中断源,让 CPU 去干活。 中断服务程序(ISR)是断点代码,一般只写几行。它务必处理复位、时钟、看门狗、内存映射这些硬件事,绝对不能有复杂的操作,主循环体写到这里就会挂。 还有中断优先级。
要是有多个中断源与此同时形成,CPU 得拍板先处理哪个。STM32 的 NVIC 管住器能设置优先级。 中断向量表(Vector Table)是程序的起点。一旦形成中断,CPU 会立即跳转到这个地址。
这个地址本身就是被编程的,比如第 0 个地址给 PSC(定时器中断),第 1 个地址给 NMI(硬中断),第 20 个地址给外部中断 0。STM32 内部有地址映射表,告诉程序该跳到哪个中断向量。 单片机还有一个自称“脑回路”的自启动模块,叫看门狗复位,简称 WDR(Watchdog Reset)。它特别之处在于,它借着外设重启的时机,直接触发复位,彻底不需求外部按键。 STM32 还能够做 SPI 通信。SPI 分 Master(主)和 Slave(从)。Master 负责发起通信,发送请求,接收响应,还要管住时序;Slave 就是执行者,跑程序、接引脚。STM32 的 SPI 管住器硬件设计得不错,赞成多种模式,比 8051 那帮老古董强多了。 STM32 的 GPIO 引脚功能丰富。
一般/平平引脚是 IO,能够接拉低、上拉、推挽、开漏。STM32 能管住方向,能驱动上拉或推挽。但为了省电,有些引脚被锁死,不能直接接地。
要是需求,得用 SWI(系统引脚插入功能)来解锁,但这操作有点繁琐。 ADC(模拟到数字)也是 STM32 的强项。它有内置的 ADC 管住器,赞成多通道同步和异步测量。测量结局能够通过 SPI 输出,要么直接通过 GPIO 读出来。ADC 精度主要看外部参考电压和分辨率,ADC12 能测 12 个通道,还有精度级别的选型。 Flash 存器是存放程序的仓库,有 EECP(EEPROM)和 SPI 两种接口。EEPROM 适合存少量数据,配置参数;SPI 适合存大量数据,比如程序固件。STM32 的 SPI 管住器有三个通道,能够并行工作,传输速度挺快。 ADC12 还有专门的通道用于测量电压和电流。它赞成 14-bit 分辨率,最高能测 32.768V。
每次测量,ADC 会忽略输入信号,存到临时存区,等采样次数够多了,才从临时区读回主存区。STM32 内部有链表来管理临时存区的位置,撇脱调用。 STM32 的定时器也挺牛。它不仅能测量工夫,还能做 PWM(脉冲宽度调制)。PWM 用来管住电机转速、管住 LED 亮度。STM32 的定时器赞成 16 位(16-bit Counter),即 65535 的计数值。它还有捕获功能,比如用定时器来精确知道某个光电开关触发时走了多远,这比单纯测工夫更准。 GPIO 还有事件驱动模式,比如按键按下,直接触发中断,不用等定时器运行完。 SPI 通信协议里,有启动、命令、应答这些步骤。STM32 的 SPI Controller 在处理这些协议时,逻辑贼清楚,不像老程序那样好办出错。 STM32 的看门狗机制是多级的。
第一级硬件看门狗,第二级软件看门狗,第三级高级看门狗。高级看门狗还能赞成看门狗复位(WDR),真正实现“无键复位”,这在嵌入式开发里是个挺实用的特性,省去了时常按下去的费事。 STM32 的启动流程也是讲究的。上电复位后,看门狗复位电路被激活。CPU 从主程序启动跑,要是遇到异常,就触发中断,然后启动高级看门狗复位。
要是看门狗复位成功,主程序持续;要是失效,看门狗复位电路再次启动,整个系统重启。 外部存器配置也挺关键。STM32 的外设存器映射区(Memory Map)分好多块,比如 Flash、SRAM、PLL 寄存器区、外部中断向量区、外部中断管住区、ADC 寄存器区、时钟配置区、定时器寄存器区等。开发者得清楚每个地址块里存的是啥,才能写对程序。 STM32 的启动文件(.prj)里,程序代码一般放在 Flash 里,数据放在 SRAM 里。STM32 内部 SRAM 有 L1 和 L2 缓存,L2 比 L1 大大量,能存更多数据。 STM32 的电源管理(PMIC)模块让芯片能休眠。它能够进入低功耗模式,此时 MCU 简直不耗电。当需求工作时,它再唤醒。STM32 有两个电源模式:SLEEP(睡眠)和 STOP(暂停)。休眠模式下,外设大局部暂停工作;暂停模式下,唤醒速度挺快,但功耗也高。SLEEP 模式下,时钟会被锁死,不能跑出,这是为了省电。 还有一些特定引脚的用法,比如 VCC、GND、VDDIO、VDDIO2 这些是电源引脚,VREF+、VREF- 是参考电压源。
这些引脚不能随意接外部电压,否则可能会烧坏芯片。 STM32 的启动时序也挺关键。上电后,内部电压形成器启动工作,启动引脚(LDO)启动输出电压,MCU 复位电路启动工作。
这个过程由硬件模块协同搞定,不能靠软件去搞。 总而言之,STM32 就是一个集 CPU、内存、时钟、中断、外设于一身的微型计算机,只不过它的“智力”在硬件层面就体现出来了,软件能够随意修改,硬件限制也比一般/平平 CPU 宽松得多。它的每一个功能块,从时钟到看门狗,从 GPIO 到 SPI,都经过精心设计,就是为了让你能做出各种各样的产品。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
