本帖最后由 wadeRen 于 2022-3-22 22:41 编辑
[TOC]
[文章导航]
GD32L233C-START评测——01.开箱、开发包
GD32L233C-START评测——02_1.搭建开发环境、简单调试
GD32L233C-START评测——02_2.搭建开发环境、简单调试
GD32L233C-START评测——03_1.CoreMark测试、RT-Thread-Nano移植
GD32L233C-START评测——03_2.CoreMark测试、RT-Thread-Nano移植
GD32L233C-START评测——04.模拟IIC与硬件IIC驱动OLED对比
GD32L233C-START评测——05.SPI测试——驱动TFT屏
GD32L233C-START评测——06.LPUART+DMA+MCU睡眠唤醒——综合试验1
前言
- 距离上一篇评测隔了挺长时间,不过本篇又是一个综合测试。
- 最近项目太忙,断更了一段时间,现在恢复。并把前面欠下的抓紧补上。
- 做本篇测试的目的,为了完结前面第五篇的遗留(链接),也是为了后面的综合项目趟坑。
1、外设简介
1.1、RTC简介
简单理解,RTC就是一个定时器,不过是专门用作记录时间的(年月日时分秒)。
比较关键的点是,RTC可以工作在省电模式,通过合适的硬件设计即可在主时钟停掉时继续计时,回到正常运行模式后,时间也正常。
1.2、SPI简介
大家都知道,就不再啰嗦了。只是我们用到的是非四线制的常规模式。
1.3、墨水屏
这个可得好好说说了。
墨水屏,也叫水墨屏,有些地方也叫电子纸。最大的特点是:
- 显示效果类似白纸黑字;
- 掉电后可保持显示;
- 低功耗(刷新时只有mW级别的功耗,不刷新时几乎零功耗);
为了与咱们MCU主打的低功耗保持一致,故买了一个2.9寸墨水屏(好贵),来作为这个评测内容的一部分,以及综合项目也是基于这个墨水屏设计的。
2、试验内容说明
目标:在墨水屏上显示RTC记录的当前时间。
墨水屏介绍:2.9寸黑白双色;可局刷;分辨率296x128;灰度等级2。
硬件平台:GD32L233C-START开发板+自制墨水屏转接板。
关键外设:RTC、SPI。
连接说明:RST—PB7、DC—PB8、BUSY—PB9、SPI_CS—PB12、SPI_CLK—PB13、SPI_MOSI—PB15、SPI_MISO—PB14。
模式说明:因为墨水屏仅需接收MCU给其的显示数据,无需返回数据给MCU,所以我们仅需实现SPI为发送即可。
另: 为了驱动墨水屏,特意制作了一块转接板。
3、外设初始化
3.1、RTC初始化
本次测试里只是用了日历功能,未使用闹钟和侵入检测等功能,故初始化较为简单。
void bsp_rtc_config(void)
{
rcu_osci_on(RCU_LXTAL);
rcu_osci_stab_wait(RCU_LXTAL);
rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);
prescaler_s = 0xFF;
prescaler_a = 0x7F;
rcu_periph_clock_enable(RCU_RTC);
rtc_register_sync_wait();
}
注意: 此处使用了外部的32.768K晶振,因为经过实际测试,使用内部的时钟,每分钟有5S左右的误差。
3.2、SPI初始化
SPI的初始化与GD32L233C-START评测——05.SPI测试——驱动TFT屏的SPI初始化相同,不再啰嗦。
3.3、SPI写字节
同上,参考GD32L233C-START评测——05.SPI测试——驱动TFT屏。
4、其它
宏定义GPIO读写:
#define DEV_Digital_Write(_pin, _value) gpio_bit_write(_pin, _value == 0? RESET:SET)
#define DEV_Digital_Read(_pin) gpio_input_bit_get(_pin)
至此,墨水屏相关的基础代码介绍完毕。RTC部分参考例程,先输入时间,再进行显示。
5、主函数
主函数代码如下:
int main(void)
{
systick_config();
led_init();
gd_eval_com_init(EVAL_COM);
led_flash(1);
rcu_periph_clock_enable(RCU_PMU);
rcu_periph_clock_enable(RCU_BKP);
pmu_backup_write_enable();
bsp_rtc_config();
if(BKP_VALUE != RTC_BKP0) {
rtc_setup();
} else {
if(RESET != rcu_flag_get(RCU_FLAG_PORRST)) {
printf("power on reset occurred....\n\r");
} else if(RESET != rcu_flag_get(RCU_FLAG_EPRST)) {
printf("external reset occurred....\n\r");
}
printf("no need to configure RTC....\n\r");
rtc_show_time();
}
rcu_all_reset_flag_clear();
MX_GPIO_Init();
MX_SPI1_Init();
while(1)
{
printf("123\r\n");
display_application();
}
}
6、效果
说明:
1.上电后在串口工具中输入时间,年月日时分秒;
2.墨水屏开始刷新并依次显示,兆易创新LOGO、电子工程世界LOGO、输入的时间;
3.此后屏幕DC
下拉,关闭供电;
4.每隔一分钟时间刷新一次。
总结
- 墨水屏的坑太多了,也是因为我第一次用,所以用的非常纠结。尤其是字体取模和BMP图取模时。
- MCU片内的低速时钟精度太低了,不适合做时间显示类的应用。
- RTC外设在这个试验中仅仅用了一小部分,后面的综合项目会逐渐融入RTC的其它功能。
- 此次试验中部分功能未完全实现,比如农历的年月日及周几,并未实现,而是固定显示这个的。后面会完善。
结语
- 本次试验测试了两个外设(其实仅RTC一个),比较新奇的是墨水屏,我对它的显示效果很满意,对它宣传的低功耗也很期待。
- 以上内容若有错误,请不吝赐教。我这厢有礼了~:Onion-45:
- 开源的综合试验项目已经有了方向和初步的想法,下篇公布。
- 后续会穿插外设测试和试验项目。
另:附件上传工程源码和转接板光绘文件。附件说明如下:
15-GD32L233CCT6-Test.zip:LPUART发送接收+DMA传输+LPUART接收唤醒MCU。
artwork_pinBoard_V0.1.zip:24pin 0.5mm FPC接口墨水屏转接板。