天嵌 ARM开发社区

 找回密码
 注册
查看: 3075|回复: 1

ARM 串口通信发送的数据是0x04 会自动在前面添加0x0d

[复制链接]
shruger 发表于 2012-11-29 15:43:21 | 显示全部楼层 |阅读模式
本帖最后由 shruger 于 2012-11-29 15:59 编辑

如题
开发板:tq2440
使用串口tq2440_serial1 跟电脑进行串口通信。
发送的数据包为一个结构体:
  1. typedef struct package{
  2.         uchar startbyte;// 1 bytes
  3.         uchar cmd;                // 1 bytes
  4.         uchar flag;                // 1 bytes
  5.         uchar cks;                // 1 bytes
  6.         uchar endbyte;        // 1 bytes
  7.         short col_param;        // 2 bytes
  8.         short len;                // 2 bytes
  9.         uint param;        // 4 bytes
  10.         uchar data[128];// 128 bytes
  11. }COMPKG;
复制代码
发送语句:
ret= write(serial_fd, (void*)teststruct, sizeof(teststruct));

只要发送的数据中有0x0a 会自动在其前面添加0x0d

 楼主| shruger 发表于 2012-11-29 15:58:24 | 显示全部楼层
好吧,我找到答案了:在我们发送字符0x0d的时候,往往接受端得到的字符是0x0a 这是怎么回事,原因是在串口配置中c_iflag和c_oflag中存在从NL-CR 和CR-NL的映射,也就是说,串口能够把回车和换行看成一个字符,所以,此时我们应该屏蔽掉这些,用options.c_oflag &=~(INLCR|IGNCR|ICRNL|);和options.c_oflag &=~(ONLCR|OCRNL); 进行配置。

引用:http://www.justwinit.cn/post/1839/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-29 18:45 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表