2017-12-28 21 views
0

私はUARTインターフェースからデータを受け取り、WS2812b LEDストリップを駆動する簡単なプログラムを持っています。そこで、USART3を使ってデータを(IRQモードで)受信し、T3C2(タイマ3、チャネル2)を使ってLEDを駆動しています。ここにコードがあります:https://hastebin.com/rucumovero.cppSTM32F103:タイマーがuartに干渉することはありますか?

私はタイマーを有効にしないで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ポートを使用しようとしました - 結果は同じです。問題は消えますが、もちろん、私はせずにLEDを駆動することができません - 私は、この行をコメントする場合は

#define TICK_NS (1000/72) 
#define WSP (1300/TICK_NS) 

timer_set_period(TIM3, WSP); 

:ライン142でタイマー間隔が設定されますそれ。

私はWS2812b LEDを駆動できず、同時にUARTからデータを受信できないようです。このように行動すると思われますか?どのように私はそれを修正することができますアイデア? ありがとうございます!

+3

と推測してください。あなたはuart割り込みを逃します。フラグをチェックし、参照してください。はいの場合は、割り込みの優先順位を変更します。 –

答えて

0

タイマの割り込みがシリアルポート受信割り込みに影響を与えたようです。

0

シリアル割り込み優先度が他の優先度より高いことを確認してください。

関連する問題