GD32VW553-IOT 驱动0.96寸oled屏幕【字母数字图片视频测试】
分享作者:kkun
作者昵称:玉书前.
评测品牌:萤火工场
评测型号:GD32VW553-IOT
发布时间:2025-07-15 09:37:35
0
前言
第一次用gd的芯片感觉flash大小还不错,试试整一个oled播放bedapple,没什么难度哈,大佬轻喷,出处声明:移植自江科大stm32的0.96寸oled屏幕驱动oled-v2.0
开源口碑分享内容

一、GD32VW553 芯片介绍

GD32VW553 是兆易创新(GigaDevice)推出的一款基于 RISC-V 内核的 32 位微控制器(MCU),中电港萤火工场以此芯片为核心开发了开源硬件板 GD32VW553-IOT,该芯片凭借其出色的性能、丰富的资源和多样的接口,在物联网与智能设备领域具有广泛的应用潜力。

GD32VW553 芯片拥有较为充足的存储资源,其 FLASH 容量为 4096KBSRAM 容量为 320KB,能满足多种程序运行和数据存储的需求。在时钟与定时器方面,该芯片配备了丰富的种类和数量:

•2 个 16 位通用定时器、2 个 32 位通用定时器、1 个 16 位高级定时器、1 个 16 位基本定时器;

•1 个 64 位系统滴答定时器(SysTick);

•2 个看门狗定时器和 1 个实时时钟(RTC),可满足不同场景下的定时、计数和时钟同步需求。

•接口资源包括:

•1 个 USART 接口、2 个 UART 接口,便于进行串行通信;

•2 个 I2C 接口、1 个 SPI 接口、1 个 QSPI 接口,支持多种串行外设互联;

•1 个 Wi-Fi 模块和 1 个 BLE5.2 模块,具备强大的无线连接能力,适合物联网相关应用;

•1 个 ADC 单元,包含 9 个通道,可实现模拟信号到数字信号的转换。

二、关于开发环境

GD32 Embedded BuilderGD32MCU的集成开发环境,支持图形化配置、代码生成、工程编译和调试。

GD32 All-In-One ProgrammerIntroductionGD32 All-In-One Programmer 是一款用于GD32系列MCU芯片的烧录工具。该软件支持多种接口(如串口、USBGD ISP Bridge 等)和协议(如UARTI2COSPIDFUHIDCANLIN等)对GD32微控制器进行固件下载、芯片擦除、读写Flash、设置选项字节等操作,适用于开发、测试和批量生产场景。

用到的开发和烧录软件就上面两个了。

GD32VW5开发软件下载链接: https://www.gd32mcu.com/cn/download/7?kw=GD32VW5

具体使用方法已经有其他的用户分享过了,这就不过多赘述了哈,这一段跳过。

三、移植修改部分

主要修改oled.c和oled.h部分

       1、gd好像没有GPIO_WriteBit();那么我们自己整一个

void gpio_write_bit(uint32_t gpio_periph, uint32_t pin, uint8_t value)

{

if (value != 0) {

gpio_bit_set(gpio_periph, pin); // 使用标准库函数设置高电平

}

else {

gpio_bit_reset(gpio_periph, pin); // 使用标准库函数设置低电平

}

}

      2、 不知道数学库为什么用不了四舍五入和正切函数,自己再写一个

// 手动实现四舍五入函数(替代round)

double round(double x)

{

return (x > 0) ? (x + 0.5) : (x - 0.5);

}


// 手动实现atan2(计算y/x的反正切,简化版)

// 仅支持第一象限,如需完整功能需补充其他象限逻辑

double atan2(double y, double x)

{

if (x == 0.0) {

return M_PI / 2.0; // 90度(简化处理)

}

double ratio = y / x;

// 泰勒展开近似(小角度):atan(x) ≈ x - x^3/3 + x^5/5

return ratio - (ratio * ratio * ratio) / 3.0 + (ratio * ratio * ratio * ratio * ratio) / 5.0;

}

       3、把gpio的使用和配置都改成gd的方法

void OLED_W_SCL(uint8_t BitValue)

{

/*根据BitValue的值,将SCL置高电平或者低电平*/

//GPIO_WriteBit(GPIOB, GPIO_PIN_3, (BitAction)BitValue);

gpio_write_bit(GPIOB, GPIO_PIN_3, BitValue);


/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/

//...

}


void OLED_W_SDA(uint8_t BitValue)

{

/*根据BitValue的值,将SDA置高电平或者低电平*/

//GPIO_WriteBit(GPIOB, GPIO_PIN_4, (BitAction)BitValue);

gpio_write_bit(GPIOB, GPIO_PIN_4, BitValue);

/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/

//...

}


void OLED_GPIO_Init(void)

{

uint32_t i, j;


/*在初始化前,加入适量延时,待OLED供电稳定*/

for (i = 0; i < 1000; i ++)

{

for (j = 0; j < 1000; j ++);

}

/*将SCL和SDA引脚初始化为开漏模式*/

rcu_periph_clock_enable(RCU_GPIOB);

gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3|GPIO_PIN_4);

gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_MAX, GPIO_PIN_3|GPIO_PIN_4);


/*释放SCL和SDA*/

OLED_W_SCL(1);

OLED_W_SDA(1);

}

四、开始使用咯

       1、使用方法和stm32版一样的,下面是测试页面截图

       2、视频测试-没有声音,具体修改可以点击视频链接观看

五、播放视频方法

  1. 将目标视频转换为128*64分辨率(有很多在线转换分辨率的免费网站大家可以找找看)-->>分辨率转换后视频逐帧转换为图片(博主自己做的脚本实现)-->>图片经过Img2Lcd批量转换为数组文件-->>所有数组文件合成为一个文件后添加到OLED_Data.c并且在OLED_Data.h做好每个数组的声明,逐帧调用每个oled图片函数调用相应图片数组,逐帧播放图片即可(耗时复杂操作博主自己做脚本快捷实现)。
  2. 逐帧转换图片,数组文件合并,数组合并进代码中都很麻烦,可以使用脚本完成,这些所有需要的软件和项目文件如果有朋友需要可以b站私信博主。

六、结束

这个开发板性能还可以,十几秒的视频播放很流畅,也不用外挂个存储芯片,还带wifi和蓝牙功能,下次再研究吧.

显示中文字符有点问题,因为我移植的是gb2312编码版本的驱动,大家用utf-8的应该可以解决。

感谢大家的观看,记得点个赞,谢谢啦。

移植自:江科大stm32oled-v2.0驱动_侵权请联系博主删除

全部评论
暂无评论
0/144