在线时间4072 小时
UID3441752
注册时间2017-11-21
NXP金币750299
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32091
- 最后登录
- 2024-5-8
|
如何移植 U8g2 到 LPC55(S)6x 并驱动单色 OLED 屏幕
1 LPC55(S)6x 和 U8g2 简介
LPC55(S)6x 是一款基于 Arm® Cortex®-M33 内核的 MCU。该 MCU 集成有:
• Casper 安全加速器
• 最大 320 k Bytes 片上 RAM
• 最大 640 k Bytes 片上 Flash
• PRINCE 模块支持加密固件边解密边执行
• 五个通用定时器 CTIMER
• 一个状态可配置定时器 SCTimer/PWM
• 一个看门狗定时器 WWDT
• 八个 Flexcomm 串行接口(可以任意配置为 UART,SPI,I2C 或者 I2S)
• 一路 50 MHz 高速 SPI
• 一路 16 位-1.0 Msps 采样率的 ADC
• 片上集成温度传感器
U8g2 是用于嵌入式设备的单色图形库。U8g2 支持单色 OLED 和 LCD,其中包括以下控制器:SSD1305、SSD1306、SSD1309、SSD1322、 SSD1325、SSD1327、SSD1329、SSD1606、SSD1607、SH1106、SH1107、SH1108、SH1122、T6963、RA8835、LC7981、PCD8544、PCF8812、HX1230、 UC1601、UC1604、UC1608、UC1610、UC1611、UC1701、ST7565、ST7567、ST7588、ST75256、NT 7534, IST3020, ST7920, LD7032, KS0108, SED1520, SBN1661, IL3820, MAX7219(请参阅此处查看完整列表)。
U8g2 还包括 U8x8 库:
• U8g2
— 包括所有图形程序(线/框/圆绘图)。
— 支持多种字体,字体高度没有限制。
— 需要微控制器中的一些内存来渲染显示。
• U8x8
— 仅支持文本输出(字符)设备。
— 仅允许适合 8×8 像素网格的字体。
— 直接写到显示屏上,微控制器中无需缓冲。
请用户查阅 U8g2 的 LICENSE:https://github.com/olikraus/u8g2/blob/master/LICENSE。
U8g2 是根据新的 BSD 许可证(双条款 BSD 许可证)的条款进行许可的。
本应用笔记基于 LPC55(S)6x MCU 移植 U8g2 库来支持一个分辨率为 128x64 的单色 OLED 屏幕,OLED 的驱动 IC 为 SSD1306。
2 屏幕介绍
市面上有很多 128 × 64 分辨率的 OLED 屏幕模组非常容易购买,比如在淘宝或者亚马逊上搜索 “OLED 0.96 SSD1306”就可以
搜索到类似 图 1 的 OLED 屏幕模组。
表 1. SSD1306 MCU 控制协议配置引脚
1. 0 is connected to Vss
2. 1 is connected to VDD
通常 MCU 驱动 SSD1306 的接口为 I2C,三线 SPI 或者四线 SPI。开发者需要根据自己实际的接口需求调整模组或者 OLED 屏幕上 BS0、BS1 和 BS2 引脚的电平状态,来配置 OLED 屏幕的驱动接口,具体见 表 1。具体的时序控制协议,可以参考 SSD1306 的数据手册 SSD1306。
3 LPC55S69-EVK 连接 OLED 屏幕介绍
我们可以利用 LPC55S69 的 Flexcomm 功能与 OLED 屏幕进行通信。
• 如果 OLED 屏幕接口是 I2C 接口,我们就把 Flexcomm 配置为 I2C。
• 如果是 SPI 接口的 OLED 屏幕,我们就把 Flexcomm 配置为 SPI。
在 LPC55S69-EVK 开发板上,我们使用 Flexcomm4 作为 I2C 接口连接 I2C 接口的 OLED 屏幕,使用高速 SPI 接口连接 SPI 接口的 OLED 屏幕。
3.1 LPC55S69-EVK 评估板
图 2 是官方针对 LPC55(S)6x 系列 MCU 的评估板 LPC55S69-EVK。
图 2 中标识了:
• Flexcomm4 的位置即 P17 连接器的 D15 和 D14
• 高速 SPI 的位置即 P17 的 D13、D12、D11 和 D10
我们也可以利用 P17 上的 AVDD 和 GND 对 OLED 屏幕模组供电。
3.2 LPC55S69-EVK 评估板连接 I2C 模式下的 OLED 模组
图 3 展示 I2C 接口的 OLED 模组如何连接到 LPC55S69-EVK。
3.3 LPC55S69-EVK 评估板连接 SPI 模式下的 OLED 模组
图 4 展示 SPI 接口的 OLED 模组如何连接到 LPC55S69-EVK。
4 U8g2 使用和移植介绍
4.1 如何使用 U8g2
U8g2 支持 C 语言开发,适用于任何 MCU。其在应用中的设置顺序如下:
- u8g2_t u8g2; // a structure which will contain all the data for one display
- ...
- u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, U8G2_R0, u8x8_byte_sw_i2c,
- u8x8_gpio_and_delay_lpc11u3x); // init u8g2 structure
- u8g2_InitDisplay(&u8g2); // send init sequence to the display, display is in sleep mode after this,
- u8g2_SetPowerSave(&u8g2, 0); // wake up display
复制代码 在初始化 u8g2 结构体的 API 函数 u8g2_Setup_xxxx_xxx_128x64_noname()中,需要设置四个参数:
1. U8g2:指向一个空的 u8g2 结构体的指针。
2. 旋转:设置屏幕旋转的方向,见 表 2。
3. 按字节发送和接收数据的 API,可以用现有的驱动程序,也可以是用户自定义的函数。见 表 3。
4. 底层的延时以及 GPIO 操作的 API,这是一个用户自定义的函数
表 2. U8g2 初始化设置函数第二个参数选择
表 3. U8g2 初始化设置函数第三个参数选择
目标显示器要支持这些接口,例如,如果显示器不支持 SPI 接口,则不能使用 SPI 的发送函数 API。
4.2 如何利用 SDK 的 API 支持 U8g2
一般来讲,可以利用硬件 I2C,SPI 或者利用 GPIO 模拟 I2C,SPI 的方式驱动 OLED,所以在利用 SDK 的 API 支持 U8g2 方面,
我们基于 SDK 的 API 提供了软件 GPIO 模拟 I2C,SPI 方式以及硬件 I2C,SPI 方式的驱动例程。
用户只需要关心 driver_oled_ssd1306.c 和.h 文件里的宏定义即可。
根据自己驱动方式的需求,修改以下宏定义为 1 即可。
- #define SSD1306_USE_I2C_GPIO 0u
- #define SSD1306_USE_I2C_HW 0u
- #define SSD1306_USE_SPI_GPIO 0u
- #define SSD1306_USE_SPI_HW 0u
复制代码 如果用户是移植到自己的硬件平台上,还需要考虑对应 IO 口功能的配置问题,所以就需要修改 driver_oled_ssd1306.h 里的对应
功能 IO 口的配置,如果使用硬件 I2C 或者 SPI 方式,还要考虑 driver_oled_ssd1306.h 里针对 I2C 以及 SPI 端口和波特率的配置。
如果用户需要移植到其它平台可以参考本 AN 提供的例程中 driver_oled_ssd1306.c 文件中的 API。
• GPIO 口模拟 I2C 的 API
- uint8_t u8x8_gpio_and_delay_lpc55(u8x8_t *u8x8, uint8_t msg, uint8_t arguing, void *arg_ptr)
复制代码 • GPIO 口模拟 SPI 的 API
- uint8_t u8x8_gpio_and_delay_lpc55(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
复制代码 • 硬件 I2C 的 API
- uint8_t u8x8_byte_hw_i2c_lpc55(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
- uint8_t u8x8_gpio_and_delay_lpc55(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
复制代码 • 硬件 SPI 的 API
- uint8_t u8x8_byte_4wire_hw_spi_lpc55(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
- uint8_t u8x8_gpio_and_delay_lpc55(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
复制代码 u8x8_gpio_and_delay_lpc55()是基础 API,包含了 GPIO 功能的初始化以及必要的延时函数。
5 KEIL,IAR 和 MCUXpresso 下调试 U8g2
下载工程前,需要将 LPC55S69-EVK 开发板的 USB 调试用接口(P6)连接到 PC。
5.1 KEIL MDK 环境下调试
KEIL MDK 的工程在路径 lpc55s69_evk_u8g2_mdk 下。
打开工程后,按
编译工程,编译成功后按
下载程序到开发板。
5.2 IAR 环境下调试
IAR 的工程在路径 lpc55s69_evk_u8g2_iar 下。打开工程后,按 F7 编译工程,编译成功后 按 F8 下载程序到开发板。
5.3 MCUXpresso 环境下调试
MCUXpresso 环境下需要用户导入工程 lpc55s69_evk_u8g2_mcux.zip。
导入工程后,按
编译工程,编译成功后按
下载程序到开发板。
图 5 显示了最终效果。
6 结论
U8g2 是一种非常适合嵌入式平台的单色显示器驱动库,配合 LPC55Sxx 系列微控制器的 150MHz 高主频,高速 SPI 以及大 RAM
的特点可以有更好的发挥。
详细内容如下:
点击查看详情>>
|
|