本帖最后由 聪聪哥哥 于 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);
代码测试图如下所示:
实物测试图如下:
实物测试视频:
|