• 正文
  • 相关推荐
申请入驻 产业图谱

NXP FRDM-MCXA344 SH1106 OLED:GPIO模拟I2C驱动u8g2图形库教程

06/25 11:14
342
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

本套工程是基于 NXP FRDM-MCXA344 开发板打造的完整 OLED 图形演示方案,采用纯 GPIO 模拟 I2C 时序驱动 128×64 分辨率 SH1106 单色 OLED,原生集成 u8g2 开源图形库,无需占用硬件 I2C 外设,适配 Cortex-M33 内核 180MHz 主频 MCXA344 主控,可直接实现文字、几何绘图、动态波形、计数动画等嵌入式界面效果,配套串口调试、RGB 心跳 LED 指示,完整覆盖硬件接线、编译、烧录、调试全流程,适合 NXP MCXA 系列入门 GUI 开发学习。

不少嵌入式开发者在使用 MCXA 系列芯片做小型显示界面时,常会遇到硬件 I2C 端口被传感器占用、底层驱动适配繁琐、图形渲染缺少成熟库的问题,这个开源演示工程刚好解决以上痛点,仅依靠通用 GPIO 引脚就能完成屏幕驱动,降低硬件资源占用门槛。

资料获取:FRDM-MCXA344 OLED 显示演示项目

1. 项目完整功能特性

1.1 OLED 图形渲染能力

  1. 基础图元绘制:像素点、直线、矩形、圆形、空心 / 实心图形全覆盖;
  2. 多字体渲染:搭载 u8g2 内置多套字符字体,支持反色文字高亮显示;
  3. 动态动画效果:520ms 周期刷新正弦滚动波形、循环数值计数器、闪烁圆盘动画;
  4. 全屏缓冲模式:SH1106 专用全缓存驱动,画面刷新无撕裂。

1.2 辅助调试与状态指示功能

  1. 板载 RGB 红灯心跳闪烁,同步反映主循环运行状态;
  2. LPUART2 串口实时打印启动参数、I2C 引脚地址、运行日志,波特率固定 115200;
  3. 纯软件 I2C 通信方案,不依赖片上硬件 I2C 外设,引脚可灵活替换。

1.3 工程配套优势

  • 完全适配官方 MCUXpresso SDK,CMake 标准化构建,支持 VS Code 与 IDE 双环境开发;
  • 源码分层清晰,板级驱动、应用逻辑、图形库中间件完全解耦,移植难度低;
  • 兼容 LinkServer、J-Link、PEMicro 三类主流调试器,一键烧录断点调试。

2. 硬件物料与板载资源清单

2.1 必备硬件清单

器件名称 规格型号 数量 核心用途
主控开发板 NXP FRDM-MCXA344 1 块 180MHz Cortex-M33 主控,提供 GPIO、串口、调试接口
OLED 显示屏 SH1106 128×64 I2C 单色屏 1 块 图形显示输出
连接线 母对母杜邦线 4 根 OLED 与开发板引脚互联
供电调试线 Micro-USB 数据线 1 根 开发板供电、CMSIS-DAP 虚拟串口、SWD 调试

2.2 FRDM-MCXA344 板载关键资源

  1. RGB 三色 LED:红 P3_18、绿 P3_19、蓝 P3_21,工程默认红色做运行心跳;
  2. 用户按键:SW2 (P1_7)、SW3 (P0_6),预留拓展交互逻辑;
  3. 调试串口 LPUART2:TX 引脚 P2_2、RX 引脚 P2_3,固定 115200 8N1;
  4. 内置 CMSIS-DAP 调试器,无需额外下载器,支持 SWD 在线调试。

3. 硬件接线规范

3.1 OLED 屏 I2C 引脚对应关系

SH1106 屏幕共 4 个引脚,严格按照下表对接开发板 Arduino 兼容接口:

  1. VCC → 开发板 3.3V 电源(禁止接 5V,避免屏幕烧毁);
  2. GND → 开发板公共 GND;
  3. SDA 数据引脚 → P3_27(板载 Pin52);
  4. SCL 时钟引脚 → P3_28(板载 Pin51)。

3.2 I2C 通信关键参数

  • 设备写地址:0x78,对应 7 位标准 I2C 地址 0x3C;
  • 软件 I2C 标准速率:100kHz;
  • 引脚电气模式:推挽输出,空闲默认高电平
  • 延时基准:回调函数参数 arg_int=4 对应约 1μs 时序延时。

4. 工程目录结构

工程根目录frdmmcxa344_oled_gpio_u8g2_vsc采用嵌入式标准分层设计,各文件夹职责独立,无代码混杂:

  1. applications:应用业务层
    • main.c:程序入口,OLED 画面刷新、动画循环、LED 心跳主逻辑;
    • app.h:LED 引脚、全局参数宏定义。
  2. board:板级支持包 BSP
    • board.c/h:板载 LED、串口初始化封装
    • pin_mux、clock_config:引脚复用、180MHz 系统时钟配置文件(MCUXpresso 自动生成);
    • hardware_init.c:整机硬件初始化统一入口。
  3. devices/MCX/MCXA344:芯片底层启动文件包含复位向量启动代码、系统时钟初始化、寄存器头文件、GCC 链接脚本,规划 256KB Flash 与 48KB 基础 SRAM 内存分区。
  4. drivers:MCUX SDK 底层驱动GPIO、LPUART、PORT 端口驱动,提供底层硬件操作接口。
  5. middleware/u8g2:图形中间件csrc 文件夹存放完整 u8g2 源码(132 个 C 文件),CMake 自动批量编译入库。
  6. 配置目录.vscode、CMake 编译脚本:编辑器配置、编译预设、一键构建 shell 脚本。

内存分区参考(量化参数,提升专业度)

  • Flash:256KB(0x00000000~0x0003FFFF),存储程序代码、常量字库;
  • SRAM:48KB(0x20000000~0x2000BFFF),运行变量、堆栈缓存;
  • SRAMX0:8KB 附加高速内存,可用于图像缓存拓展。

5. 软件环境依赖与版本要求

所有工具均有最低版本限制,版本过低会出现 SDK 适配、编译链兼容问题:

工具 / 组件 最低版本 核心作用
MCUXpresso IDE 25.6 及以上 官方集成开发环境,内置 ARM GCC 工具链
ARM GCC 工具链 14.2+ arm-none-eabi 交叉编译工具
CMake 3.10 及以上 跨平台构建系统
Ninja 任意稳定版 高速编译生成器
MCUXpresso SDK 2026.03.00 MCXA344 芯片官方驱动包
VS Code + MCUXpresso 插件 最新稳定版 轻量化代码编辑、一键调试

环境配置要点:需在系统变量中配置 ARM GCC 路径、SDK 根目录,项目 mcux_include.json 会自动读取路径参数,无需手动修改编译脚本。

6. 三种编译构建实操步骤

方案 1:VS Code 开发(推荐,日常调试首选)

  1. VS Code 打开项目总文件夹,加载 MCUXpresso 官方扩展;
  2. 快捷键 Ctrl+Shift+P 调出命令面板,选择CMake: Select Configure Preset
  3. 选中 debug 调试预设,完成工程配置;
  4. 点击底部状态栏 Build 按钮,或按下 F7 一键编译。

方案 2:命令行一键脚本构建(批量编译、自动化测试场景)

  1. 终端赋予脚本执行权限:chmod +x build_debug.sh
  2. 直接运行脚本自动完成配置、编译:./build_debug.sh

方案 3:手动 CMake 原生编译(自定义编译参数场景)

  1. 新建 debug 构建目录并进入:mkdir -p debug && cd debug
  2. 执行 CMake 配置,指定 GCC 工具链文件;
  3. Ninja 指令编译,输出固件文件。

编译输出文件说明

  1. gpio_led_output.elf:带调试信息可执行文件,用于在线断点调试;
  2. gpio_led_output.bin:纯二进制固件,可直接烧录 Flash;
  3. output.map:链接内存映射文件,用于排查堆栈溢出、内存占用问题。

7. 烧录与串口调试实操流程

7.1 程序烧录调试操作

  1. Micro-USB 连接开发板与电脑,板载 CMSIS-DAP 自动识别;
  2. VS Code 按 F5 进入调试模式,支持两种调试配置:
    • MCUXpresso Debug (LinkServer):使用板载自带调试器,零额外硬件;
    • MCUXpresso Debug (J-Link):外接 Segger 仿真器,适配批量量产调试;
  3. 工具自动完成编译、烧录、启动,程序断点默认停在 main 函数入口。

7.2 串口监视参数与输出示例

串口固定参数:波特率 115200、8 数据位、1 停止位、无校验、无硬件流控。

设备上电后串口自动打印初始化信息:

FRDM-MCXA344 SH1106 OLED Demo SW I2C: SDA=P3_27, SCL=P3_28, Addr=0x78

8. 核心技术实现细节

8.1 u8g2 图形库集成方式

采用源码内置集成,不使用静态库文件,CMake 通过全局匹配批量导入所有库文件:

file(GLOB U8G2_SOURCES "${ProjDirPath}/middleware/u8g2/csrc/*.c")
target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${U8G2_SOURCES})

屏幕初始化核心代码,适配软件模拟 I2C:

u8g2_t u8g2;
u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sw_i2c, gpio_and_delay_cb);
u8x8_SetI2CAddress(&u8g2.u8x8, 0x78);
u8g2_InitDisplay(&u8g2);
u8g2_SetPowerSave(&u8g2, 0);

其中gpio_and_delay_cb为自定义回调函数,实现 GPIO 电平翻转与微秒级延时,支撑软件 I2C 时序。

8.2 系统时钟配置

系统主时钟采用 FRO_HF 高速振荡器,主频稳定 180MHz:

  • CPU 主时钟:180MHz;
  • 外设总线时钟:90MHz;
  • 跟踪调试时钟:90MHz;
  • Flash 读写等待周期配置 4 个,匹配 180MHz 高频运行需求,避免读取数据出错。

9. OLED 屏幕显示效果分两类展示

9.1 开机静态画面

上电后固定显示硬件参数信息,包含开发板型号、屏幕型号、I2C 引脚、设备地址,搭配空心圆形、反色文字、填充矩形作为静态 UI 演示。

9.2 动态循环动画画面

每 520ms 刷新一帧,循环切换三组动态效果:

  1. 横向滚动正弦波形曲线;
  2. 自增循环数字计数器;
  3. 交替闪烁实心 / 空心圆盘;

页面底部固定显示 u8g2 版本标识页脚。

10. 项目开源许可证说明

  1. 工程应用业务代码:基于 NXP MCUXpresso SDK,遵循 BSD 3-Clause 开源协议;
  2. u8g2 图形库源码:遵循 BSD 2-Clause 开源协议;

完整授权文本可查阅各 C 源码文件头部注释,商用、二次修改均无严格限制。

11. 常见实操问答

Q1:硬件 I2C 被占用,能不能更换其他 GPIO 做模拟 I2C?

A:可以,仅需修改gpio_and_delay_cb回调内 SDA、SCL 引脚定义,同步更新串口打印引脚信息即可,无需改动 u8g2 底层渲染代码。

Q2:屏幕出现花屏、无显示是什么原因?

A:优先排查三点:①OLED VCC 切勿接 5V;②SDA/SCL 引脚接线颠倒;③I2C 地址 0x78 配置错误,SH1106 部分批次地址为 0x7A,可修改初始化函数地址测试。

Q3:编译时提示 u8g2 文件找不到如何解决?

A:检查 middleware/u8g2/csrc 目录源码完整,确认 CMake 文件中 U8G2_SOURCES 路径匹配项目根目录,重新执行 CMake 配置。

Q4:动画刷新卡顿怎么优化?

A:1. 适当降低动画刷新周期;2. 裁剪 u8g2 未使用字体减少 Flash 占用;3. 优化系统总线时钟,保证 I2C 时序稳定 100kHz。

这套 FRDM-MCXA344 OLED 演示工程是一套完整可落地的 NXP MCXA 系列 GUI 入门模板,软件 I2C 方案大幅释放硬件外设资源,u8g2 图形库省去自主绘图驱动开发成本,配套完整编译、调试、串口日志体系,不管是学生学习 Cortex-M33 嵌入式图形开发,还是产品前期界面原型验证都十分适用。整套工程分层规范、参数量化清晰,可直接基于此项目拓展温湿度显示、按键交互、数据曲线监测等工业、消费类小型显示屏应用。

相关推荐