新手求救.arduino 软串口的RX/TX串口收发端口只能有一对吗

21ic官方微信-->
后使用快捷导航没有帐号?
查看: 5050|回复: 13
串口TX/RX正反接问题
&&未结帖(20)
主题帖子积分
实习生, 积分 36, 距离下一级还需 14 积分
实习生, 积分 36, 距离下一级还需 14 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 36, 距离下一级还需 14 积分
实习生, 积分 36, 距离下一级还需 14 积分
& &&&请教大家一个问题,CPU与外设的TX与RX不需要反接,也就是CPU的TX接外设的TX,RX接RX;但CPU与串口小板(USB转串口)需要反接,也就是TX接RX,RX接TX,这是为什么呢?不一样是外设吗?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
高级工程师, 积分 7232, 距离下一级还需 768 积分
高级工程师, 积分 7232, 距离下一级还需 768 积分
主题帖子积分
专家等级:结帖率:56%打赏:0.00受赏:15.00
主题帖子积分
高级工程师, 积分 7232, 距离下一级还需 768 积分
高级工程师, 积分 7232, 距离下一级还需 768 积分
都不看手册资料的吗?
本人熟悉STM32、PIC、AVR等嵌入式软件开发;联系方式:.
主题帖子积分
高级技术员, 积分 870, 距离下一级还需 130 积分
高级技术员, 积分 870, 距离下一级还需 130 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 870, 距离下一级还需 130 积分
高级技术员, 积分 870, 距离下一级还需 130 积分
呵呵 这应该属于信号的处理了,有的是针对用户,跟你调好了,只需要按着接就行了,有的是针对原理来,用户明白是怎么个接法就行
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 36, 距离下一级还需 14 积分
实习生, 积分 36, 距离下一级还需 14 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 36, 距离下一级还需 14 积分
实习生, 积分 36, 距离下一级还需 14 积分
呵呵 这应该属于信号的处理了,有的是针对用户,跟你调好了,只需要按着接就行了,有的是针对原理来,用户 ...
那确实是原理图设计中TX-TX,RX-RX?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
高级技术员, 积分 870, 距离下一级还需 130 积分
高级技术员, 积分 870, 距离下一级还需 130 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 870, 距离下一级还需 130 积分
高级技术员, 积分 870, 距离下一级还需 130 积分
那确实是原理图设计中TX-TX,RX-RX?
这种东西不用在意那么多,TX-TX,RX-RX,不行就换可以了,又不会坏单片机
兴趣是开端,成就是积累的动力
主题帖子积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
资深工程师, 积分 10438, 距离下一级还需 9562 积分
一般都是TX-RX RX-TX。。。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 297, 距离下一级还需 3 积分
中级技术员, 积分 297, 距离下一级还需 3 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 297, 距离下一级还需 3 积分
中级技术员, 积分 297, 距离下一级还需 3 积分
tx是发送,rx是接收,A的TX必需与B的RX连接,B的RX与B的TX连接才能通讯,简单的说就是接收与发送连接,
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级工程师, 积分 3463, 距离下一级还需 1537 积分
中级工程师, 积分 3463, 距离下一级还需 1537 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级工程师, 积分 3463, 距离下一级还需 1537 积分
中级工程师, 积分 3463, 距离下一级还需 1537 积分
这样定义可能是方便接线吧。并不是说每一个模块都是针对自身来定义TX、RX,这些定义都看作者的初衷了~
人生最大的差距是勤奋的差距,人生最大的遗憾是勤奋不够!
主题帖子积分
初级工程师, 积分 2073, 距离下一级还需 927 积分
初级工程师, 积分 2073, 距离下一级还需 927 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级工程师, 积分 2073, 距离下一级还需 927 积分
初级工程师, 积分 2073, 距离下一级还需 927 积分
我也觉得这样标识只是为了以示区别,方便连线。。。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级工程师, 积分 2293, 距离下一级还需 707 积分
初级工程师, 积分 2293, 距离下一级还需 707 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级工程师, 积分 2293, 距离下一级还需 707 积分
初级工程师, 积分 2293, 距离下一级还需 707 积分
tx是发送,rx是接收,接收与发送连接才能通信
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级工程师, 积分 2298, 距离下一级还需 702 积分
初级工程师, 积分 2298, 距离下一级还需 702 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级工程师, 积分 2298, 距离下一级还需 702 积分
初级工程师, 积分 2298, 距离下一级还需 702 积分
需要看引脚定义,楼主所指的外设的TX与RX,可能标注的是与CPU连接方法,而他实际的刚好相反也说不一定呢
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1899, 距离下一级还需 101 积分
助理工程师, 积分 1899, 距离下一级还需 101 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.10
主题帖子积分
助理工程师, 积分 1899, 距离下一级还需 101 积分
助理工程师, 积分 1899, 距离下一级还需 101 积分
tx是发送,rx是接收
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级技术员, 积分 96, 距离下一级还需 4 积分
初级技术员, 积分 96, 距离下一级还需 4 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级技术员, 积分 96, 距离下一级还需 4 积分
初级技术员, 积分 96, 距离下一级还需 4 积分
应该要RX--TX,TX--RX才能通信,但是具体还是要看芯片手册上说明的,有些是相对于单片机,有些是相对于外设
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级工程师, 积分 2343, 距离下一级还需 657 积分
初级工程师, 积分 2343, 距离下一级还需 657 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级工程师, 积分 2343, 距离下一级还需 657 积分
初级工程师, 积分 2343, 距离下一级还需 657 积分
一般都是TX-RX ,RX-TX的接
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
技术导师奖章
人才类勋章
时间类勋章
沉静之湖泊
发帖类勋章
突出贡献奖章
等级类勋章
技术新星奖章
人才类勋章
精英会员奖章
等级类勋章
时间类勋章
技术高手奖章
人才类勋章
时间类勋章
技术奇才奖章
人才类勋章
湍急之河流
发帖类勋章
时间类勋章
社区建设奖章
等级类勋章[转载]Arduino&串口通讯
淘宝店铺:
&&&&今天我们一起来学习Arduino的串口通讯。
&&&&Arduino与计算机通信所使用的USB接口就是下载程序时所用的USB接口,同时Arduino
USB串口线也可作为Arduino供电线。当Arduino与其他设备通信时,需要用到“Serial”系列函数。
下面介绍几个常“Serial”函数。
1、Serial.begin()—设置串行每秒传输数据的速率(波特率)。在同计算机通讯时,使用下面这些值:300,
, , 1, 2, 57600或
115200。你也可以在任何时候使用其它的值,比如,与0号或1号接口通信就要求特殊的波特率。
2、Serial.print()—从串行端口输出数据。
3、Serial.println()—从串行端口输出数据,跟随一个回车(ASCII 13, 或
'r')和一个换行符(ASCII 10, 或
'n')。这个函数所取得的值与Serial.print()一样。
4、Serial.read()—读取持续输入的数据。
还记得我们上一篇博文中介绍Arduino接口分布图时说到的TX/TR
TX(T:Transmitter
发送)表示为Arduino发送指令信息给计算机,RX(R:Receive
接收)表示为Arduino接收来自计算机的指令信息,当下载程序或与计算机通信时,这两个指示灯就会不停的闪烁。
这里要特别提醒Arduino新手一点的是:我们在下载程序或是做串口通讯实验时一定不能在没有一定要等TX/TR LED不再闪烁时再拔掉USB线,否则会给损坏你的Arduino芯片,我深受其害<img src="/blog7style/images/common/sg_trans.gif" real_src ="/uc/myshow/blog/misc/gif/E___6706EN00SIGG.gif" TYPE="face"
ALT="[转载]Arduino&串口通讯"
TITLE="[转载]Arduino&串口通讯" /><img src="/blog7style/images/common/sg_trans.gif" real_src ="/uc/myshow/blog/misc/gif/E___6706EN00SIGG.gif" TYPE="face"
ALT="[转载]Arduino&串口通讯"
TITLE="[转载]Arduino&串口通讯" />。接下来我们就为我们提供的 做两个串口通讯的实验。
Arduino串口助手显示
本实验中我们让Arduino在串口助手中循环显示:
“Welcome to ”注意了串口助手里只能显示英文字符和数字,不能显示汉字。<img src="/blog7style/images/common/sg_trans.gif" real_src ="/uc/myshow/blog/misc/gif/E___6706EN00SIGG.gif" TYPE="face"
ALT="[转载]Arduino&串口通讯"
TITLE="[转载]Arduino&串口通讯" />
程序如下图:
<img STYLE="TexT-ALiGn: WiDTH: 506 DispLAY: HeiGHT: 605px" src="/blog7style/images/common/sg_trans.gif" real_src ="/bmiddle/624e2b45x8fb&690" WIDTH="412" HEIGHT="528"
ALT="[转载]Arduino&串口通讯"
TITLE="[转载]Arduino&串口通讯" />
注意了:我们在程序写的波特率9600和串口调试助手中右下角的波特率9600要一致的否则无法通讯。
实验二 Arduino与串口通讯——人机对话
&&那么再来编写一个用计算机给Arduino发送指令的小程序吧!<img src="/blog7style/images/common/sg_trans.gif" real_src ="/uc/myshow/blog/misc/gif/E___6708EN00SIGG.gif" TYPE="face"
ALT="[转载]Arduino&串口通讯"
TITLE="[转载]Arduino&串口通讯" />当我们发送字符"a",Arduino串口助手中就会显示“OK
GOOD&Job”。这是因为我将a赋值给val,Arduino接收到来自计算机的信号后,运行到Serial.read()指令就会将读取的数值赋值给val,经if语句进行判断,如果经判断为真将执行if{}内指令,所以串口助手就会显示:“OK
GOOD&Job”。原理就是这么简单!<img src="/blog7style/images/common/sg_trans.gif" real_src ="/uc/myshow/blog/misc/gif/E___6708EN00SIGG.gif" TYPE="face"
ALT="[转载]Arduino&串口通讯"
TITLE="[转载]Arduino&串口通讯" />
程序如下图:
不要忘了看看Tx与Rx指示灯的闪烁情况。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Arduino学习笔记A6&-&Arduino串口接收字符串
Arduino串口接收字符串
用惯Arduino串口传输的朋友都知道,Arduino的Serial.read()每次只能读一个字节,但是有时想进行字符串通讯,就很麻烦了。
废话少讲,直接上完整例子:
编译只要一块Arduino,不需要任何外置元件。
用Arduino编译器的串口监视器即可看到结果,我们打什么文字进去,下面就会返回什么文字。
comdata = "";
void setup()
& & Serial.begin(<font COLOR="#00);
void loop()
& & while (Serial.available() &
<font COLOR="#)&&
&&&comdata
+= char(Serial.read());
&&&delay(<font COLOR="#);
& & if (comdata.length() &
<font COLOR="#)
&&&Serial.println(comdata);
&&&comdata
代码很简单,comdata是一个字符串类型变量。Serial.available()是当前串口缓冲池的数据量。Serial.read()是读缓冲池的语句,每次只能读一个字节。
用了String类型变量,很简单的实现了字符到字符串的加入,还有字符串输出,赋值等麻烦问题,所以很简单的代码就能处理串口数据。
特别留意的是读串口时的delay(2)不能删掉,否则串口缓冲区不够时间接受数据。即使调小延时也会出错。具体数值也可以实验决定。
再提醒一个:comdata说是一个字符串,也是一个数组,引用每个字的话可以用comdata[0],comdata[1]。。。comdata[n]。如果我们要每个字节取出的话,可以每个引用。
效果:输入什么字符串,输出就是什么。
按send之后:
再附送一个例子,在串口输入1011101..的话,就会令Arduino的D2~Dx引脚产生高/低电平,当然,一次发送的数据视Arduino引脚数而定,比如Arduino
UNO/nano之类的,只有D2~D13十二个引脚。我们打12个数字就好。比如,如果中间有非0和1的字符,则自动跳过该位设置:比如这样。因为2不是允许范围内,就只设置D2/D6/D10的值了:
comdata = "";void setup()
&&Serial.begin(<font COLOR="#00);
&&for(int i = <font COLOR="#; i &= <font COLOR="#; i++) pinMode(i, OUTPUT);
void loop()
&&while (Serial.available() &
<font COLOR="#)
& & comdata +=
int(Serial.read()) - '0';
& & delay(<font COLOR="#);
&&if(comdata.length() &
<font COLOR="#)
& & for(int i = <font COLOR="#; i & comdata.length();
&if(comdata[i]=='0'||comdata[i]=='1')
&&&digitalWrite(i
+ <font COLOR="#, comdata[i] - '0');
&&&Serial.print("Pin
&&&Serial.print(i
+ <font COLOR="#);
&&&Serial.print("
&&&Serial.println(comdata[i]);
& & comdata =
再来一个:进阶版(有待测试)
输入六个逗号分隔数比如:50,20,5,255,20,20
就能令Arduino的PWM引脚(3,5,6,9,10,11):按照PWM值发光。所以逗号分割数必须是0~255
comdata = "";int numdata[<font COLOR="#] = {<font COLOR="#}, PWMPin[<font COLOR="#] = {<font COLOR="#, <font COLOR="#, <font COLOR="#, <font COLOR="#, <font COLOR="#, <font COLOR="#}, mark = <font COLOR="#;void setup()
&&for(int i = <font COLOR="#; i & <font COLOR="#; i++) pinMode(PWMPin[i], OUTPUT);
&&Serial.begin(<font COLOR="#00);
void loop()
&&int j = <font COLOR="#;
&&while (Serial.available() &
<font COLOR="#)
& & comdata +=
char(Serial.read());
& & delay(<font COLOR="#);
& & mark = <font COLOR="#;
&&if(mark == <font COLOR="#)
& & Serial.println(comdata);
& & Serial.println(comdata.length());
& & for(int i = <font COLOR="#; i & comdata.length() ;
&if(comdata[i] == ',')
&&&numdata[j]
= numdata[j] * <font COLOR="# + (comdata[i] - '0');
& & comdata =
String("");
& & for(int i = <font COLOR="#; i & <font COLOR="#; i++)
&Serial.print("Pin ");
&Serial.print(PWMPin[i]);
&Serial.print(" = ");
&Serial.println(numdata[i]);
&analogWrite(PWMPin[i], numdata[i]);
&numdata[i] = <font COLOR="#;
& & mark = <font COLOR="#;
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 arduino串口收发数据 的文章

 

随机推荐