一、基础概念篇
Q1:什么是单片机?
A:集成CPU、RAM、ROM、I/O和定时器的微型计算机系统(如51、STM32)。Q5:哈佛vs冯诺依曼架构区别?
A:哈佛架构(指令与数据分开存储,速度快) vs 冯诺依曼(统一存储,成本低)。Q10:如何选择首款学习用MCU?
A:推荐STM32F103(资源丰富)或ESP32(自带WiFi,性价比高)。
二、开发环境搭建
Q15:Keil/IAR/PlatformIO优劣对比?
工具 优点 缺点 Keil 51/ARM兼容性好 收费,界面老旧 PlatformIO 跨平台,开源库丰富 调试功能较弱 Q18:如何用VS Code开发STM32?
A:安装Cortex-Debug插件 + STM32CubeMX生成工程。
三、核心外设驱动
GPIO控制
// STM32 HAL库示例 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // PA5输出高电平
Q30:PWM实现呼吸灯原理?
A:调节占空比改变平均电压,频率>100Hz避免闪烁。Q35:ADC采样不准怎么办?
A:增加RC滤波、校准参考电压、软件均值滤波。
四、通信协议精要
协议 | 速率 | 应用场景 | 关键配置项 |
---|---|---|---|
UART | 115200bps | 调试打印 | 波特率/停止位 |
SPI | 10Mbps | 高速存储器 | CPOL/CPHA相位 |
I2C | 400kHz | 传感器模块 | 上拉电阻(4.7kΩ) |
Q45:I2C总线死锁恢复方法?
A:发送9个SCL脉冲释放SDA线。
五、RTOS实战
FreeRTOS任务调度
xTaskCreate(vTaskLED, "LED", 128, NULL, 1, NULL); // 创建优先级1的任务
Q55:如何避免优先级反转?
A:使用互斥锁的优先级继承机制。
六、低功耗设计
STM32休眠模式对比
模式 电流 唤醒源 Sleep 1mA 任意中断 Stop 20μA 外部引脚/RTC Standby 2μA 复位/唤醒引脚 Q65:RTC计时误差大?
A:更换外部32.768kHz晶振(负载电容匹配)。
七、常见问题排错
Q70:程序跑飞可能原因?
- 堆栈溢出(增大启动文件Stack_Size)
- 中断未清除标志位
Q85:JTAG/SWD被禁用怎么办?
A:BOOT0拉高,用串口烧录解锁。
八、进阶开发技巧
Q90:如何移植LVGL到STM32?
A:配置FSMC接口驱动屏幕 + 定时器提供心跳。Q95:实现OTA远程升级?
代码
sequenceDiagram 设备->>服务器: 请求固件包 服务器-->>设备: 发送差分bin文件 设备->>Flash: 双Bank切换写入
九、选型指南
项目 | 消费电子 | 工业控制 |
---|---|---|
推荐MCU | ESP32-C3 | STM32H743 |
关键特性 | 低功耗WiFi | 双CAN总线 |
成本 | <$2 | <$10 |
十、开源项目推荐
智能家居中枢
- 硬件:ESP32 + 继电器模块
- 软件:ESPHome(支持Home Assistant)
四轴飞控
- 硬件:STM32F405 + MPU6050
- 算法:PID控制 + 卡尔曼滤波
附:速查表
- 中断优先级:数值越小优先级越高(ARM Cortex-M)
- 波特率计算:
USARTDIV = Freq / (16 * Baud)
- Flash寿命:STM32约10万次擦写(需均衡磨损)