一、GD32VW553 芯片介绍
GD32VW553 是兆易创新(GigaDevice)推出的一款基于 RISC-V 内核的 32 位微控制器(MCU),中电港萤火工场以此芯片为核心开发了开源硬件板 GD32VW553-IOT,该芯片凭借其出色的性能、丰富的资源和多样的接口,在物联网与智能设备领域具有广泛的应用潜力。
GD32VW553 芯片拥有较为充足的存储资源,其 FLASH 容量为 4096KB,SRAM 容量为 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 Builder:GD32MCU的集成开发环境,支持图形化配置、代码生成、工程编译和调试。
GD32 All-In-One Programmer:Introduction:GD32 All-In-One Programmer 是一款用于GD32系列MCU芯片的烧录工具。该软件支持多种接口(如串口、USB、GD ISP Bridge 等)和协议(如UART、I2C、OSPI、DFU、HID、CAN、LIN等)对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、视频测试-没有声音,具体修改可以点击视频链接观看
五、播放视频方法
- 将目标视频转换为128*64分辨率(有很多在线转换分辨率的免费网站大家可以找找看)-->>分辨率转换后视频逐帧转换为图片(博主自己做的脚本实现)-->>图片经过Img2Lcd批量转换为数组文件-->>所有数组文件合成为一个文件后添加到OLED_Data.c并且在OLED_Data.h做好每个数组的声明,逐帧调用每个oled图片函数调用相应图片数组,逐帧播放图片即可(耗时复杂操作博主自己做脚本快捷实现)。
- 逐帧转换图片,数组文件合并,数组合并进代码中都很麻烦,可以使用脚本完成,这些所有需要的软件和项目文件如果有朋友需要可以b站私信博主。
六、结束
这个开发板性能还可以,十几秒的视频播放很流畅,也不用外挂个存储芯片,还带wifi和蓝牙功能,下次再研究吧.
显示中文字符有点问题,因为我移植的是gb2312编码版本的驱动,大家用utf-8的应该可以解决。
感谢大家的观看,记得点个赞,谢谢啦。
移植自:江科大stm32oled-v2.0驱动_侵权请联系博主删除

