应用的背景:
在PC使用过程中,会不时的卡顿,经常是不知名的软件CPU占用率过高,或是内存使用过多的原因,而且总是要打开任务管理器查看原因,有时卡顿时,还打不开任务管理器,所以,在桌面上设计一个可以实时显示PC硬件运行状态的终端屏,用于显示PC的部分硬件信息,包括CPU与GPU的使用率、温度等。
此项目也旨在熟悉RA6M4的芯片功能,与RT-Thread与RA6M4的综合使用。
实现功能:
RA6M4使用Buses外设,通过SSD1963芯片,驱动一块5寸的RGB液晶屏,来显示电脑的运行状态,硬件信息。
显示界面使用lvgl进行设计,向RA6M4中移植lvgl库。
电脑与RA6M4通过USB转TTL电路进行通讯。
整体系统框架:
RT-Thread使用情况概述:
在调试阶段,RT-Thread将finsh控制台串口设置成串口1。原串口7引脚与bus引脚复用冲突。
最后项目应用时,由串口1来进行与PC机的通讯,finsh功能不再使用。
由于RTT还没有支持Bus外设,由原生库进行处理初始化。
硬件框架:
设计一块可以直接插接在RA6M4开发板上的扩展板,包括液晶屏驱动、USB转TTL,net、SD card等电路。
项目需要使用的就是LCD驱动与USB转TTL串口功能。其他功能暂不使用。
扩展板与开发板接口统一,可直接插在开发板上。
将RA6M4开发板上的NC的两个引脚与5V做跳线,直接由开发板向扩展板进行供电,方便调试时的接线。
扩展板使用kicad进行设计,3D图与实物图如下所示:
软件框架说明:
整个软件代码,使用RT-Thread Studio进行工程管理与编译,RT-Thread Studio版本2.2.3;RT-Thread版本4.1.0。
软件模块说明:
RT-Thread使用的硬件驱动有:串口模块、GPIO模块。
使用的组件有:msh shell组件。
由于RT-Thread并没有对ex bus外设进行支持,相应的操作并没有使用RT-Thread的软件包,而是用寄存器直接配置的方式。
HardwareSerialMonitor.exe以管理员权限打开,指定好串口。
HardwareSerialMonitor的地址:https://github.com/koogar/HardwareSerialMonitor/releases
作品完整图片
视频演示效果
https://www.bilibili.com/vide...
代码地址:
https://gitee.com/jinyi7016/ra6-m4\_-pc\_-state
具体关键步骤:
安装sc\_v2021-10\_fsp\_v3.5.0,并配置System:BUS
如下图所示。
CS使用的是CS1,根据数据手册上的地址映射来确定外设的访问地址。
#define Cmd_Reg ( *(volatile uint16_t *) 0x81000000)
#define Data_Reg ( *(volatile uint16_t *) 0x81060000)
根据数据手册的寄存器说明,对BUS外设进行初始化,使用16bit模式。RA6M4的BUs与STM32的FSMC是类似的,但似乎是没有相应的API来直接配置,只能是按寄存器来配置了。
好在此类外设的配置并不复杂,关键的模式与时序配置就可以了。
代码如下:
R_BUS->CSb[1].CR_b.BSIZE = 0; //16bit
R_BUS->CSb[1].CR_b.EMODE = 0; //小端
R_BUS->CSa[1].MOD_b.WRMOD = 1; //字节模式
R_BUS->CSb[1].CR_b.EXENB = 1; //enable
R_BUS->CSRECEN = 0x3e00;//0x0002;
R_BUS->CSa[1].WCR2_b.CSON = 3; //CS wait clock cycles
R_BUS->CSa[1].WCR2_b.RDON = 3; //RD wait clock cycles
R_BUS->CSa[1].WCR2_b.WRON = 3; //SR wait clock cycles
R_BUS->CSa[1].WCR1_b.CSRWAIT = 8; //Read Cycle Wait Select
R_BUS->CSa[1].WCR1_b.CSWWAIT = 8; //Write Cycle Wait Select
R_BUS->CSa[1].WCR2_b.CSWOFF = 1; //Write-Access CS Extension Cycle Select
R_BUS->CSa[1].WCR2_b.WDOFF = 3; //Write Data Output Extension Cycle Select
初始化LCD驱动芯片SSD1963,实现打点等功能。
下载lvgl的源码,移植到工程中,具体代码,参见gitee中。
根据RTT的官方文档,移植相应的函数:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/packages-manual/lvgl-docs/introduction
使用NXP的lvgl设计工具对界面进行设计。将生成的代码移植到工程中,由于其对lvgl8.2的支持还是有些问题,要修改一些头文件。
并将生成的代码的头文件路径添加到工程中。
在进程中进行数据的刷新与chart增加数据。
串口设备的使用,参考官方文档:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart\_v1/uart
注意事项:
此项目源码根据自身电脑的硬件信息进行了适配,串口数据的解析是匹配了本机的电脑硬件信息,其他的电脑上的运行,可能要进行相应的修改。
本文使用的HardwareSerialMonitor是HardwareSerialMonitor\_v1.1c,其他版本的程序,可能要进行数据解析的调整。调试时,可先用虚拟串口增收HardwareSerialMonitor的数据进行分析后再解析。
本项目上位机运行的程序路径为:HardwareSerialMonitor-main\OHM\DEPRECIATED\HardwareSerialMonitor\_v1.1c\HardwareSerialMonitor\bin\Release\HardwareSerialMonitor.exe;(Run as admin)