快捷搜索:  汽车  科技

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)首先下载OLED的店铺提供的参考官方的相关资料,如有需要,可以到下面的链接下载中景园的OLED屏的相关资料,资料相对比较完善,除了文档外,还提供了I2C接口,及SPI接口的不同的平台下的参考代码,供我们移植使用。3、工程代码移植GND:电源地VCC:电源正(3.3~5V)SCL:OLED 的D0 脚,在IIC 通信中为时钟管脚SDA:OLED 的D1 脚,在IIC 通信中为数据管脚2、GD32L233C-START DEMO板与OLED硬件电路连接GD32L233C-START DEMO板开放了许多的gpio供测试使用,本次代码移植采用的是PA1,PA2,移植的代码是通过GPIO硬件模拟仿真I2C时序来完成的显示代码的底层驱动。通过排线将模块的VCC,GND,SCL,SDA分别与DEMO板上的3.3V GND PA1,PA2相连,完成硬件电路的连接。

前面参加北京兆易创新和EEWORLD联合举办的测评活动,免费申请了GD32L233C-START DEMO板,今天刚好测试了下OLED的代码移植,分享下一起交流下,支持下国产32位MCU的发展。

1、0.96 OLED显示屏简介

0.96寸OLED分辨率是128*64;即OLED显示是128行*64列,采用IIC 接口方式进行通讯(默认地址0x78),显示屏模块如下图所示。0.96’OLED(4Pin)模块采用SSD1306 为驱动芯片,模块带有稳压芯片,支持软件模拟IIC 通讯与硬件IIC 通讯,上电自动复位,功耗低,自发光,自由视角。

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(1)

接口定义

GND:电源地
VCC:电源正(3.3~5V)
SCL:OLED 的D0 脚,在IIC 通信中为时钟管脚
SDA:OLED 的D1 脚,在IIC 通信中为数据管脚
2、GD32L233C-START DEMO板与OLED硬件电路连接

GD32L233C-START DEMO板开放了许多的gpio供测试使用,本次代码移植采用的是PA1,PA2,移植的代码是通过GPIO硬件模拟仿真I2C时序来完成的显示代码的底层驱动。

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(2)

通过排线将模块的VCC,GND,SCL,SDA分别与DEMO板上的3.3V GND PA1,PA2相连,完成硬件电路的连接。

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(3)

3、工程代码移植

首先下载OLED的店铺提供的参考官方的相关资料,如有需要,可以到下面的链接下载中景园的OLED屏的相关资料,资料相对比较完善,除了文档外,还提供了I2C接口,及SPI接口的不同的平台下的参考代码,供我们移植使用。

链接:https://pan.baidu.com/s/1gw5hNr5oGIVyxUZZb3189Q 提取码:gl0z

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(4)

找到 03-程序源码——>中景园IIC接口显示屏例程——>STM32例程——>01-0.96OLED显示屏STM32F103C8T6_IIC例程——>HARDWARE——>OLED,拷贝OLED该文件夹到自己新建的工程目录下。该文件夹下,提供了OLED的相关底层接口及相关显示驱动的代码,需要我们适当的修改就可以完成OLED的显示移植工作。

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(5)

1)新建工程,移植标准库文件,可以直接通过例程直接进行工程的移植,也可以参见其他小伙伴的帖子进行工程代码的移植,并将OLED文件夹放到工程目录下的HARDWARE文件夹下,并添加oled.c到工程中来,此处放到的是HARDWARE工程目录下,该文件下放置外设硬件资源的相关文件。工程目录如下图所示:

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(6)

同时注意,设置oled.h等的文件路径,如下图设置选择相应的文件夹即可:

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(7)

2)修改底层的GPIO相关的代码即可,应用层的相关代码无需修改。主要修改oled.h中的端口定义,以及oled.c中的OLED初始化中的关于GPIO的设置相关代码,如下

#ifndef __OLED_H #define __OLED_H #include "stdlib.h" #include "gd32l23x.h" #include "systick.h" typedef uint32_t u32; typedef uint16_t u16; typedef uint8_t u8; //-----------------OLED端口定义---------------- #define OLED_SCL_Clr() gpio_bit_reset(GPIOA GPIO_PIN_1)//SCL #define OLED_SCL_Set() gpio_bit_set(GPIOA GPIO_PIN_1) #define OLED_SDA_Clr() gpio_bit_reset(GPIOA GPIO_PIN_2)//DIN #define OLED_SDA_Set() gpio_bit_set(GPIOA GPIO_PIN_2) //剩余的无需修改 // ..... #endif

还需要修改oled.c中的OLED初始化中的关于GPIO的模式的设置部分,如下:

void OLED_Init(void) { /* 使能GPIOA时钟 */ rcu_periph_clock_enable(RCU_GPIOA); /* 配置端口模式 */ gpio_mode_set(GPIOA GPIO_MODE_OUTPUT GPIO_PUPD_PULLUP GPIO_PIN_1); gpio_output_options_set(GPIOA GPIO_OTYPE_PP GPIO_OSPEED_50MHZ GPIO_PIN_1); gpio_mode_set(GPIOA GPIO_MODE_OUTPUT GPIO_PUPD_PULLUP GPIO_PIN_2); gpio_output_options_set(GPIOA GPIO_OTYPE_PP GPIO_OSPEED_50MHZ GPIO_PIN_2); //下面的剩余无需改动 // .... }

3)接着在main.c中编写相应的测试代码即可完成相关的测试,移植的oled代码中,提供了一系列的应用层的显示驱动函数接口代码供用户调用,用于完成各种字符,汉字,数字,图片等的显示功能,如下

void OLED_ClearPoint(u8 x u8 y); void OLED_ColorTurn(u8 i); void OLED_DisplayTurn(u8 i); void OLED_DisPlay_On(void); void OLED_DisPlay_Off(void); void OLED_Refresh(void); void OLED_Clear(void); void OLED_DrawPoint(u8 x u8 y u8 t); void OLED_DrawLine(u8 x1 u8 y1 u8 x2 u8 y2 u8 mode); void OLED_DrawCircle(u8 x u8 y u8 r); void OLED_ShowChar(u8 x u8 y u8 chr u8 size1 u8 mode); void OLED_ShowChar6x8(u8 x u8 y u8 chr u8 mode); void OLED_ShowString(u8 x u8 y u8 *chr u8 size1 u8 mode); void OLED_ShowNum(u8 x u8 y u32 num u8 len u8 size1 u8 mode); void OLED_ShowChinese(u8 x u8 y u8 num u8 size1 u8 mode); void OLED_ScrollDisplay(u8 num u8 space u8 mode); void OLED_ShowPicture(u8 x u8 y u8 sizex u8 sizey u8 BMP[] u8 mode); void OLED_Init(void);

注意需要根据自己的需要,如显示汉字或图片,来制作自己的汉字库或图片库文件,上述链接中的文档中也提供了相应的字库的生成说明指导,比较方便。如本测试代码要显示北京兆易创新这几个汉字,需要自己生成汉字库,替代oledfont.h文件中对应的汉字库代码。

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(8)

在main.c中编写测试代码如下,可以完成相关的显示测试功能,非常的方便。

#include "gd32l23x.h" #include "systick.h" #include "oled.h" int main(void) { systick_config(); OLED_Init(); OLED_ColorTurn(0);//0正常显示,1 反色显示 OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示 while(1) { OLED_ShowChinese(8*2 0 0 16 1);//北 OLED_ShowChinese(8*4 0 1 16 1);//京 OLED_ShowChinese(8*6 0 2 16 1);//兆 OLED_ShowChinese(8*8 0 3 16 1);//易 OLED_ShowChinese(8*10 0 4 16 1);//创 OLED_ShowChinese(8*12 0 5 16 1);//新 OLED_ShowString(16 16 "EEWORLD & GD " 16 1); OLED_ShowString(8 32 "GD32L233C-START" 16 1); OLED_ShowString(20 48 "2022/02/03" 16 1); OLED_Refresh(); } }

4)编译,下载,显示结果如下:

gd32开发板调试(GD32L233C-START测评0.96OLED显示屏)(9)

5)总结

OLED的显示的代码移植并不复杂,只需要按照模块化的思维,移植底层驱动代码,修改与接口有关的相关硬件的配置,即可完成相应的功能代码的移植工作。代码移植是我们搞嵌入式开发必须要掌握的一种技能,掌握了移植的技巧,不同的平台间的切换也会自如些,开发的效率也会适当的得到一定的提高。

猜您喜欢: