5814|14

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于jackbao的帖子【重大发现串口发送数据问题】的个人理 [复制链接]

我回复了 怎么帖子跑不到顶页啊!!! 难道这个帖子时间发的太早了!!!

帖子地址:
https://bbs.eeworld.com.cn/club/bbs/list.asp?boardid=49&t=3213222&tp=%u91CD%u5927%u53D1%u73B0%26nbsp%3B%26nbsp%3B%u4E32%u53E3%u53D1%u9001%u6570%u636E%20%u95EE%u9898

=========================================

我把我的回复 粘贴过来  哪位看看我说的有没有道理????????????????????????????????????????????????????????????????????????????????????????也可能是胡说八道  呵呵呵!!!!!!!!!!!!!


==================================================
波特率9600

1ms发一串  试了多个串口软件

【有两个软件动不了了!】
【有一个是这样的】

倰倐要傄倸倐要傄偄倐要傄偑倐要傄偛倐要傄偤倐要傄偮倐要傄偸倐要傄妭倐要傄妸倐要傄姃倐要傄姎倐要傄姠倐要傄姫倐要傄姴倐要傄姾倐要傄娐倐要傄娛倐要傄拏倐要傄拪倐要傄拻倐要傄挌倐要傄挗倐要傄挭倐要傄挷倐要傄捄倐要傄捖倐要傄捠倐要傄殏倐要傄殜倐要傄殥倐要傄殮倐要傄殺倐要傄毆倐要傄毑倐要傄毢倐要傄毬倐要傄毷倐要傄
此帖出自stm32/stm8论坛

最新回复

                                     详情 回复 发表于 2009-5-29 23:25
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

刚才试验了 9600时候是乱码 ,改成115200没乱码了 呵呵

                                 有没有乱码和 发送频率有关系的! 和串口软件关系不大
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

如果UART的速率是9600,则每个字节至少需要1.042ms

每个字节至少包含1个起始位+8个数据位+1个停止位,所以发送一个字节至少需要10位数据的时间,9600波特率下10位的时间是:10/9600 = 1.042ms。

从计算看出1ms不足以送出一个字节,不知道楼主是如何每1ms发一串的?楼主能解释一下吗?
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 

哦 我的意思是1毫秒 发一串 ,但是发送成功与否就不管了

有的 在 缓冲器里面就被刷掉了!


=======================================
不管怎样,我觉得我的解释是完全错误的!!!!
这个东西想得太多也没有什么用处 一点实际意义也没有!!!

另外,香主说:发送一个字节至少需要10位数据的时间。 这大概是绝大多数人的想法。但是如果只发送出去9位,就是说停止位没有发送出去,那么这个字节应该也算发送成功了啊!!!停止位应该是与起始位 不大一样。停止位好像是是找了个特殊的地方存放的。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 

哈哈,你的程序不去判断前面的数据是否已经发送出去,这

你的程序不管三七二十一,在发送缓冲区还没有腾空的情况下,硬要向里面写数据,岂有数据不乱之理?

USART模块已经设置了判断标志位,为你指出发送缓冲区是否为空,你自己不用它结果导致数据错误,确要说这是 【【【【【【【【【【【【【STM32设计的重大漏洞】】】】】】】】!!!!!

这个逻辑是不是有点滑稽呢?呵呵~~~~~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 

哦 是这样的!!!

确实有滑稽!!!

我试验用的程序是判断了标志位的。
/* Loop until the end of transmission */       
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {
   ;
}
===================================================

但是我的解释”============
是因为那个51移位寄存器是左边由某某某强制填充上一串数字1.这样好处就是不会乱码 坏处就是浪费时间。

这个STM32寄存器看样子 是没有用1填充的。即便所有的位没有跑出移位寄存器,缓冲期里面的字节就跑到移位寄存器里面了。因此把原来的字节"冲"掉了一部分,没有一个完整的了。因此全是乱码。 STM32这样设计也有好处。就是如果发送的合适的话, 极限速度肯定比51的快!!!!
========================== 【是按照没弄标志位解释的】!!!!!!!!!!!!!!


哈哈!!!!

此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 

5楼香水城说:

在发送缓冲区还没有腾空的情况下,硬要向里面写数据,岂有数据不乱之理?

为什么要乱啊!!!!????

没有腾空 就写数据,为什么要乱????
你这是想象吧!!有什么根据么??

我觉得只要起始位能钻进 移位寄存器 ,那么这个字节一定能够发送成功。
51是这样,STM32应该也是这样的。否则STM32真就是设计问题了!!!

=======================================
另外更正一下:51移位寄存器是左边由某某某强制填充上一串数字1.  应该填充的是数字0.

=========================================

至于为什么有乱码?不大清楚,可能是串口助手太弱了吧
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 

一般来说,不按软件正常流程做的话,多少也会出点问题的.

例如STM32的SPI接口,如果没有配置SPI就用WHILE来判断标志位,就会变成死循环.
51有些不合理操作都不出问题,应该是因为51经历了很长时间的磨练,设计师们多少考虑了点变态情况吧.
不过说实在一点,在使用STM32的这段时间中,的确发现STM32在硬件安全上是缺少了点冗余度的设计的,SPI,UART,I2C,还有后备寄存器等我都试过出过一些特别状况,不过要详细说却有点模糊,但只要配置好寄存器,按正常而保守的办法来做,暂时就没发现过有什么问题.
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

五彩晶圆(中级)

9
 

硬件冗余的结果必然是芯片成本的上升

芯片成本的上升会通过整个产业链条,影响最终产品的价格,而且是一个固定的不可变的成本。而软件开发的成本,对于最终产品而言,是一个可变成本,目标产品卖得越多,每个产品分摊的软件成本越低,所以我们应该尽可能地把最终产品的成本从硬件转嫁到软件上,而不是反过来。

前几天有个网友说了一句话,大致意思是:芯片的设计是让你用正常的方法使用的,而不是随便怎么用都能发挥正常功能的。


关于楼主提出的问题,我认为不是因为移位寄存器没有传输完毕,缓冲器的数据就跑到移位寄存器里的缘故(STM32的设计不会产生这样的问题),而是因为STM32的发送速度足够快,你的上位机失去同步而造成。

所谓发送速度快表示STM32发送的数据信号,在一个字节的停止位之后立即发送下一个字节的起始位,停止位与起始位之间是没有间隔的,如果上位机不能准确地捕捉到某个字节的起始位,则它将没有机会重新同步下位机的数据,因为停止位被识别为一个普通的数据位了。

反观你在51上没有产生数据错位,我估计是因为51速度慢,在停止位与起始位之间有时沿,使得实际产生的停止位长于一个数据位的时间,这将非常有利于上位机的同步。而当你把STM32的波特率提高,无形中大大拉长了停止位的时间。因此,你可以试试在STM32的测试中,设置为1.5个或2个停止位,应该大大减少上位机的问题,甚至解决这个问题。

你可以用示波器观察,验证我的分析。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 

香主,好啊


===========================
我的EDN博客评论提交不了 不知道怎么回事?
====================================

你在我博客留言问

我没有注意到“CM3强制规定:SubPriority至少要占一个位”。请博主指出具体出处,手册中的哪一页?

我是在翻译版《CM3权威指南CnR2》里面看到的。文章说:这种优先级分组做出了如下规定:子优先级至少是1个位。因此抢占优先级最多是7个位,这就造成了最多只有128级抢占的现象。

=============================================================

还有一个事情很有趣。我刚才百度搜索了一下,结果发现一个博文:http://blog.ednchina.com/likezq/135557/message.aspx#feedback
也是你评论的:哈哈,先顶一下,再问一个问题:你所说的“按照权威说法必须有一位子优先级”,请问这个权威说法的出处是哪里?
 
那个博主的解释和我博客文章意思是一样的
 
=================================
文章内容几乎相同,评论也一样!有趣!!!
世界之大,无奇不有!!!!
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

11
 

哈哈,原来那是您老兄的大作呀

我看了你在10楼给的链接,你好像理解错了,我是在留言中问那篇博客的博主,权威说法的出处是哪里,而不是我引用了某种“权威说法”。

下次见到译书的宋大侠,我要当面请教一下这个问题了,呵呵~~~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 

回楼上

11楼的香主肯定是理解错了!

你在11楼说:“而不是我引用了某种“权威说法”。”

表明了你理解为:“请问这个权威说法的出处是哪里?”是我问你的。

可是事实是:“请问这个权威说法的出处是哪里?”这句话是你问那个博主的。

=====================================================



此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

13
 

11楼的香主肯定是理解错了!我也是这么认为的

                                 不好意思,引号太多,看花眼了,呵呵~~~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

14
 

UART这么成熟的东西,出错的机会很小

Tip: 注意停止位的问题
发送方的停止位设置一定要大于或等于接收方的停止位设置

另外,跟什么“串口助手”的关系不大,一个PC软件而已,还到不了混乱bit问题。
还是建议楼主仔细check自己的Firmware代码,重点是波特率和停止位
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

15
 

爱一颗芯,要爱她的优点,也要爱她的缺点,很多时候需要

                                  
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表