通过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以下。 |