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 通讯,上电自动复位,功耗低,自发光,自由视角。
接口定义
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相连,完成硬件电路的连接。
3、工程代码移植
首先下载OLED的店铺提供的参考官方的相关资料,如有需要,可以到下面的链接下载中景园的OLED屏的相关资料,资料相对比较完善,除了文档外,还提供了I2C接口,及SPI接口的不同的平台下的参考代码,供我们移植使用。
链接:https://pan.baidu.com/s/1gw5hNr5oGIVyxUZZb3189Q 提取码:gl0z
找到 03-程序源码——>中景园IIC接口显示屏例程——>STM32例程——>01-0.96OLED显示屏STM32F103C8T6_IIC例程——>HARDWARE——>OLED,拷贝OLED该文件夹到自己新建的工程目录下。该文件夹下,提供了OLED的相关底层接口及相关显示驱动的代码,需要我们适当的修改就可以完成OLED的显示移植工作。
1)新建工程,移植标准库文件,可以直接通过例程直接进行工程的移植,也可以参见其他小伙伴的帖子进行工程代码的移植,并将OLED文件夹放到工程目录下的HARDWARE文件夹下,并添加oled.c到工程中来,此处放到的是HARDWARE工程目录下,该文件下放置外设硬件资源的相关文件。工程目录如下图所示:
同时注意,设置oled.h等的文件路径,如下图设置选择相应的文件夹即可:
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文件中对应的汉字库代码。
在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)编译,下载,显示结果如下:
5)总结
OLED的显示的代码移植并不复杂,只需要按照模块化的思维,移植底层驱动代码,修改与接口有关的相关硬件的配置,即可完成相应的功能代码的移植工作。代码移植是我们搞嵌入式开发必须要掌握的一种技能,掌握了移植的技巧,不同的平台间的切换也会自如些,开发的效率也会适当的得到一定的提高。