71

帖子

0

TA的资源

一粒金砂(初级)

21
 

另外,没有超时,可以用定时器来测量!

                                 前面有人说过了,是可以这样的。
此帖出自stm32/stm8论坛
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

22
 

不过,由于有DMA,那就得另说了

                                 但超时还是有必要的
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

23
 

在工控领域,串口还是最实惠的。

                                  
此帖出自stm32/stm8论坛
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

24
 

其实STM32也有其优势

其实STM32也有其优势:
IO脚比流明的要多,引脚排列规则一些;
个人觉得:在不需要UART的地方都用STM32,其他另考虑
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

25
 

呵呵,好像没有FIFO STM32的UART还不能用了

“其实STM32也有其优势.......在不需要UART的地方都用STM32”,这是不是说没有FIFO的UART很不好用?

试想要传送100个字节,如果通过一个深度为16字节的FIFO,则至少要中断7次才能传送100个字节;如果使用DMA,则只需在传送结束时中断一次。哪个更高效?


对于Modbus RTU这样的协议,使用DMA也不会比使用FIFO效率低:

Modbus的请求数据包都是由下面几部分构成:
一、从机地址;固定为一个字节
二、功能代码;固定为一个字节
三、功能参数;长度依不同功能代码而不同
四、数据域;长度在功能参数中定义
五、校验码;固定为两个字节

下面以功能代码=0x03的数据包交换说明如何使用STM32进行数据传送:
1、主机发送8字节:
  从机地址:  1字节
  功能代码:  1字节 = 0x03
  起始地址:  2字节
  读取数目:  2字节 = N
  CRC校验码: 2字节
2、从机先接收2字节,当得知功能代码为0x03时,再继续接收6个字节
3、从机发送 N*2+4字节 = (1字节功能码+1字节数据长度+N*2字节数据+2字节校验码)
4、主机接收从机发出的(N*2+4)字节数据。因为主机知道N的数值,所以主机知道从机响应的数据包的长度

这里可以看到,如果没有FIFO,需要在上述第2阶段从机接收主机请求时分为两个步骤进行;而在其他的阶段使用DMA的效率不比使用FIFO差,而且在第4阶段,如果数据包长度大于FIFO深度时,使用DMA的效率更高!
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

26
 

16楼的说法,只用一路串口当然没啥啦

你试试把STM32的5路UART串口同时用上吧。
38400的波特率。

另,赞同23楼 徐兄的说法。
×××××××××××××××××××××××××××××××××
 netjob 发表于 2008-6-10 18:12 ST MCU ←返回版面    

21楼: 没有 FIFO 问题是不是很严重? 

我得ARM7系统,不管是ATMEL还是NXP的都只使用了FIFO 一个字节中断。也没问题。

如果用【9600】 BPS. 则大若是  【1】毫秒 中断一次!
中断程序耗时大概是 【0.5】 微妙吧!

如果是16字节的FIFO. 最多是 【16】毫秒中断一次! 
××××××××××××××××××××××××××××××××× 
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

27
 

俺对Modbus不熟悉,请问Modbus最高波特率是多少?

Modbus的最高波特率能达到38400?难道你真有必要多路UART在同一时刻同时多路传输不定长数据包?

凭空理论上讨论没有意义,能否给个具体实例,我帮你分析如何实现,我可不想过多的进行这种纸上谈兵。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

28
 

你们用过luminary的串口FIFO吗??

最近在用LM3S8962,上个星期写串口程序

呵呵,有周立功的例子及LM的库文件确实方便,可利用串口中断实现发送和接收时,发现FIFO不好用哦,程序发和收数据都用了FIFO方式

发送数据时,主程序中启动发送并填充发送FIFO,后续数据由发送中断完成填充,利用一个全局变量记录发送中断此数,看看发送一帧数据到底发生了几次发送中断,可惜每次读出的值不太一致,不过总的来说发送FIFO还是起作用了。

接收数据时,利用接收中断读取接收FIFO,在接收中断中开启了超时中断,利用两个全局变量分别记录接收中断和超时中断次数,结果是两个中断次数加起来等于我接收到的数据个数,也就是说接收FIFO根本没起到作用啊,设置了不同的接收FIFO深度,都一样,只是超时中断及接收中断次数变化了,但两个之后还是没变,真是晕,利用的是例子程序哦。

不知是咋回事,难道那个地方没注意。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(高级)

29
 

28楼:关键是你没有延时无法判断什么时候是一个帧的开始和

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

30
 

STM32的5路UART串口 & 38400的波特率

  同时用上STM32的5路UART串口,即使都使用38400的波特率,会消耗多少STM32的CPU资源?
  即使在最耗CPU的接收阶段,我看也耗不了多少资源:总共约等效于200k的波特率,消耗STM32的CPU资源 < 5%(或许 < 2%),有必要那么担心吗?
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

31
 

没有硬超时算是遗憾,谈谈我以前玩串口的感受

两个独立的设备用串口通信进行互联,可能发生一切状况,唯一的两边都可以独自判断的物理条件,就是时间了。
----用老铁路的话来说:耗子把线咬来吃了,小偷把线偷去卖了咋办。

我对高可靠性串口通信的一个基本总结就是:各自安装自己的“超时闸门”,过时不候,判故障。串口在一个系统里可以多到多少?----MOXA有256口的串口卡!

对以实现一个健壮的、可自我恢复的、故障隔离的集散式串口通信网络来说,这个是非常重要、必须的。如果有硬件超时,当然可以从中受益匪浅,以前用51和PC上basic搞的系统,还不是只有软件来实现“时间闸门”。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

32
 

错了,应该是回版主

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

33
 

回楼上:STM32的UART具有错误检测功能

“如果主机需要接收10字节,而实际上由于不可预测原因,只受到9字节,程序是傻等待呢?”

只要从机发出了这10个字节,通常不会完全收不到,但有可能某个字节被干扰破坏;STM32的UART具有错误检测功能,可以检测各种错误,包括奇偶校验错、帧错误、噪声错误等,当使用DMA传输时,任一种错误都会产生中断。

对于从机中途出故障的情况更容易处理,只需通过一个定时器在第一个字节到达后开始计时,或按照我在下面帖子中6楼所描述的方法解决:请教Modbus高手makesoft:实现Modbus协议一定需要超时检测吗?
 

当然,有硬件的超时功能当然好,但没有硬件的功能时,多数情况下也可以通过一些软件的方法解决。
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

34
 

偶现在用的LPC2194

                                 定时器干PWM去了,哇!只好把PWM的中断来生成系统滴答了! 好悲痛哦,盼STM32好啊,最后还是计划用这个的,LPC来得快------抄代码容易些,先把项目进度顶上再说了。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

35
 

回香版:

通信协议一般不要使用奇偶校验----------------------------如果你在某些情况下需要使用商用调制解调器就知道, 都不支持11位的。

“帧错误”是什么意思?硬件检错?
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

36
 

回版主:

用STM32的DMA串口接收数据时,如果没有达到设定的接收数量时,能读出已经接收的数据数量吗?
其实我很想应用STM32!!!
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

37
 

STM32的DMA寄存器中有一个计数器,数据传输时随时变化

读取这个寄存器的值即可知道还有多少数据未传输完。

这个寄存器的名字是:DMA_CNDTR,详见STM32技术参考手册。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

38
 

回版主:

能读出数量,那就间隔读取并判别长度变化
试验中...
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

39
 

回版主:向版主学习,可以给个QQ号联系不?我的352241582阳

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

40
 

没有QQ,也不做单独辅导,有问题在论坛讨论吧

                                 这样既可以留个记录,也可以让更多人受益。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表