我有一个简单的程序,它接收数据从串口和驱动WS2812b发光二极管条带。因此,我使用USART3接收数据(在IRQ模式下),使用T3C2 (定时器3,通道2)来驱动LED。下面是代码:https://hastebin.com/rucumovero.cpp
如果我在没有启用计时器的情况下使用uart接口-一切都运行得很完美,但当我启用它时-我就开始丢失数据。例如,这里的日志是如果我发送5个类似的32字节数据包0x41..0x60
read 29 byte(s): 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
read 29 byte(s): 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 60
read 28 byte(s): 41 42 43 44 45 46 47 48 49 4A 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5D 5E 5F 60
read 29 byte(s): 41 42 43 44 45 46 47 48 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 5A 5B 5C 5D 5E 5F 60
每次丢失3~4个字节。
我尝试使用不同的波特率,不同的usart端口,结果是一样的。在第142行有设置计时器间隔:
timer_set_period(TIM3, WSP);
哪里
#define TICK_NS (1000/72)
#define WSP (1300 / TICK_NS)
如果我要评论这行-问题将消失,但,当然,我将无法驱动LED没有它。
因此,看起来我不能同时驱动WS2812b leds和接收来自UART的数据。它应该是这样的吗?你知道我怎么才能修复它吗?非常感谢!
发布于 2018-01-05 11:15:06
似乎是定时器的中断影响了串口接收中断。
发布于 2018-01-09 14:14:51
请检查串行中断优先级是否高于其他优先级。
https://stackoverflow.com/questions/48006034
复制相似问题