seraph15 发表于 2023-5-8 10:43:03

请问一个串口接收和模拟WS2812信号共存的问题

我用的是STC8G2K32S4

使用了串口1、2
除了串口以外,我还有另一个引脚专门输出模拟的WS2812信号(简称模拟信号)
初始化并使能串口1、2时,模拟信号会不稳定(最直观的是WS2812的LED乱闪)
这时我在模拟信号准备发送前,关总中断(EA = 0)
并且在发送完毕时开启总中断(EA = 1)
但这会导致串口1接收不正常(串口1只用于收)(串口2倒是收、发正常)
我再把EA = 0,EA = 1这两行拿掉,导致了LED乱闪,但是串口1接收变正常了
这问题应该如何解决呢?谢谢

8H8K64U 发表于 2023-5-8 11:42:26

以下来自工程师:
WS2812需要严格的时序信号控制,中间不能受中断干扰。串口随时接收数据的话需要通过中断,如果关闭总中断时有数据传输的话就会导致数据丢失。两者矛盾是不可调和的。可以考虑重发机制,WS2812控制期间关闭中断,如果这段时间串口接收数据丢失的话,让对方重复发送,直到MCU收到完整串口数据并进行应答后才停止重发。

seraph15 发表于 2023-5-8 16:44:53

STC8H8K64U 发表于 2023-5-8 11:42
以下来自工程师:
WS2812需要严格的时序信号控制,中间不能受中断干扰。串口随时接收数据的话需要通过中断 ...

谢谢回复,我能否先问一个问题,如果在总中断关闭的期间,刚好串口有数据进入,此时RI会被硬件置1,是吧?在后续总中断开启的时候,就会进入中断函数了,我这样理解对吗?

乘风飞扬 发表于 2023-5-8 17:26:21

seraph15 发表于 2023-5-8 16:44
谢谢回复,我能否先问一个问题,如果在总中断关闭的期间,刚好串口有数据进入,此时RI会被硬件置1,是吧 ...

理解没错,中断虽然关闭,但是只要满足中断条件,标志位就会被置位,只是不会产生中断行为。中断开启时标志位已经置位的话,就会进入中断函数。

电子DIY小家 发表于 2023-5-9 17:57:09

换MCU吧,找个带DMA的能很大程度的解决问题

神农鼎 发表于 2023-5-9 18:34:17

STC8H8K64U-45MHz-LQFP48/32,DMA 支持:【4组串口,SPI,ADC,TFT】

神农鼎 发表于 2024-1-9 08:49:16

SPI方案:
只用到MOSI驱动WS2812,但由于SPI的3个信号是捆绑在一起的,MISO、SCLK不能做它用。
===将 MISO 不做其他用途;
===将 MISO管脚 先设置为对外输出0;
===MOSI 发送完成后,对外停止时输出的是 MISO 读到的状态, 0 ,这 STC-R&D 留了这么个绝活支持 WS2812B !!!

页: [1]
查看完整版本: 请问一个串口接收和模拟WS2812信号共存的问题