OpenEdv-开源电子网

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

战舰开发板stm32f103,串口2如何侦测DMX512的break,棘手

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-30
在线时间
6 小时
发表于 2018-8-30 20:05:10 | 显示全部楼层 |阅读模式
1金钱
用战舰stm32f103开发,串口2,接收DMX512协议信号。
如图DMX512信号来临前,会有一个持续大于88us的低电平,然后开始真正的串口数据;
现在无法识别这个break信号,希望有高手能帮忙,卡了一周了,



关于这个break:
发送端是这么处理的:发送端将TX引脚发送持续88us的低电平;然后再开启串口数据发送。

关键问题点 在于:接收端如何识别串口接收引脚,串口数据来临前先有的这个低电平(即break)信号,程序的后面框架是当识别了break来临,串口接收数据;每次break来临,串口数据才接收放置数组。

dmx512 break

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-8-31 02:07:40 | 显示全部楼层
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-30
在线时间
6 小时
 楼主| 发表于 2018-8-31 09:39:17 | 显示全部楼层

原子哥可有什么好的思路
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2018-11-4 22:04:04 | 显示全部楼层
我是做这个行业的,DMX512是必备的,波特率是250k,也就是一位4us,正常情况下,一个字节是36us。需要检测到break,如果是以前的51单片机,那就把串口配置为9位数据,程序只要检测到9位全部为0,就为Break,紧接着就是StartCode,如果是STM32的话还有一个方法,串口配置为8位数据为,两个停止位,检测到帧错误,并且接收到的数据是0x00即是Break。
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2019-11-24
在线时间
24 小时
发表于 2020-2-12 17:13:19 | 显示全部楼层
Electronic 发表于 2018-11-4 22:04
我是做这个行业的,DMX512是必备的,波特率是250k,也就是一位4us,正常情况下,一个字节是36us。需要检测 ...

1.请问一下这个break就是对接收程序来说,就表示一串数据发送完毕或者是一串数据的开始,是不是只要在程序里判断出break后就把地址设为0即可开始接收数据?
2.还有一个问题请教一下,DMX512里面的通道和功能有何关系,比如30通道对应的就占用30帧数据,那是不是意味着只有作为从机才有30或者10通道之说?(因为这30通道对应的30帧数据可以用来表示不同的功能,主机端还是发送的是513帧数据,只是把这30帧数据分频给了次从机使用)是不是可以这样理解?
3.还有两个同设备之间主从控制如何确定?比如两个设备都发送数据怎么处理?
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2020-2-17 13:38:14 | 显示全部楼层
本帖最后由 Electronic 于 2020-2-17 13:44 编辑
dw772 发表于 2020-2-12 17:13
1.请问一下这个break就是对接收程序来说,就表示一串数据发送完毕或者是一串数据的开始,是不是只要在程 ...

问题1:我一般把Break信号当作DMX512信号的起始信号,因为比较好判断。接着是StartCode信号,DMX512控台调光数据是0x00,RDM数据0xCC。然后就是数据。192控台发192字节数据,384控台发384字节数据,512控台发送512字节数据l。问题2:一般灯具会设置一个起始地址,一般是1-512,假设灯具占用的地址是16个,地址设置的是1,。那么灯具就是接收字节1-字节16;如果地址设置的是17,则接收17-32字节,依次类推。反正就是从其实地址接受指定个字节。
问题3:看懂了问题1,这个问题就不难了。StartCode作为标识码,0x00则是控台的数据,0xCC是RDM数据,你可以使用一个StartCode最为自己通信使用。当然也可以直接用0x00模拟控台给从机发送数据。
回复

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2019-11-24
在线时间
24 小时
发表于 2020-2-17 19:53:00 | 显示全部楼层
本帖最后由 dw772 于 2020-2-17 20:02 编辑
Electronic 发表于 2020-2-17 13:38
问题1:我一般把Break信号当作DMX512信号的起始信号,因为比较好判断。接着是StartCode信号,DMX512控台 ...

谢谢您的回复,还有个问题:1:比如要实现声控频点高低的调整(这里指的是音乐本身频率比如50HZ的鼓声或800hz的人声,不是灯的频率),如果要用STM32的AD实现,请问该怎么实现?是不是用一个固定的扫描频率去采样AD,采集连续超出阀值的次数来判断此声音的频率,然后来判声控的频点?或者还有什么好的办法请赐教。因为采集的次数又与阀值设置有关系,阀值又关系到灵敏度的设定,难道要根据灵敏度的值(阀值的大小)来确定判断标准吗?
回复

使用道具 举报

1

主题

374

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2014-7-23
在线时间
420 小时
发表于 2020-10-30 23:44:09 | 显示全部楼层
dw772 发表于 2020-2-17 19:53
谢谢您的回复,还有个问题:1:比如要实现声控频点高低的调整(这里指的是音乐本身频率比如50HZ的鼓声或8 ...

采样深度怎么会和阈值设定有关系?ad采样是固定周期的吧,你声控灵敏度是软件处理的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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