STM32F103:定时器是否会干扰uart?

时间:2017-12-28 10:46:30

标签: stm32 uart usart stm32f1

我有一个简单的程序,它从UART接口接收数据并驱动WS2812b LED灯条。因此,我使用USART3接收数据(在IRQ模式下)和T3C2(定时器3,通道2)来驱动LED。以下是代码:https://hastebin.com/rucumovero.cpp

如果我在没有启用计时器的情况下使用uart界面 - 一切都很完美,但是当我启用它时 - 我开始丢失数据。例如,这里是日志,如果我发送5个类似的32字节数据包[0x41..0x60]

testMatchers

每次丢失3~4个字节。

我尝试使用不同的波特率,不同的usart端口 - 结果是一样的。第142行有设置定时器间隔:

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

,其中

timer_set_period(TIM3, WSP);

如果我要评论这条线 - 问题会消失,但是,当然,如果没有它,我将无法驱动LED。

因此,看起来我无法同时驱动WS2812b LED并从UART接收数据。是否假设表现得像这样?知道我该怎么办呢? 非常感谢你!

2 个答案:

答案 0 :(得分:0)

似乎定时器的中断影响了串口接收中断。

答案 1 :(得分:0)

请检查串行中断优先级是否高于其他优先级。