【沁恒微CH32V307评估板试用体验】移植开源u8g2,实现动态图像显示 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

[文章]

【沁恒微CH32V307评估板试用体验】移植开源u8g2,实现动态图像显示

前言:看到坛友发了关于u8g2移植的帖子,这是啥,于是马上来学习一下,感谢坛友的分享。从失败到成功,一次一次地实验,终于成功了。

首先,了解u8g2是什么?网上查了一下,这个资料也不少。大家可以自行查看,我主要看了一篇移植u8g2单色图形库驱动OLED。然后参考坛友硬件I2C移植U8g2——OLED:SSD1306这篇帖子

其次,搭建CH32V307关于u8g2的工程,我还是从I2C_7bit_Mode这个例程出发,修改程序,提取增加代码。具体步骤如下:
  • 下载u8g2开源工程代码,如图1所示。
u8g2-github.png
图1 下载github开源代码
  • I2C_7bit_Mode拷贝一份放入同级目录下,重新命名一下I2C_7bit_Mode-demo。
  • 拷贝u8g2-master目录下的csrc目录到新建的I2C_7bit_Mode-demo目录下,如图2和图3所示。
u8g2-source.png
图2 拷贝csrc
u8g2-csrc.png
图3 最后代码目录

第三步,删除u8g2的csrc目录下与ssd1306无关的代码,减少代码量。
  • csrc目录下u8x8_d_xxxxx_xxxx_xxx.c类型的文件中只保留u8x8_d_ssd1306_128x64_noname.c这个文件,其他文件都保留。如图4所示。
保留文件.png
图4 保留的文件
  • u8g2_d_setup.c只保留u8g2_Setup_ssd1306_i2c_128x64_noname_f这个函数,其他都删掉即可。如图5所示。
d-setup.png
图5 d-setup文件修改
  • u8g2_d_memory.c只保留u8g2_m_16_8_f这个函数,如图6所示。
d-memory.png
图6 d-memory修改

第四步,修改增加代码,参考坛友刘建华帖子自己进行整合。工程代码中User目录如图7所示。
User增加.png
图7 User目录下修改增加
代码不贴了,附录有代码。贴一下main函数吧,如下所示。
  1. #include "debug.h"
  2. #include "u8g2.h"
  3. #include "oled.h"

  4. int main(void)
  5. {
  6. u8g2_t u8g2;
  7. int nTemp = 0;
  8. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  9. Delay_Init();
  10. USART_Printf_Init(115200);
  11. printf("SystemClk:%drn",SystemCoreClock);
  12. printf("This is printf examplern");
  13. u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_hw_i2c,u8x8_gpio_and_delay);//初始化u8g2结构体
  14. u8g2_InitDisplay(&u8g2); // 根据所选的芯片进行初始化工作,初始化完成后,显示器处于关闭状态
  15. u8g2_SetPowerSave(&u8g2, 0); // 打开显示器
  16. u8g2_ClearBuffer(&u8g2);
  17. while(1)
  18. {
  19. u8g2_ClearBuffer(&u8g2);//清空缓冲区的内容
  20. if(++nTemp>=32) nTemp=1;
  21. u8g2_DrawCircle(&u8g2, 64, 32, nTemp, U8G2_DRAW_ALL);//画圆
  22. u8g2_DrawCircle(&u8g2, 32, 32, nTemp, U8G2_DRAW_ALL);//画圆
  23. u8g2_DrawCircle(&u8g2, 96, 32, nTemp, U8G2_DRAW_ALL);//画圆
  24. u8g2_SendBuffer(&u8g2);//绘制缓冲区的内容
  25. }
  26. }
第五,总结一下:开始将csrc目录拷贝到了User目录下,应该也可以了,但需要修改包含各种,改了好几遍都不行,总是提示各种错误,后面直接拷贝到与User同目录下了,这次修改一下错误的代码,编译成功了。对MSR还没太多的研究,因此只能用最笨的方法试  。


回帖(7)

lingxin-yuhe

2022-6-24 12:26:39
最后一字是“试”,经过不停的尝试肯定有个解决办法。
2

dianzi

2022-6-24 17:41:26
这个动态效果很丝滑啊
1
  • lingxin-yuhe: 用的u8g2,大家说好用,我就拿来测试一下。感觉不错。

华仔stm32

2022-8-13 23:07:42
图像很丝滑,不错不错!
1

硬件工程师1

2023-3-10 09:39:50
这个可以对标STM32?
2
  • lingxin-yuhe: 我觉得可以,U8G2是个开源的库,拿到STM32上用应该也可以。后面我试一下,再来明确答复您。
  • lingxin-yuhe: 因手里没stm32的开发板,目前还做不了测试。刚刚搜了一下stm32 u8g2好多电子爱好者已经完美适配过了,您可以搜一下,进行测试。

更多回帖

×
发帖