返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

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

[复制链接]
 楼主| 聪聪哥哥 发表于 2025-1-17 13:01 | 显示全部楼层 |阅读模式
本帖最后由 聪聪哥哥 于 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 的中断检查、噪声错误、帧错误、接收引脚上的边沿活动、空闲接收器
二:工业串口屏知识:
这里使用的一款迪文公司的串口屏
部分代码如下:
  1. /*切换界面功能函数*/
  2. void SendTestData(char ID)
  3. {
  4.          TXDBuffer[0] = 0x5A ;
  5.          TXDBuffer[1] = 0xA5 ;        
  6.          TXDBuffer[2] = 0x07 ;
  7.          TXDBuffer[3] = 0x82 ;        
  8.          TXDBuffer[4] = 0x00 ;
  9.          TXDBuffer[5] = 0x84 ;        
  10.          TXDBuffer[6] = 0x5A ;
  11.          TXDBuffer[7] = 0x01 ;        
  12.          TXDBuffer[8] = 0x00 ;
  13.          TXDBuffer[9] = ID ;               
  14.    LPUART_TxDataBlocking(LPUART1_INSTANCE,
  15.                                   (uint8_t *)TXDBuffer,
  16.                                   10,
  17.                                   TX_TIMEOUT);
  18. }
  19. /*向指定指定发送 四字节数据*/
  20. void Add_Write_Long_Data(uint16_t ucAdd, uint32_t uiDATA)
  21. {
  22.         TXDBuffer[0] = 0x5A;
  23.         TXDBuffer[1] = 0xA5;
  24.         TXDBuffer[2] = 0x07;        
  25.         TXDBuffer[3] = 0x82;
  26.         TXDBuffer[4] = ucAdd>>8;
  27.         TXDBuffer[5] = ucAdd;
  28.         TXDBuffer[6] = uiDATA>>24;        
  29.         TXDBuffer[7] = uiDATA>>16;
  30.         TXDBuffer[8] = uiDATA>>8;        
  31.         TXDBuffer[9] = uiDATA;        
  32.   LPUART_TxDataBlocking(LPUART1_INSTANCE,
  33.                                   (uint8_t *)TXDBuffer,
  34.                                   10,
  35.                                   TX_TIMEOUT);
  36. }
  37. /*向指定指定发送 两字节数据*/
  38. void Add_Write_Data(uint16_t ucAdd, uint16_t uiDATA)
  39. {
  40.         TXDBuffer[0] = 0x5A;
  41.         TXDBuffer[1] = 0xA5;
  42.         TXDBuffer[2] = 0x05;        
  43.         TXDBuffer[3] = 0x82;
  44.         TXDBuffer[4] = ucAdd>>8;
  45.         TXDBuffer[5] = ucAdd;
  46.         TXDBuffer[6] = uiDATA>>8;        
  47.         TXDBuffer[7] = uiDATA;
  48.   LPUART_TxDataBlocking(LPUART1_INSTANCE,
  49.                                   (uint8_t *)TXDBuffer,
  50.                                   8,
  51.                                   TX_TIMEOUT);
  52. }
  53. /*向指定指定发送 显示文本函数*/
  54. void Display_Text(uint16_t uiAdd, char *Str)
  55. {
  56.         uint8_t ucLen;
  57.         int i;
  58.         ucLen = strlen(Str)+3;
  59.         TXDBuffer[0] = 0x5A;
  60.         TXDBuffer[1] = 0xA5;
  61.         TXDBuffer[2] = ucLen;        
  62.         TXDBuffer[3] = 0x82;
  63.         TXDBuffer[4] = (uiAdd>>8);
  64.         TXDBuffer[5] = uiAdd;
  65.         i = 6;
  66.         while(*Str != 0)  
  67.    {
  68.       TXDBuffer[i] = *Str;
  69.                         i++;
  70.                         Str++;
  71.    }
  72.    TXDBuffer[i] = 0;
  73.   LPUART_TxDataBlocking(LPUART1_INSTANCE,
  74.                                   (uint8_t *)TXDBuffer,
  75.                                   i+1,
  76.                                   TX_TIMEOUT);
  77. }
  78. /*绘制曲线功能函数*/
  79. void DrawGraphLine(uint16_t uiDrawList )
  80. {
  81.         TXDBuffer[0] = 0x5A;
  82.         TXDBuffer[1] = 0xA5;        
  83.         TXDBuffer[2] = 0x0B;
  84.         TXDBuffer[3] = 0x82;        
  85.         TXDBuffer[4] = 0x03;  //曲线写启动
  86.         TXDBuffer[5] = 0x10;        
  87.         TXDBuffer[6] = 0x5A;                // 启动一次写数据
  88.         TXDBuffer[7] = 0xA5;
  89.         TXDBuffer[8] = 0x01;   // 占用了几个通道
  90.         TXDBuffer[9] = 0x00;        
  91.         TXDBuffer[10] = 0x00;  // 占用了几个通道
  92.         TXDBuffer[11] = 0x01;        
  93.         TXDBuffer[12] =( uiDrawList >> 8);
  94.         TXDBuffer[13] =  uiDrawList ;        
  95.   LPUART_TxDataBlocking(LPUART1_INSTANCE,
  96.                                   (uint8_t *)TXDBuffer,
  97.                                   14,
  98.                                   TX_TIMEOUT);
  99. }
在程序初始化好串口部分后,在主程序内完成:界面切换功能
  1.    SendTestData(temp);
  2.                         Add_Write_Long_Data        (0X100,01);
  3.                         Display_Text(0X5000,"极海半导体 21 IC测试");
  4.                         temp++ ;
  5.                         if(temp >=10) temp = 1 ;
  6.                         OSIF_TimeDelay(200);
代码测试图如下所示:
2.png
实物测试图如下:
3.png
实物测试视频:
WeChat_20250117101944 00_00_00-00_00_30.gif

打赏榜单

21ic小管家 打赏了 50.00 元 2025-01-21
理由:优质评测

光影捕手 发表于 2025-1-17 17:41 | 显示全部楼层
很流畅啊。实现的很棒
 楼主| 聪聪哥哥 发表于 2025-1-17 18:36 | 显示全部楼层
光影捕手 发表于 2025-1-17 17:41
很流畅啊。实现的很棒

主要是极海的串口输出稳定啊
strang 发表于 2025-1-18 13:10 | 显示全部楼层
迪文串口屏吗?
 楼主| 聪聪哥哥 发表于 2025-1-18 13:12 | 显示全部楼层
strang 发表于 2025-1-18 13:10
迪文串口屏吗?

哎呀 被你发现了
strang 发表于 2025-1-18 13:16 | 显示全部楼层
哈哈哈,看着协议和驱动芯片像迪文的。
cooldog123pp 发表于 2025-1-19 15:52 | 显示全部楼层
很好的应用,这种应用需要用到车规级的MCU么,应该有低成本的选项吧。
 楼主| 聪聪哥哥 发表于 2025-1-20 10:09 | 显示全部楼层
cooldog123pp 发表于 2025-1-19 15:52
很好的应用,这种应用需要用到车规级的MCU么,应该有低成本的选项吧。 ...

看具体的需求吧?有低成片的MCU芯片
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

222

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

85

主题

222

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部