番外篇综合实战:把前几篇学的 I2C 读传感器(AHT20 温湿度)和 OLED 显示(CH1116 驱动库)组合起来,做出一台能实时显示温度湿度的温湿度计。
STM32——OLED屏幕:CH1116驱动原理与波特律动驱动库
本篇博客学习128×64 的 OLED 屏幕:先搞懂驱动芯片 CH1116 的页/列/显存原理,从点亮一个像素开始手写底层;再用上波特律动的OLED 驱动库 + LED 取模助手,画线画圆、显示图片、显示中文。
STM32——I2C中断与DMA模式,状态机编程读取AHT20温湿度
上篇用 I2C 轮询模式读取了 AHT20 温湿度,本篇改造为中断模式:非阻塞的收发函数 + 状态机编程,CPU 不再傻等。同时踩了两个大坑——非阻塞函数里局部数组会被回收(要用 static)、跨文件共享变量 extern 的正确姿势。最后把中断版一行改成 DMA 版。
深入stm32的底层通信模型--数据的存储与传输
前面学了串口轮询、中断、DMA、蓝牙,又学了 I2C 读温湿度,每次 HAL 函数里都传一个"数据缓冲区指针"(receiveData、sendBuffer、readBuffer……)。这些数组到底存在哪?数据是怎么进到数组里、又从数组里发出去的?外设数据寄存器(DR)和数组是什么关系?这篇把 5 篇通信博客串起来,深入这个嵌入式通信的底层模型。
STM32——IIC通信,轮询模式读取温湿度传感器AHT20
前几篇博客学习的通信方式是串口:轮询、中断、DMA、蓝牙,把数据从一个设备传到另一个设备。这篇开始学习另一种嵌入式领域常见的通信方式:IIC(I2C)。读取温湿度传感器AHT20,把房间的温度湿度通过串口打印传输到电脑上。同时学习为外设编写独立驱动文件(.c/.h),并踩了一遍 VS Code 工程里"新文件没被编译"的大坑。
STM32——蓝牙BLE通信,用蓝牙无线控制小灯
前几篇博客我们把串口通信玩明白了——轮询、中断、DMA、不定长接收,但一直是有线连接。这篇引入蓝牙模块,把串口数据通过BLE无线传输到手机上,实现用手机app无线控制开发板上的三色LED。同时还实现一个带包头+长度+校验和的完整数据包协议,为后续复杂通信打基础。
STM32——串口DMA模式收发,与不定长数据接收
上一篇用中断模式解放了CPU——数据到了才处理,不用空等。但这还不够:每收发一个字节,CPU都要进一次中断去搬运数据,还是有点忙。这篇引入DMA(意为直接内存访问),给CPU找个"小助手"来专门搬数据。再结合串口空闲中断,实现不定长数据接收——发多少收多少,不用预先约定长度。
STM32——串口中断模式通信,让CPU不再"傻等"
上一篇博客用轮询模式实现了串口通信——电脑发指令,STM32控制LED。但轮询模式有个大问题:CPU一直在while循环里"傻等",除了接收信息,啥也干不了。这篇用中断模式解决它:开启串口中断后,CPU该干嘛干嘛,数据到了自动触发中断处理,不再干等。
STM32——串口通信,用电脑控制三色LED
前几篇博客学习了GPIO和中断,这篇开始学习串口,通过串口让电脑和STM32"对话"。用电脑串口助手发送指令,控制开发板上红绿蓝三个小灯的亮灭,并且STM32会把收到的指令原样回复回来
STM32——深入外部中断硬件原理
上一篇博客实现了外部中断的功能——红灯闪烁,按键触发中断翻转绿灯。这次从硬件层面深入理解中断的完整信号路径:GPIO输入驱动器 → 边沿检测电路 → EXTI寄存器组 → NVIC中断控制器 → 执行中断服务函数。把CubeMX配置的每个步骤和底层寄存器对应起来,搞懂中断到底是怎么工作的。