OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6532|回复: 6

DMX512 STM32捕获

[复制链接]

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-3-23
在线时间
54 小时
发表于 2018-3-22 19:45:41 | 显示全部楼层 |阅读模式
通过STM32F417配置串口和定时器捕获DMX512信号,设计思路:设置串口开启帧错误中断,接收中断。定时器为捕获中断。
思路:当接收到BREAK信号时,由于停止位为0,串口发生帧错误中断,认为一帧数据开始,然后开启定时器捕获MAB的下降沿,
捕获到下降沿则认为数据有效,串口开始接收数据。


连接方式:DMX传输是485总线,将485转换为串口用的是MAX13487,然后通过串口转485 LOOP到下一个设备上。
DMX波特率为250Kbps,有1个起始位,8个数据位,2个停止位。

这里要讲的不是如何写代码,而是遇到的有趣的问题:

1.假设BREAK=88us,则两个字节的时间一直为低电平,这样串口采到的第一个字节停止位低电平,则进入帧错误中断,
由于第二个字节也一直为低电平,则串口不认为是一个字节,也不会继续进入帧错误中断。(不知理解的对不对,请各位大神指教)
2.经过MAX13487后,串口转485信号在固定的频率下出现衰减,如图一,在500Kbps,750Kbps出现衰减,或是信号失真。
级联越多台设备,出现的衰减就越严重。如原来的1.31us高电平,经过3台设备级联后,衰减成10ns以下。




图一

图一
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2018-3-23 08:07:08 | 显示全部楼层
break信号大于88us,用帧错误检测break信号是可以的,看你是做灯光行业的
回复 支持 反对

使用道具 举报

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-3-23
在线时间
54 小时
 楼主| 发表于 2018-3-23 08:52:43 | 显示全部楼层
Electronic 发表于 2018-3-23 08:07
break信号大于88us,用帧错误检测break信号是可以的,看你是做灯光行业的

非常感谢您的回复,我不是做灯光行业的,只是刚好有客户需要做的。
冒昧的问一下,如果=88us,用帧错误检测break,是只会产生一次帧错误中断吗,还是有两个个字节的低电平,就产生两个帧错误中断?
回复 支持 反对

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2018-3-23 09:00:19 | 显示全部楼层
qianyuyu 发表于 2018-3-23 08:52
非常感谢您的回复,我不是做灯光行业的,只是刚好有客户需要做的。
冒昧的问一下,如果=88us,用帧错误 ...

只会产生一个,然后紧跟着是SrartCode,一般是0x00,最高位为1,一个断开帧可以认为是一帧数据的开始,也可以认为是一帧数据的结束
回复 支持 反对

使用道具 举报

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-3-23
在线时间
54 小时
 楼主| 发表于 2018-3-30 17:58:39 | 显示全部楼层
Electronic 发表于 2018-3-23 09:00
只会产生一个,然后紧跟着是SrartCode,一般是0x00,最高位为1,一个断开帧可以认为是一帧数据的开始,也 ...

非常感谢
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-5-10
在线时间
8 小时
发表于 2019-5-17 14:38:02 | 显示全部楼层
Electronic 发表于 2018-3-23 09:00
只会产生一个,然后紧跟着是SrartCode,一般是0x00,最高位为1,一个断开帧可以认为是一帧数据的开始,也 ...

请问一下,最高位为1是什么意思?我现在的芯片只支持5~8bit数据传输,所以就设置2bit停止位,startCode发送0x00,但接收方接收不准确。改如何处理呢?
回复 支持 反对

使用道具 举报

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
发表于 2020-10-12 15:33:10 | 显示全部楼层
我最近也是接到类似的项目, 请问楼主有485发送代码吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-29 23:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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