独闷闷网

 找回密码
 立即注册
搜索
查看: 3631|回复: 0
打印 上一主题 下一主题
收起左侧

[分享] 鸿哥开发板关于串口双机通信延时问题整理

[复制链接]
跳转到指定楼层
楼主
发表于 2014-12-17 17:50:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这里干嘛要延时

曹健-江苏 2014-12-17 17:36:54

不知道
Inc-东 2014-12-17 17:36:58

为毛要用延时
Inc-东 2014-12-17 17:37:01

你不知道你这样写》?
Inc-东 2014-12-17 17:37:11

用延时代替TI?
Tony--青 2014-12-17 17:37:20

@Inc-东莞 他是拿来主义者
Inc-东 2014-12-17 17:37:35

这里这样写是绝对不可取的
Tony--青 2014-12-17 17:37:43

估计时间长了会出问题
Inc-东 2014-12-17 17:37:50

不是
石头--惠 2014-12-17 17:38:00

@曹健-江苏 其实没必要每发送一个字节就延时一下
Inc-东 2014-12-17 17:38:16

如果延时不够长,TI还没置位,表示发送还没完成,他就直接把TI清0,导致发送错误

曹健-江苏 2014-12-17 17:38:26

我目前的水平是拿来主义  很多问题  吃不透
石头--惠 2014-12-17 17:38:33

只需要在启动串口中断,发送第一个字节价格小延时

曹健-江苏 2014-12-17 17:38:39

你们给我讲再多  不能用  我就认为是不行的
Inc-东 2014-12-17 17:38:46

这样顶多拿来演示一下还可以,用在工程上,如果是我领导看到我这样写,you are fire
17:39:01
Tony--青 2014-12-17 17:39:01

file:///C:\DOCUME~1\123\LOCALS~1\Temp\K08@7VM_1{NL9ER12UNXU94.gif
Inc-东 2014-12-17 17:39:02

不能用延时来代替
风雪--重 2014-12-17 17:39:07

file me

曹健-江苏 2014-12-17 17:39:12

我是领导   我就会说  just do it
石头--惠 2014-12-17 17:39:16

我这边串口发送启动函数:
Inc-东 2014-12-17 17:39:17

我的答案是,绝对不能
石头--惠 2014-12-17 17:39:18

void DownLoad_Uart1(void)
{
        UART1ENABLE();
        RS485SEND_SERVER();
        DelayNs_RS485();
        gbTXBusyUart1 = true;
        gcComStateUart1 = CS_SEND_BOOT1;
        U1THR = CF_START;
}
Inc-东 2014-12-17 17:39:20

那行
鸿哥-深 2014-12-17 17:39:21

@Inc-东莞
这个延时的目的不是完全替代跟TI,等你以后多做一些串口你就知道为什么必须加这个延时。
Tony--青 2014-12-17 17:39:25

鸿锅file:///C:\DOCUME~1\123\LOCALS~1\Temp\V@S07CYW_M@`U%PL%RPS`BW.gif

曹健-江苏 2014-12-17 17:39:55

do what you want do,never give up,you are the best
鸿哥-深 2014-12-17 17:40:17

@Inc-东莞
这里的延时是我提出来的,必须加的。
Inc-东 2014-12-17 17:40:26

@鸿哥-深圳 正确应该这样:while((!TI)&&(ms<250)){ms++;}
Inc-东 2014-12-17 17:40:33

这样才能完善
Inc-东 2014-12-17 17:40:41

这个ms你调才算没关系
鸿哥-深 2014-12-17 17:40:56

@Inc-东莞
没错。如果像你那样写会更加好file:///C:\DOCUME~1\123\LOCALS~1\Temp\}$$SH8F5BOR8W96(N@`FVY4.gif
17:41:25
Tony--青 2014-12-17 17:41:25

曹健去改
鸿哥-深 2014-12-17 17:41:30

@Inc-东莞
等等。我也不赞成那样写
Inc-东 2014-12-17 17:41:31

如果采取你这种办法,延时不够,那么错误,如果延时太多,只会错等
Inc-东 2014-12-17 17:41:43

没人在工程这样写
Tony--青 2014-12-17 17:41:48

这种样式的延时很多地方都用
17:43:47
曹健-江苏 2014-12-17 17:43:47

等你们这些大神确定好了  我再动手不迟
鸿哥-深 2014-12-17 17:43:53

@曹健-江苏
其实我还是坚持我那种写法,直接加delay,不要判断TI
石头--惠 2014-12-17 17:43:59

@Inc-东莞 “如果延时不够长,TI还没置位,表示发送还没完成,他就直接把TI清0,导致发送错误

石头--惠 2014-12-17 17:44:18

搞清楚,这个时候ES还没开了,是不会进串口中断的
石头--惠 2014-12-17 17:44:30

在这之前清串口标志TI是没问题的

曹健-江苏 2014-12-17 17:44:51

看到大家如此热烈的探讨单片机技术  我很高兴  好群  好机油  
Inc-东 2014-12-17 17:45:01

楼上也许没有注意延时下方的清-
Inc-东 2014-12-17 17:45:15

@鸿哥-深圳 这样写,我觉得是不可取的,但是你坚持,我也没办法
石头--惠 2014-12-17 17:45:23

清之前串口中断都没开
石头--惠 2014-12-17 17:45:27

没关系的

曹健-江苏 2014-12-17 17:45:40

今晚不搞程序了  累了  晚上和INC谈谈电源  扯扯单片机
鸿哥-深 2014-12-17 17:45:41

@曹健-江苏
其实我还是坚持我那种写法,直接加delay,不要判断TI.
因为延时不够,发送会出错的,我们自然会调整延时。但是TI以满足就发送下一个字节,这样的数据发送很不稳定的,因为我以前遇到过。在51,PIC单片机上是会存在这种问题。而在stm32貌似不会这样。
石头--惠 2014-12-17 17:45:44

开了串口中断,这时候再发送缓存才会发出去
17:46:04
曹健-江苏 2014-12-17 17:46:04

鸿哥  建议  你整理这个帖子
17:46:03
石头--惠 2014-12-17 17:46:03

这个时候TI标志才会置位u

曹健-江苏 2014-12-17 17:46:14

帮助后来的群友

曹健-江苏 2014-12-17 17:46:24

因为我遇到这个问题  别人也会遇到
鸿哥-深 2014-12-17 17:46:40

@曹健-江苏
这个我就不整理了。以前也有人问过。这个是经验,经验的东西是靠感觉的,说不清。
Inc-东 2014-12-17 17:46:52

@鸿哥-深圳 这样只会把串口拉慢了,效率低了,没有任何作用,串口本来就慢,在用定时器来保证你发送的数据的正确性已经足够

曹健-江苏 2014-12-17 17:47:04

而且  强烈建议鸿哥  将44和45例通过两个单片机测试一下  

曹健-江苏 2014-12-17 17:47:07

我来整理

曹健-江苏 2014-12-17 17:47:11

鸿哥
Inc-东 2014-12-17 17:47:15

没错,也许你追求的是稳定性,在稳定性上面更加稳定一点
Inc-东 2014-12-17 17:47:20

但是,我说,没必要

曹健-江苏 2014-12-17 17:47:31

我日  不能抬杠

曹健-江苏 2014-12-17 17:47:36

问题  解决就行

曹健-江苏 2014-12-17 17:47:45

求同存异  共同进步
鸿哥-深 2014-12-17 17:47:49

@Inc-东莞
如果你连续发送一串数据的时候,不加延时,很容易出错。今天曹健也是因为这个问题引起的。我以前也是因为这个问题在很多项目上遇到过。
Inc-东 2014-12-17 17:47:53

在我们采用校验,定时器检测,如果这样延时空等,这就浪费了CPU的效率
Inc-东 2014-12-17 17:48:32

采用了定时器检测,和接收校验,我可以说不会出现这种问题,采用FIFO接收,没有问题
Inc-东 2014-12-17 17:49:11

串口本来就是很慢的一个东西,太成熟了,是不会轻易出现这种问题的
Inc-东 2014-12-17 17:49:14

除非
Inc-东 2014-12-17 17:49:18

是接受的方式不对

鸿哥-深 2014-12-17 17:49:43

@Inc-东莞
这个跟FIFO和校验没关系。这个延时物理层面的延时。一旦因为这个延时导致数据发送不稳定,你会一直发送出错,不是偶尔的问题



乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-30 01:48 , Processed in 0.164755 second(s), 18 queries .

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