STM32硬件学习笔记
一、电阻

核心原理:其本质就是阻碍电路中电荷的流动,将电能转化为热能;电阻是导体对电流阻碍作用大小的物理量,电阻越大导体对电流的阻碍作用越强;
R=U/I;
电阻率:反映材料阻碍电流通过的能力,ρ=RAL
(R 为电阻,L 为导体长度,A 为横截面积),ρ越大材料越不容易导电,ρ越小材料越容易导电。
电导率:电阻率的倒数,反映材料传导电流的能力。σ=1ρ
,σ 越大 → 导电性能越好
σ 越小 → 导电性能越差。
电阻的主要作用:
|
限流 |
控制电路中电流的大小,保护敏感器件。 |
|
分压 |
利用串联电阻进行分压。 |
|
偏置作用(稳定工作点) |
为晶体管、运算放大器等有源器件提供合适的静态工作点(直流偏置),使其工作在所需的区域: ·三极管放大电路中,基极偏置电阻设定静态基极电流; ·运放电路中,反馈电阻和输入电阻共同决定增益。 |
|
上拉和下拉作用 |
确保信号线在空闲状态下有确定的电平,防止悬空导致的误触发。 ·上拉电阻:将信号线通过电阻接至高电平(VCC),空闲时保持高电平; I²C总线必须使用上拉电阻; ·下拉电阻:将信号线通过电阻接至低电平(GND),空闲时保持低电平; 按键/开关输入引脚加上下拉电阻,防止悬空。 |
|
采样与检测 |
利用电阻两端的电压与电流的线性关系,将电流信号转换为电压信号进行测量。 ·电流检测电阻(采样电阻): 串联在电源回路中,通过测量其两端压降来推算电流; ·NTC/PTC: 电阻值随温度变化,用于温度检测。 |
|
阻抗匹配 |
在信号传输中,使信号源阻抗与负载阻抗匹配,实现最大功率传输或消除信号反射。 |
|
滤波(与电容、电感配合) |
电阻与电容、电感配合构成滤波网络,利用频率特性实现信号筛选。 ·RC高通滤波; ·RC低通滤波。 音频信号处理、电源去耦、噪声抑制。 |
|
负反馈 |
在放大电路中,通过电阻引入负反馈,稳定增益、扩展带宽、降低失真。 |
|
发热与功率消耗 |
将电能转换为热能。 |
|
放电 |
为电容等储能元件提供放电通路,确保断电后电荷能够安全释放。 |
二、电容

核心原理:储存电场能量,阻隔直流、通过交流;
瞬态过程: 电源驱动电子向负极板聚集,同时从正极板抽走电子,形成短暂的充电电流。
稳态结果: 随着极板上电荷积累,极板间建立的电场产生的反向电压逐渐增大,直到与外加直流电压完全相等。此时净电场力为零,电荷不再移动,外部电流降为 0。
单位:法拉(F),例如极板间的电压为1V,极板上存储的电荷为1C(6.242 × 10^18个电子),电容表达式:dQ = C * dV, 电流表达式:I = dQ/dt; Q = C * U; 电场能:E = (C*U^2)/2;
电容在电路中的作用:
|
储能与滤波(电源系统) |
电源滤波/去耦:并联在电源与地之间,吸收电源线上的高频噪声和瞬态电流尖峰,为芯片提供"本地微型电池",防止电压跌落导致逻辑错误。 ·典型配置: MCU 每个 VCC 引脚旁放 100nF 陶瓷电容 + bulk 电解电容(10μF~100μF)。 ·整流后平滑: 在 AC-DC 整流桥输出端并联大容量电解电容,将脉动直流变为平稳直流。 ·储能缓冲: 在负载突变(如电机启动、闪光灯触发)时瞬间释放能量,减轻电源压力。 |
|||||||||||||||||||||
|
隔直与耦合(信号通路) |
利用电容"通交流、阻直流"的频率特性; ·交流耦合:串联在两级放大器或信号源与负载之间,只传递交流信号,阻断直流偏置,使前后级静态工作点互不影响;比如:音频信号的输入输出、射频级间耦合。 ·直流隔离:在需要电气隔离但传递信号的场合(配合变压器或光耦合)。 |
|||||||||||||||||||||
|
滤波与选频(频率选择) |
利用电容阻抗Xc=12πfC
|
|||||||||||||||||||||
|
定时与波形生成 |
利用RC充放电时间常数τ=RC ·延时电路:上电复位、软启动、看门狗超时检测; ·振荡器:555定时器、RC振荡器产生方波/三角波。 |
|||||||||||||||||||||
|
旁路与退耦(高频完整性) |
·旁路电容:为高频噪声提供低阻抗回流路径到地,防止噪声进入敏感电路,通常用小容值陶瓷电容(1nF~100nF),紧贴器件引脚放置; ·退耦电容:防止本级电路的开关噪声通过电源线耦合到其他电路,通常用中等容值(1μF~10μF),靠近电源入口。 工程要点: 实际电容存在寄生电感,大电容高频性能差,小电容低频储能不足。因此必须大小电容并联使用,覆盖从 kHz 到 GHz 的全频段。 |
|||||||||||||||||||||
|
功率因数补偿(电力系统) |
工业负载多为感性(电机、变压器),导致电流滞后电压,功率因数降低。 并联电力电容器提供超前无功电流,抵消感性无功,提升功率因数,减少线路损耗。 |
|||||||||||||||||||||
|
特殊功能电容:
|
||||||||||||||||||||||
|
选型核心参数:
|
||||||||||||||||||||||
三、电感

核心原理:存储磁场能量,阻碍电流变化,通直流、阻交流;
法拉第电磁感应定律: 当流过线圈的电流发生变化时,变化的电流产生变化的磁场,变化的磁场又在线圈自身中感应出电动势(自感电动势)。
楞次定律: 自感电动势的方向永远阻碍引起它的电流变化。
电流增大 → 感应电动势反向,阻止电流增大
电流减小 → 感应电动势正向,阻止电流减小
基本公式: U=LdIdt
(电压取决于电流的变化率); Φ=L×I
。
通直阻交: 直流稳态下相当于短路(仅存导线电阻);交流下感抗 XL=2πfL
,频率越高阻抗越大。
电流滞后: 在交流电路中,电压相位超前电流 90∘
(因为必须先有电压才能推动电流克服自感)。
电流不能突变: 电感中的电流变化受到自感电动势的抑制。
电感在电子电路中的作用:
|
储能与功率变换(电力电子核心) |
Buck/Boost/Buck-Boost拓扑:开关导通时电感充电储能,关断时电感向负载放电续流,实现高效的DC-DC变换; PFC(功率因数校正):Boost电感强制输入电流跟随电压正弦波形,将 PF 提升至 0.95 以上。 逆变器/并网:输出滤波电感平滑 PWM 斩波电流,使其逼近正弦波并满足并网谐波标准。 |
||||||||||||||||||
|
滤波与噪声抑制(EMC/电源完整性) |
利用电感“通直阻交”的频率选择性,阻挡不需要的高频分量通过。
|
||||||||||||||||||
|
谐振与选频(射频/通信) |
电感与电容组合形成 LC 谐振回路,利用谐振频率处阻抗的极端特性实现频率选择。 ·并联LC谐振:谐振时阻抗最大 → 用作带通滤波器的选频负载、振荡器的反馈网络。 ·串联LC谐振:谐振时阻抗最小 → 用作陷波器(Notch Filter)、天线匹配网络。 ·阻抗匹配:RF 电路中通过电感/电容网络实现源与负载的共轭匹配,最大化功率传输。 ·VCO/PLL:可调电感(或变容二极管+固定电感)决定振荡频率,是无线收发机的核心。 |
||||||||||||||||||
|
耦合与隔离(变压器/互感器) |
当两个或多个线圈共享同一磁路时,电感演变为变压器,实现能量的跨绕组传递。 ·电气隔离:原副边无直接电气连接; ·电压/阻抗变换:V1/V2 = N1/N2 , Z1/Z2 = (N1/N2)²,用于适配不同电压等级或阻抗; ·电流传感器:电流互感器非接触测量交直流电流; ·无线能量传输:发射/接收线圈通过磁场耦合传递能量; |
||||||||||||||||||
|
瞬态抑制与浪涌保护 |
利用电感"电流不能突变"的特性,限制电流的变化速率。 ·浪涌电流限制:串联在电源入口,抑制上电瞬间电容充电产生的冲击电流; ·di/dt限制:保护开关管免受过快的电流上升率导致的应力损坏; ·电弧抑制:在继电器/接触器触电两端并联电感(或RC+电感),吸收断开感性负载时的反电动势能量; ·Snubber电路:与电阻/电容配合,吸收开关管关断时的电压尖峰。 |
四、二极管
核心功能:单向导通性;
结构:由一个P型半导体(有较多的空穴)和一个N型半导体(有较多的电子)组成一个PN结;
工作原理:

·正向偏置:当P区接正电压、N区接负电压时,外电场削弱了内电场,耗尽层变窄,载流子(空穴和电子)顺利扩散通过PN结,形成较大的电流(导通)。硅管压降约为0.7V,锗管压降约为0.3V。
·反向偏置:当P区接负电压、N区接正电压时,外电场增强了内建电场,耗尽层变宽,阻止多数载流子通过,形成截至。
·击穿:反向电压超过击穿电压,会发生雪崩击穿或齐纳击穿,电流急剧增大(稳压管利用此特性,普通二极管会损坏)。
二极管在电子电路中的应用:
|
整流 |
·半波/全波整流: ·同步整流:在低压大电流开关电源中,使用MOSFET替代普通二极管以降低导通损耗,但控制逻辑上仍模拟二极管的单向导通行为; ·防反接保护:在电源输入端串联一个二极管,防反接。 |
|
钳位与限幅 |
利用二极管导通后两端电压基本恒定的特性,限制信号幅度。 ·输入端口保护:在芯片引脚对地和对电源各接一个二极管,将输入信号钳位在-0.7V~Vcc+0.7V之间,防止静电或过压损坏; ·波形整形:削去正弦波的顶部或底部,生成方波或特定形状的信号; ·逻辑电平转换:利用二极管压降实现简单的电平偏移。 |
|
续流与感性负载保护 |
当电感线圈(继电器、电机、变压器)断电时,会产生极高的反向电动势。 ·续流二极管:反向并联在感性负载两端。断电瞬间,感应电流通过二极管形成回路缓慢释放能量,避免高压击穿驱动三极管或MOS管。 ·选型:必须使用快恢复二极管或肖特基二极管。 |
|
稳压与基准电压 |
利用二极管的反向击穿特性或正向导通特性提供稳定电压。 ·齐纳二极管:工作在反向击穿区,提供固定的稳压值(如3.3V、5.1V、12V),常用于简单电源稳压或作为ADC/DAC的外部基准源; ·TL431(精密稳压):本质是可控的齐纳二极管,配合电阻分压可实现任意可调的高精度基准电压,是开关电源反馈环路的核心器件。 ·正向串联稳压:多个硅二极管正向串联,利用每个0.7V压降获得1.4V、2.1V等低压基准。 |
|
开关与信号解调 |
利用二极管的快速通断能力处理高频信号。 ·检波/解调:从AM调幅信号中提取包络信息;(收音机) ·混频器:环形二极管混频器利用二极管的非线性实现频率变换;(射频接收机) ·高速开关:PIN二极管在射频电路中充当电控开关或可变衰减器;肖特基二极管用于GHz级信号的采样保持。 |
|
ESD保护二极管 |
用于吸收和泄放静电放电及瞬态浪涌能量的半导体器件。 ·反向击穿:当处于反向偏置时,正常情况下表现出很高的电阻,阻止电流的流动。当反向电压击穿二极管时,允许大电流通过,在静电放电过程中,保护二极管会在其他敏感元件受损之前先击穿,提供一个低阻抗路径,将静电安全引导至地线。 ·快速电荷转移:静电放电发生时,大量电荷会迅速寻找释放路径。ESD 保护二极管能快速响应,其击穿电压通常远低于被保护电路元件的最大耐受电压,可在瞬间将线路上的静电释放到地,使被保护的电路免遭静电冲击。 |
|
特殊功能运用: 发光二极管: 将电能直接转化为光能,用于指示、照明、显示及光通信。 光电二极管: 工作在反偏状态,将光信号转换为微弱电流,用于光传感、光纤接收、烟雾报警。 变容二极管: 反向偏置时结电容随电压变化,用于VCO压控振荡器和射频调谐电路。 TVS二极管: 瞬态电压抑制器,专门吸收ESD、浪涌和雷击产生的瞬时高压脉冲,响应速度达皮秒级,是接口防护的第一道防线。 |
|
五、三极管 BJT
分为NPN型和PNP型:




NPN型:
c:集电极;b:基极;e:发射极;
电流方向:c->e和b->e,Ie=Ib+Ic;
基极(b)为低电平时,ce不导通;基极(b)为高电平时(Vb>Ve,b、e之间存在0.4~0.7V的压降),ce导通;
信号放大,例如:Ib=10mA,Ic=500mA,β=Ic/Ib,Ie=Ic+Ib=Ib*β+Ib.
PNP型:
c:集电极;b:基极;e:发射极;
电流方向:e->b和c;
共阴极,基极(b)为高电平时(前提是b点的电动势高于e点),ec不导通;
基极(b)为低电平时(b点电动势低于e点电动势),ec导通。
当持续使用时,CE之间的阻抗会很小,但基极的功耗很大会影响器件发热。(控制功耗大,导通功耗低)
三极管的三种状态:
|
截止状态 |
基极电流为0,ce不导通; |
|
放大状态 |
基极电流变大,集电极电流会成比例放大; |
|
饱和状态 |
基极电流变大,集电极电流不再被放大; |
三极管在电子电路中的应用:
|
信号放大 |
利用IC=βIB的电流控制特性实现电压/功率增益。 |
|
开关与驱动 |
·低侧开关驱动:NPN三极管驱动继电器、LED、小型电机等负载。 ·高侧开关:当控制信号为低电平时导通,避免了NPN高侧驱动所需的电平移位电路。 ·达林顿管:两级BJT复合封装,𝛽可达数千至上万。用于需要极大电流增益的场合(如MCU直接驱动大功率负载),代价是更高的饱和压降(约1.4V)和更慢的开关速度。 |
|
紧密基准与模拟功能模块 |
·带隙基准源: 利用BJT VBE ........ |
|
振荡与波形生成 |
·LC/晶体振荡器: BJT提供维持振荡所需的负阻或正反馈增益。 ·多谐振荡器:两个BJT交叉耦合构成无稳态、单稳态或双稳态电路,生成方波、定时脉冲或存储状态。虽已被555定时器取代,但仍是理解时序电路的基础。 |
|
保护与辅助功能 |
·过流短路保护:利用BJT的 VBE ·反向电源保护:PNP串联在电源入口,反接时自动截止。比二极管方案压降更低。 |
六、MOS管

核心功能:电压控制电流的开关器件。
结构: 栅极(G)、源极(S)、漏极(D),栅极与沟道之间有一层 绝缘氧化物(SiO₂)。分增强型和耗尽型,最常用的是 增强型NMOS/PMOS。
工作原理:(NMOSFET)
栅极电压为0V时:S-D之间是两个背靠背的PN结,无法导通;
栅极施加电压(VGS>Vth
):Vth为阈值电压,栅极正电荷排斥P型衬底中的空穴,吸引电子到氧化层下方表面,形成一层 反型层(N型导电沟道),连通S和D。
存在PN结寄生二极管;内部箭头方向为电子的移动方向;
对于 N-MOS:P型衬底 ↔ N+源区 → 形成 P-N结二极管,阳极在S,阴极在D(即电流从D→S导通)。
对于 P-MOS:N型衬底 ↔ P+源区 → 同样形成二极管,但方向相反(电流从S→D导通)。


随跟着电流的增大,耗尽层会影响导通,导通功耗变大。(控制功耗低,导通功耗大)
IGBT:
|
|
|
|
关闭状态 |
开启状态 |
|
三者的主要区别: |
|
|
|
|
IGBT模块组成的直流转三相交流:

其中的二极管为续流作用,IGBT内部不存在天然的PN结,无法承受反向电压(反向阻断能力极弱,通常<10V)。
在电机驱动、逆变器等应用中电机绕组会在开关关断时产生反电动势,导致电压反向
没有续流二极管会导致IGBT会被反向击穿损坏;能量无处释放,产生极高电压尖峰(可能>2×母线电压)。
七、GPIO控制器工作原理
GPIO引脚内部电路:

1、钳位二极管:保护后续电路
(1)上拉二极管:阳极接VDD_FT(例如5V),防止引脚电压(例如5.5V)大于VDD+0.3V(ESD或外部灌流电压),可确保流入芯片的电压稳定在5V,若外部输入电压(如12V)远大于二极管耐受值,二极管将被击穿;
(2)下拉二极管:阴极接VSS防止引脚电压小于VSS-0.3V(负压冲击);例如输入电压为-0.5V时,此时会被下拉二极管限制在0V;
2、上拉电阻和下拉电阻:(上下拉输入)
上拉电阻:将引脚维持在高电平状态;
下拉电阻:将引脚维持在低电平状态;
当引脚有外设输入时,当前上下拉电阻状态将被外设输入电平替代;
3、GPIO输入模式
外设通过引脚输入模拟信号再通过TTL施密特触发器转换为0/1的二进制数字信号再存入输入数据寄存器;
TTL施密特触发器:将任意波形整形为方波信号;
·当输入电压高于正向阈值电压,输出为高;
·当输入电压低于负向阈值电压,输出为低;
当输入电压介于正向阈值和负向阈值电压之间时,输出信号保持上次的输出状态;
|
|
4、浮空输入
引脚无输入外设,上下拉电阻均不开启,处于高阻态模式;
5、输出模式
(1)推挽输出:由N-MOS和P-MOS同时工作组成;

“输出控制”端输出一个低电平时,P-MOS导通,N-MOS截止,对外输出高电平;
“输出控制”端输出一个高电平时,P-MOS截止,N-MOS导通,对外输出低电平。
(2)开漏输出:只有N-MOS处于工作状态, P-MOS被禁用;

“输出控制”端输出高电平时,N-MOS导通,对外输出低电平;
“输出控制”端输出低电平时,N-MOS截止,此时引脚处于高阻态;
若要让引脚输出高电平,引脚就必须外接一个上拉电阻。
开漏输出逻辑下,只有当所有连接设备均输出高电平时,总线才会是高电平。当有一个设备输出低电平,总线将被拉低。(I²C总线)
(3)输出数据寄存器:ODR寄存器
位宽:32位寄存器,但仅低16位有效(对应 Pin0~Pin15),可读可写寄存器,高 16 位保留;
操作逻辑:直接映射到输出锁存器。写入 1 → 引脚输出高;写入 0 → 引脚输出低。读取时返回当前锁存器的值。
(4)置位复位寄存器:BSRR寄存器
位宽:32 位全部有效,分为两个独立功能区:
·低 16 位 (BS[15:0]):置位 (Set)。写 1 → 对应引脚输出高;写 0 → 无效果。
·高 16 位 (BR[15:0]):复位 (Reset)。写 1 → 对应引脚输出低;写 0 → 无效果。
只写寄存器,读取BSRR始终返回0;
操作逻辑:硬件层面直接对输出锁存器的单个位进行置位或清零,无需读取当前状态。
6、模拟模式

核心原理:彻底断开数字通路;
当引脚配置为模拟模式时,GPIO 内部的施密特触发器、输出驱动器、上拉/下拉电阻全部被硬件禁用。引脚直接通过一条低阻抗模拟路径连接到片内 ADC 或 DAC 模块。
应用场景:
ADC 采集传感器信号(温度、电压、电流)
DAC 输出波形(F103RET6 的 PA4/PA5 支持 DAC)
VBAT 监测、内部温度传感器参考
7、复用模式
核心原理:将引脚控制权移交给片内外设
复用模式下,GPIO 的输出驱动器仍然工作,但其输入信号源从 ODR 寄存器切换到了片内外设(如 USART、SPI、TIM、I2C 等)。输入方向则根据外设需求自动路由。

八、GPIO控制器HAL库接口
1、引脚初始化配置结构体
typedef struct
{
uint32_t Pin; //要配置的GPIO引脚
uint32_t Mode; //引脚工作模式
uint32_t Pull; //引脚上下拉模式
uint32_t Speed; //引脚输出电平反转速度
uint32_t Alternate; //引脚复用模式
} GPIO_InitTypeDef;
2、引脚状态枚举
typedef enum
{
GPIO_PIN_RESET = 0, //引脚输出低电平
GPIO_PIN_SET //引脚输出高电平
} GPIO_PinState;
3、初始化GPIO控制器函数
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
//GPIOx:GPIO组控制器基地址
//GPIO_Init:GPIO引脚模式配置
4、读取GPIO端口电平状态函数
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
//GPIOx:GPIO组控制器基地址
//GPIO_Pin:要读取的GPIO引脚
//返回值:引脚电平状态
//GPIO_PIN_RESET:引脚输出低电平
//GPIO_PIN_SET:引脚输出高电平
{
return GPIO_ReadPin(GPIOx, GPIO_Pin);
}
5、设置GPIO端口电平状态函数
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
//GPIOx:GPIO组控制器基地址
//GPIO_Pin:要写入的GPIO引脚
//PinState:要写入的引脚电平状态
6、反转GPIO端口电平状态
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
//GPIOx:GPIO组控制器基地址
//GPIO_Pin:要切换的GPIO引脚
九、buck、boost电路
1、buck电路(降压斩波电路)
Buck电路通过MOSFET开关动作调节占空比来控制输出电压。

当电源电压为5V,输出目标电压为3.3V(负载电阻1Ω),开通MOSFET,由于电感储能导致输出电流缓慢上升,当输出电流高于3.3A时关断MOSFET,此时电感产生反电动势输出电流缓慢降至3.3A以下,然后MOSFET开通充电。
通过单片机GPIO或者电源管理芯片输出pwm波给MOSFET的栅极控制通断,实现对目标电压的控制。
2、boost电路(升压斩波电路)
将输入的直流电压升高到所需的更高直流电压。

当负载电阻为1Ω,开启电压为10V时,将MOSFET开通直到通过电流为10A再关闭MOSFET,此刻负载处电流为10A电压为10V,以实现升压。
通过MOSFET的快速通断,让电感交替进行“充电”和“放电”,实现升压。
十、DCDC与LDO的区别
|
DCDC |
LDO |
|
|
工作原理 |
通过MOSFET控制电感的储能与释放; |
通过芯片内部的晶体管的导通程度来分担多余电压以热能的形式耗散; |
|
输出噪声 |
由于开关频率输出纹波和EMI辐射较大; |
无开关输出纹波较低; |
|
带载能力 |
可输出大电流,发热量低; |
发热量大,输出电流通常较低; |
|
应用场景 |
1、大电流核心控制电源(CPU、SoC); 2、大压差降压、升压; 3、多轨电源; |
1、对噪声敏感的模拟/射频电路; 2、控制压差较小、小电流的二次降压; 3、低功耗常开电路(唤醒、按键检测); |
十一、STM32启动过程分析
1、汇编器指令配置
.syntax unified @ 使用统一汇编语法(ARM/Thumb 兼容)
.cpu cortex-m4 @ 目标 CPU 为 Cortex-M4
.fpu softvfp @ 浮点运算使用软件模拟(不启用硬件 FPU)
.thumb @ 使用 Thumb 指令集(Cortex-M 只支持 Thumb/Thumb-2)
设计目的:Cortex-M4内核只支持Thumb-2指令集,不支持ARM指令集。如果项目需要使用硬件FPU,会在System Init()中手动使能。
2、全局符号与链接器符号引用
.global g_pfnVectors @ 向量表,导出供外部引用
.global Default_Handler @ 默认中断处理函数
.word _sidata @ .data 段初始值在 Flash 中的起始地址
.word _sdata @ .data 段在 RAM 中的起始地址
.word _edata @ .data 段在 RAM 中的结束地址
.word _sbss @ .bss 段起始地址
.word _ebss @ .bss 段结束地址
设计目的:这些符号由链接器脚本定义,代表内存布局的边界。
3、Reset_Handler --- 重启中断函数
ldr sp, =_estack @ 将栈顶地址加载到 SP
bl SystemInit @ 系统时钟配置(PLL、Flash 等待周期等)
设计目的:Cortex-M复位后硬件会自动从向量表第0项读取SP,此处的设计是确保栈指针正确;
拷贝.data段(Flash到SARM)
ldr r0, =_sdata @ RAM 中 .data 起始地址(目标)
ldr r1, =_edata @ RAM 中 .data 结束地址(循环终止)
ldr r2, =_sidata @ Flash 中 .data 初始值地址(源)
movs r3, #0 @ 偏移量计数器 = 0
b LoopCopyDataInit @ 跳转到循环判断
CopyDataInit:
ldr r4, [r2, r3] @ 从 Flash 读 4 字节
str r4, [r0, r3] @ 写入 RAM
adds r3, r3, #4 @ 偏移 += 4
LoopCopyDataInit:
adds r4, r0, r3 @ 计算当前目标地址
cmp r4, r1 @ 是否到达 .data 末尾?
bcc CopyDataInit @ 若小于,继续拷贝
|
段 |
存储位置 |
运行位置 |
原因 |
|
.text(代码段) |
Flash |
Flash |
代码只读,可直接执行 |
|
.data(已初始化数据段) |
Flash(初始值) |
SRAM |
全局变量可读写,Flash 不能写 |
|
.bss(未初始化数据段) |
不占 Flash |
SRAM |
未初始化变量,只需清零 |
清零.bss段:
ldr r2, =_sbss @ .bss 起始地址
ldr r4, =_ebss @ .bss 结束地址
movs r3, #0 @ 写入值 = 0
b LoopFillZerobss
FillZerobss:
str r3, [r2] @ 写 0
adds r2, r2, #4 @ 地址 += 4
LoopFillZerobss:
cmp r2, r4 @ 是否到末尾?
bcc FillZerobss @ 继续
设计目的:.bss段在Flash中不占用内存空间,只在RAM中分配,上电后RAM内容是随机的,必须手动清零。
调用C库初始化与main
bl __libc_init_array @ 执行 C++ 全局构造函数、初始化 .init_array
bl main @ 调用用户 main()
bx lr @ main 返回后(正常不应返回)
4、Default_Handler --- 默认中断处理
Default_Handler:
Infinite_Loop:
b Infinite_Loop @ 死循环
设计目的:如果发生未预期的中断,进入死循环而非跑飞,这便于后期查看调试。
十二、运算放大器(光敏传感器)

1、核心配置:
·同相输入端(+):连接到光敏电阻的分压电路的输出点,接收随光照变化的模拟电压信号;
·反相输入端(—):直接连接到运放输出端。
运放输出端直接接到反相输入端,构成一个负反馈电路。根据运算放大器的“虚短”特性,反相输入端的电压会被强制拉向与同相输入端相等的电位。因此,输出电压会跟随输入电压的变化。
2、信号采集:
3.3V电源经过光敏电阻R25和电阻R26分压,节点电压(同相输入端电压)随着光照变强而变大。
3、阻抗匹配:
高输入阻抗:运算放大器的同相输入端阻抗极高,导致它从光敏电阻分压电路中吸收到的电流极小,几乎不分流。
低输出阻抗:运算放大器的输出端具有低内阻的特性,即使负载电流有波动,输出电压也会保持稳定,如果是高输出阻抗则电压会直接被拉低。
4、特性:
该运算放大器并非为了“放大”电压幅度,而是为了“放大”电流驱动能力并隔离干扰。
更多推荐










所有评论(0)