私は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からデータを受信できないようです。このように行動すると思われますか?どのように私はそれを修正することができますアイデア? ありがとうございます!
と推測してください。あなたはuart割り込みを逃します。フラグをチェックし、参照してください。はいの場合は、割り込みの優先順位を変更します。 –