1

HS,公众号:平凡灵感码头STM32 单片机启动过程全解析:从上电到主函数的旅程

2

HS,公众号:平凡灵感码头STM32F103 简单 Bootloader 实现教程

3

HS,公众号:平凡灵感码头全面解析看门狗(Watchdog):从原理到STM32寄存器配置

4

HS,公众号:平凡灵感码头STM32 程序内存分布详解

其它详细内容在各个集合里面经行查阅

一、MCU基础知识问题

1. Cortex-M0、M3、M4有什么区别?

参考答案:

Cortex-M0、M3、M4 都属于 ARM Cortex-M 系列内核,但定位不同。

  • Cortex-M0

    • 结构最简单

    • 功耗低、成本低

    • 性能较弱,适合简单控制应用

  • Cortex-M3

    • 性能明显提升

    • 支持更复杂的中断管理

    • 适用于工业控制、通信设备等

  • Cortex-M4

    • 在 M3 基础上增加了 DSP 指令和 FPU

    • 更适合音频处理、数字信号处理等计算密集型场景

总体来说,三者主要区别体现在 性能、指令集能力以及应用场景

2. MCU 的启动流程是什么?

参考答案:

MCU 上电后大致会经历以下流程:

  1. 上电复位

  2. CPU 从 **向量表地址(通常是 Flash 起始地址)**读取:

    • 初始栈指针(SP)

    • Reset Handler 地址

  3. 设置栈指针

  4. 跳转执行 Reset_Handler

  5. 系统初始化:

    • 初始化时钟

    • 初始化数据段

  6. 进入 main() 函数

因此 MCU 启动的核心是 向量表 + Reset_Handler


3. MCU 中断机制是如何工作的?

参考答案:

中断机制允许 CPU 在执行主程序时,响应外部或内部事件。

基本流程:

  1. 外设产生中断请求

  2. NVIC 判断中断优先级

  3. CPU 保存当前上下文

  4. 跳转到中断服务函数(ISR)

  5. 执行中断处理代码

  6. 恢复现场并返回主程序

中断机制的核心作用是 提高系统实时性


4. NVIC 的作用是什么?

参考答案:

NVIC(Nested Vectored Interrupt Controller)是 Cortex-M 内核中的 中断控制器

主要功能包括:

  • 管理中断优先级

  • 支持中断嵌套

  • 控制中断使能和屏蔽

  • 快速响应中断

NVIC 能够提高 MCU 的 中断响应速度和系统实时性能


5. UART、SPI、I2C 有什么区别?

参考答案:

接口

特点

UART

异步通信,只需 TX/RX 两根线

SPI

同步通信,速度快,需要 4 根线

I2C

两线通信,支持多主多从

总结:

  • UART:简单、常用于串口调试

  • SPI:速度快,适合高速通信

  • I2C:节省IO口,适合传感器通信


6. 看门狗(Watchdog)的作用是什么?

参考答案:

看门狗是一种 防止系统死机的保护机制

基本原理:

  • MCU 正常运行时需要定期“喂狗”

  • 如果程序跑飞,没有喂狗

  • 看门狗会触发 系统复位

因此看门狗可以提高系统 稳定性和可靠性


二、嵌入式 C 语言问题

1. volatile 关键字有什么作用?

参考答案:

volatile 表示变量可能被 外部因素改变,编译器不能对其进行优化。

常见使用场景:

  • 中断变量

  • 硬件寄存器

  • 多线程共享变量

例如:


volatile uint32_t flag;

这样编译器每次都会 重新读取变量值


2. static 关键字的作用是什么?

参考答案:

static 主要有两种作用:

  1. 函数内部变量

只初始化一次,生命周期为整个程序运行期间。

  1. 限制作用域

如果用于全局变量或函数,只在当前文件可见。

因此 static 常用于 模块封装


3. 中断函数中能不能使用 printf?

参考答案:

一般 不建议在中断中使用 printf

原因包括:

  • printf 执行时间较长

  • 可能阻塞中断

  • 可能导致系统实时性下降

如果需要调试,可以:

  • 使用标志位

  • 在主循环中输出信息


三、调试能力问题

1. MCU 无法下载程序如何排查?

参考答案:

可以按照以下步骤排查:

  1. 检查电源是否正常

  2. 检查 SWD 或 JTAG 接口连接

  3. 检查复位电路

  4. 检查 BOOT 配置

  5. 确认 MCU 是否被锁定

  6. 使用调试器尝试强制下载

通过逐步排查可以快速定位问题。


2. 程序跑飞可能是什么原因?

参考答案:

常见原因包括:

  • 指针错误

  • 堆栈溢出

  • 中断优先级冲突

  • 看门狗未喂

  • 内存越界

  • 外设异常

调试方法:

  • 使用 JTAG 调试

  • 查看程序计数器

  • 分析调用栈


3. 串口通信出现乱码怎么办?

参考答案:

可以从以下几个方面排查:

  1. 波特率是否一致

  2. 时钟配置是否正确

  3. 数据位、停止位配置

  4. 接地是否良好

  5. 是否存在干扰

必要时可以使用 示波器查看波形

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐