返回该小组首页 回复主题
id001

id001

小组等级:     E币:237  (E币换礼)

#1楼主:如何通过DMA接收串口数据?

文章发表于:2008-07-08 11:57

 

串口设置成接收到8个字节后产生DMA中断,若一次通讯中发送端只发送了7个字节数据。

那这种情况下如何得知串口已接收到了7个字节数据?

 

谢谢

id001

   小组等级:    E币:237  (E币换礼)

#2

文章发表于:2008-07-09 00:04

end的时间采用的12小时制?

我晚上23:57发的,显示的11:57

STM32

   小组等级:    E币:4165  (E币换礼)

#3

文章发表于:2008-07-09 08:03

 函数DMA_GetCurrDataCounte()

id001

   小组等级:    E币:237  (E币换礼)

#4

文章发表于:2008-07-09 11:11

解决不了问题、

STM3210xx串口要是有超时功能就好了。

 

问:如何用STM32的资源做个类似与超时的功能??

STM32

   小组等级:    E币:4165  (E币换礼)

#5

文章发表于:2008-07-09 12:39

请看这个讨论:请教Modbus高手makesoft:实现Modbus协议一定需要超时检测吗?

sjx_gcl

   小组等级:    E币:56  (E币换礼)

#6

文章发表于:2008-07-10 14:02

我采用STM32F103系列,  串口DMA接收与DMA发送,  每隔多次通讯后,  DMA发送总会少一个字符,而且少掉的字符会出现在一帧的任意位置, 导致PC机无法接收完整的一帧而报错.  后来把DMA发送改成串口中断发送,就解决了这一个问题.   我是采用BUSHOUND进行实时监控,  同时PC机在报错时进行查看后发现该问题,有没有高手指导一下。

STM32

   小组等级:    E币:4165  (E币换礼)

#7

文章发表于:2008-07-10 14:47

#6的这个问题比较棘手,请问每次传送出错时DMA的指针和计数器内容是否正确?串口传送的波特率是多少?

现在要确认的是,PC端无法接收完整的一帧是因为STM32没有发送出所有字节,还是STM32发送出了所有字节但PC端的驱动遗漏了数据。改成串口中断发送就解决了这一个问题,一个可能的解释是字节与字节之间的间隔比用DMA方式变大了,使得PC端的驱动有充分时间响应。

这里还有一个因素:你提到“采用BUSHOUND进行实时监控”,请问是否使用了USB转串口的转接器?你能保证这个转接器在字节间隔很小时不遗漏数据吗?

STM32

   小组等级:    E币:4165  (E币换礼)

#8

文章发表于:2008-07-10 15:39

可以尝试使用2个停止位,这样可以增加字节与字节之间的间隔。

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销

所有小组精华文章