打印
[G32A]

极海G32A1465汽车通用MCU评估板测试05+工业串口屏调试

[复制链接]
87|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 聪聪哥哥 于 2025-1-17 13:28 编辑

享一下极海G32与工业串口屏的通讯经验;一:极海串口知识:
LPUART 支持全双工、异步、NRZ 串行通信,包括波特率发生器、发送器和接收器块。虽然发送器和接收器使用相同的波特率发生器,但是他们仍然独立工作。
主要特征:
1:全双工异步通信、NRZ 标准格式
2:可编程的串口特性
数据位:7 位,8位,9位或 10 位
校验位:偶校验、奇校验、无校验
停止位:1位或2位
3:可编程波特率,采样率为 4x到 32x
4:发送和接收波特率:异步运行至总线时钟。在停止模式下的操作、独立于总线时钟频率配置
5:三种接收器唤醒方法:空闲线路唤醒、地址标记唤醒、接收数据匹配
6:自动地址匹配:地址标记匹配、空闲线路地址匹配
7:支持 1、2、4、8、16、32、64或 128 个空闲字符的可配置空闲长度检测
8:可选 13 位中断字符生成/11 位中断字符检测
9:可选发送器输出和接收器输入极性
10:硬件流控支持请求发送(RTS)和清除发送(CTS)信号
11:可选 IrDA 1.4 RZI格式,脉冲宽度可编程
12:用于发送和接收的独立 FIFO 结构
单独的可配置阈值,用于发送和接收请求
如果接收 FIFO 不为空,则在可配置的空闲字符数后,接收器可选择产生请求
13:中断、DMA 或轮询操作
发送数据寄存器为空、发送完成、接收溢出、奇偶校验错误、支持 LIN 的中断检查、噪声错误、帧错误、接收引脚上的边沿活动、空闲接收器
二:工业串口屏知识:
这里使用的一款迪文公司的串口屏
部分代码如下:
/*切换界面功能函数*/
void SendTestData(char ID)
{
         TXDBuffer[0] = 0x5A ;
         TXDBuffer[1] = 0xA5 ;        
         TXDBuffer[2] = 0x07 ;
         TXDBuffer[3] = 0x82 ;        
         TXDBuffer[4] = 0x00 ;
         TXDBuffer[5] = 0x84 ;        
         TXDBuffer[6] = 0x5A ;
         TXDBuffer[7] = 0x01 ;        
         TXDBuffer[8] = 0x00 ;
         TXDBuffer[9] = ID ;               
   LPUART_TxDataBlocking(LPUART1_INSTANCE,
                                  (uint8_t *)TXDBuffer,
                                  10,
                                  TX_TIMEOUT);
}
/*向指定指定发送 四字节数据*/
void Add_Write_Long_Data(uint16_t ucAdd, uint32_t uiDATA)
{
        TXDBuffer[0] = 0x5A;
        TXDBuffer[1] = 0xA5;
        TXDBuffer[2] = 0x07;        
        TXDBuffer[3] = 0x82;
        TXDBuffer[4] = ucAdd>>8;
        TXDBuffer[5] = ucAdd;
        TXDBuffer[6] = uiDATA>>24;        
        TXDBuffer[7] = uiDATA>>16;
        TXDBuffer[8] = uiDATA>>8;        
        TXDBuffer[9] = uiDATA;        
  LPUART_TxDataBlocking(LPUART1_INSTANCE,
                                  (uint8_t *)TXDBuffer,
                                  10,
                                  TX_TIMEOUT);
}
/*向指定指定发送 两字节数据*/
void Add_Write_Data(uint16_t ucAdd, uint16_t uiDATA)
{
        TXDBuffer[0] = 0x5A;
        TXDBuffer[1] = 0xA5;
        TXDBuffer[2] = 0x05;        
        TXDBuffer[3] = 0x82;
        TXDBuffer[4] = ucAdd>>8;
        TXDBuffer[5] = ucAdd;
        TXDBuffer[6] = uiDATA>>8;        
        TXDBuffer[7] = uiDATA;
  LPUART_TxDataBlocking(LPUART1_INSTANCE,
                                  (uint8_t *)TXDBuffer,
                                  8,
                                  TX_TIMEOUT);
}
/*向指定指定发送 显示文本函数*/
void Display_Text(uint16_t uiAdd, char *Str)
{
        uint8_t ucLen;
        int i;
        ucLen = strlen(Str)+3;
        TXDBuffer[0] = 0x5A;
        TXDBuffer[1] = 0xA5;
        TXDBuffer[2] = ucLen;        
        TXDBuffer[3] = 0x82;
        TXDBuffer[4] = (uiAdd>>8);
        TXDBuffer[5] = uiAdd;
        i = 6;
        while(*Str != 0)  
   {
      TXDBuffer[i] = *Str;
                        i++;
                        Str++;
   }
   TXDBuffer[i] = 0;
  LPUART_TxDataBlocking(LPUART1_INSTANCE,
                                  (uint8_t *)TXDBuffer,
                                  i+1,
                                  TX_TIMEOUT);
}
/*绘制曲线功能函数*/
void DrawGraphLine(uint16_t uiDrawList )
{
        TXDBuffer[0] = 0x5A;
        TXDBuffer[1] = 0xA5;        
        TXDBuffer[2] = 0x0B;
        TXDBuffer[3] = 0x82;        
        TXDBuffer[4] = 0x03;  //曲线写启动
        TXDBuffer[5] = 0x10;        
        TXDBuffer[6] = 0x5A;                // 启动一次写数据
        TXDBuffer[7] = 0xA5;
        TXDBuffer[8] = 0x01;   // 占用了几个通道
        TXDBuffer[9] = 0x00;        
        TXDBuffer[10] = 0x00;  // 占用了几个通道
        TXDBuffer[11] = 0x01;        
        TXDBuffer[12] =( uiDrawList >> 8);
        TXDBuffer[13] =  uiDrawList ;        
  LPUART_TxDataBlocking(LPUART1_INSTANCE,
                                  (uint8_t *)TXDBuffer,
                                  14,
                                  TX_TIMEOUT);
}
在程序初始化好串口部分后,在主程序内完成:界面切换功能
   SendTestData(temp);
                        Add_Write_Long_Data        (0X100,01);
                        Display_Text(0X5000,"极海半导体 21 IC测试");
                        temp++ ;
                        if(temp >=10) temp = 1 ;
                        OSIF_TimeDelay(200);
代码测试图如下所示:

实物测试图如下:

实物测试视频:


使用特权

评论回复
沙发
光影捕手| | 2025-1-17 17:41 | 只看该作者
很流畅啊。实现的很棒

使用特权

评论回复
板凳
聪聪哥哥|  楼主 | 2025-1-17 18:36 | 只看该作者
光影捕手 发表于 2025-1-17 17:41
很流畅啊。实现的很棒

主要是极海的串口输出稳定啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

126

帖子

0

粉丝