最近有个项目需要使用屏幕实时显示系统的电压电流,使用串口屏能减少很多额外的工作量,在此做一个开发记录。

选择了淘晶驰家的串口屏,这里选用的是3.5寸的触屏显示。

附上官方文档:

start [USART HMI 资料中心] (tjc1688.com)

官方的上位机软件:

2.上位软件下载:1.最新版本下载 [USART HMI 资料中心] (tjc1688.com)

查看官方手册,找到需要参考的地方:

一、串口数据解析模式之被动解析模式

       在默认情况下屏接收设备发送数据完整格式为字符串指令加上3个16进制ff,如果屏接收到不完整或者错误指令将会返回数据。例如①1a ff ff ff 

②1c ff ff ff等;可通过bkcmd进行开启关闭返回数据。(在正常情况下建议先将屏幕报错原因找到解决了,再指令关闭返回数据)

 1.1 以文本控件显示为例

       单片机如何控制屏幕(文本控件)

1、在上位机工程新建一个文本控件,假设为t0,将程序下载到串口屏上,
       2、串口屏串口与单片机串口连接,两者波特率应一致,单片机RX接串口屏TX,单片机TX接串口屏RX。
       3、发送指令:单片机串口通过字符串模式发送t0.txt="六六六"
       4、发送结束符:单片机通过HEX模式发送0xff 0xff 0xff
       5、此时屏幕上的t0控件内的文字变为“六六六”
       

1.2 以数字控件显示为例

       单片机如何控制屏幕(数字控件)

       1、在上位机工程新建一个数字控件,假设为n0,将程序下载到串口屏上,
       2、串口屏串口与单片机串口连接,两者波特率应一致,单片机RX接串口屏TX,单片机TX接串口屏RX。
       3、发送指令:单片机串口通过字符串模式发送n0.val=666
       4、发送结束符:单片机通过HEX模式发送0xff 0xff 0xff

       5、此时屏幕上的n0控件内的文字变为“666”

1.3 单片机发送变量到屏幕

       1.3.1 C语言为例

      在通常情况下单片机是很少发送一个常量给屏赋值的,大多数情况都是单片机赋值一个变量到屏幕上的。下面代码以C语言为例

printf("n0.val=666"); 发送命令
      printf("\xff\xff\xff"); 发送结束符
      printf("n0.val=666\xff\xff\xff");
      printf("n0.val=%d\xff\xff\xff",MyData); 一次性发完命令和结束符
      printf("t0.txt=\"%d\"\xff\xff\xff",MyTxt); 一次性发完命令和结束符

     注:这里发送16进制是用\xff,若不明白"\"使用法,自行百度"c语言转义字符"。

接下来就可以来实际建立工程了

1.第一步建立工程:

throttlestop 电压 电流_c语言

2、选择路径,并设置名称

3、根据自己购买的型号选择对应的型号,型号可以在屏幕的背后看到,如果看不懂型号可以查看这里

 

throttlestop 电压 电流_c语言_02

 4、选择显示方向和字符编码,字符编码如果没有特殊需求,建议使用GB2312编码,目前中文输入法只支持GB2312,请确保单片机端与串口屏的编码一致,避免使用时乱码,

throttlestop 电压 电流_串口_03

5、点击ok键,工程建立完成

throttlestop 电压 电流_ui_04

6、新建的工程如下所示 

throttlestop 电压 电流_串口_05

 7、切换到Program.s,并在page指令之前添加如下配置

 

throttlestop 电压 电流_串口_06

8、添加字库(可以只添加本工程使用的部分字库)根据需要设置字高,编码(请务必与工程编码保持一致)

throttlestop 电压 电流_串口_07

9、保存字库 ,添加好后在左下角窗口显示

throttlestop 电压 电流_dsp开发_08

接下来可以添加显示页面以及控件了,首先添加Program.s文件,此文件是系统初始化代码,全局变量定义。sys0、sys1、sys2为全局变量只支持int型变量。bauds为定义波特率9600;bkcmd设置在执行错误时会返回数据。

throttlestop 电压 电流_c语言_09

 

 

throttlestop 电压 电流_串口_10

 在更新电流显示的时候只需给串口屏发送以下字符串

x0.val=250   
x1.val=250
x2.val=250   
x3.val=250 
x4.val=250
x5.val=250

显示效果如下;

throttlestop 电压 电流_throttlestop 电压 电流_11

 二、配置DSP28335的SCI模式配置

管脚配置:

void InitSciaGpio()
{
   EALLOW;

	GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;	   // Enable pull-up for GPIO36 (SCIRXDA)
	GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;	   // Enable pull-up for GPIO35 (SCITXDA)

	GpioCtrlRegs.GPBQSEL1.bit.GPIO35 = 3;  // Asynch input GPIO35 (SCITXDA)
    GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3;  // Asynch input GPIO36 (SCIRXDA)

	GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1;   // Configure GPIO36 for SCIRXDA operation
	GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;   // Configure GPIO35 for SCITXDA operation	
    EDIS;
}

SCI工作方式和参数设置

void scic_echoback_init()
{
    ScibRegs.SCICCR.all = 0x0007;//1位停止位,无奇偶校验位,8个数据位
	ScibRegs.SCICTL1.all=0x003;
    ScibRegs.SCICTL2.all=0x003;
    ScibRegs.SCICTL2.bit.TXINTENA= 1;
    ScibRegs.SCICTL2.bit.RXBKINTENA= 1;
    #if(CPU_FRQ_150MHZ)
    ScicRegs.SCIHBAUD = 0x0001;// 9600 baud 
    ScibRegs.SCILBAUD = 0x00E7;
    #endif
    ScibRegs.SCICTL1.all=0x023;

}

发送函数

void scic_msg(char * msg)
{
    int i;
    i=0;
    while(msg[i]!='\0')
        {
            scic-xmit(msg[i]);
            i++;
        }

}

main函数:

void main(void)
{
    char *msg;
    msg="x0.val=250\0";
    scic_msg(msg);
}

这样就可以实现显示了。功能比较简单,其他功能可以详细参考使用手册进行二次开发。