文章目录
上上周发了篇文章介绍了一下用 CH32V003 做过的项目(那些年用 7 毛钱单片机 CH32V003 做过的 DIY 项目),总的感觉用起来还是很舒服的,不过最近也了解到沁恒推出了差不多加量不加价的 CH32V006,资源不止翻倍, 价格在某宝上也只要 8 毛钱一颗。
稍微研究了下,发现 CH32V006F8P6 和我在用的 TSSOP20 封装的 CH32V003F4P6,可以算是能 Pin2Pin 替换,这连开发板都可以直接用之前自己画的 V003 的开发板 PCB 😃。
0.96 寸 TFT LCD 驱动实测
之前用 CH32V003 的时候,即使它有 SPI 总线,但是 16KB Flash 实在有些捉襟见肘,即使驱动像 0.96 寸 TFT LCD 这样的小尺寸屏幕,分辨率为 160x80,色深为 16 位,一张全屏背景图就要消耗 160 * 80 * 2 = 25,600 bytes
,已经超过了 Flash 的容量大小。但是换成 CH32V006 就不一样了,得益于 62KB 的 Flash,一张全彩全屏背景图也轻松拿下。
另外在编写显示驱动时,也可以拥有更大的缓存区,之前分享 CH32V003 字符显示驱动时也提到,一个 128x64 像素的单色缓存区也要占用 1KB 内存,直接占了 V003 一半的内存,这时 CH32V006 的 8KB 内存就显得充裕很多,即使使用 2KB 来作为显示缓存区也够用。
CH32V006 介绍
官网链接:
https://www.wch.cn/products/CH32V006.html
CH32V006是"扒角"系列工业级通用MCU,在“吾毛”CH32V003基础上容量加倍,最高65KB Flash,支持48MHz系统主频,具有2~5V宽工作电压、单线调试、低功耗等特点。
在官方查看 CH32V006 的架构图时才发现它还支持 Touchkey,这感觉可以用它做点有意思的东西了,例如之前搞的 PCB 键盘,是不是也可以用这个搞个按键数量少的版本?
相比 CH32V003,V006 最大的优势就是 Flash 和 SRAM 翻倍了不止,可供代码使用的 Code Flash 有 62KB,SRAM 有 8KB,差不多都相当于 V003 的 4 倍了。
型号列表中仍然有我比较喜欢用的 TSSOP20 封装,好焊接~
ST7735 TFT LCD 字符显示驱动
ST7735 的驱动比较简单,照着 Adafruit_ST7735 的代码转换一下就可以,我也在 GitHub 上找到一个开源的 CH32V003-ST7735 驱动,稍微改了下适配 CH32V006。
为了在显示字符时,仍然保持背景,在显示每个字符时,先将对应区域的背景图数据从背景图片数据中复制过来,再根据字体数据的点阵填充缓存区,然后使用 SPI 传输到 SS7735 控制器。
优化传输,SPI + DMA 配置
Image Converter 工具地址: https://lvgl.io/tools/imageconverter
图片的字节数组数据,是直接用了 LVGL 的 Image Conveter 工具生成的,但是有个问题,它预期是在通过 SPI 传输时,是按 16 位 2 个字节的方式进行传输的,因此在配置 DMA 通道时,需要将 DMA 单次传输数据大小改为 HalfWord 也就是 16 位,要不然显示的图片会是很奇怪的颜色。
刷新率计算
前面视频中演示刷新三行字,背景保持不变,加上字符串格式化、字模图片处理时间,刷新率可以到 100 FPS。
小字体为 8x16,大字体为 16x32,每帧 SPI 传输数据量大概是:
8 * 16 * 2 * 13 + 16 * 32 * 2 * 4 = 7,424 bytes
SPI 总线速度为 24Mbps,那么实际传输时间差不多是 7424 * 8 / 24000000 * 1000 = 2.475 ms
,看样子还是有不少时间在数据准备工作上。
不过在这个速率下,屏幕刷新时间基本上就不是瓶颈了,如果简化字符串格式化相关代码,可能还可以更快。
小结
相对 V003,CH32V006 以差不多的价格,可以提供四倍资源,这在开发应用上就更游刃有余了,不再只能配合 0.96 OLED 这种单色屏幕,可以尝试大屏、彩屏了,可以让界面更加丰富。
另外 TSSOP20 封装 可以 Pin 2 Pin 替换 CH32V003,这对于升级原有项目也相当方便了,感觉后续搞 DIY 项目都可以换 CH32V006 了 😃。
0 条评论。