0

私は STM32F407 を使用しており、USART3 でデータを受信しようとするプロジェクトに取り組んでいます。

プロジェクトの概要:

ワイヤーを介して特別な PWM シーケンスを送信する必要があります。PWM を送信した後、同じワイヤでシリアル データの応答を即座に受け取りました (USART 標準、8N1)。timer1 更新割り込みで PWM を生成します。最後のパルスの後、timer1 割り込みを無効にし、USART Rx 割り込みを有効にします。次に、通常、シリアル データを受信する必要があります。データを受信して​​リングバッファに保存するコードは、他のプロジェクトでは非常にうまく機能します。

私の問題:

着信するシリアル データは、正しく受信されることがあります (96 バイトのストリーム)。USART 信号をデコードできるオシロスコープを使用すると、正しいデータが USART Rx ピンに到着することがわかります。しかし、USART Rx 割り込みは正しく動作しません。ほとんどの場合、1 バイト (割り込みは 1 つだけ) しか受信しません。ISR をデバッグするために、SR、DR、および CR1 レジスタを配列に保存して、発生したエラー フラグをログに記録しました。レジスタ値は、フレームの受信に毎回失敗し、1 つ以上の異なるエラー フラグが設定されていることを示しています。ノイズエラー、オーバーランエラー、フレーミングエラー。しかし、時々受信が機能する場合は、エラー フラグが設定されていないことがわかります。

エラーフラグの状態に関係なく、USARTにバイトが到着するたびにRx割り込みが生成されると思いました...

エラー フラグがある場合に ISR が 1 回しか機能しない理由がまったくわかりません。

誰かが私を助けることができますか?

更新 1

ここに短い更新があります。私は、USART が PWM 信号を受信することも問題である可能性があると私に言った誰かと話しました。USARTがまだ動作している間に、ピンの状態を出力として変更しようとします。最後の PWM パルスの後、ピンの状態を UASRT Rx 入力として変更します。USART がシリアル信号しか受信できない場合、これで問題が解決する可能性があります。ここに私のプロセスを投稿します。

解決

先週、私は自分の問題を解決しました。

まず、関数が Rx ピンを別のペリフェラルの入力に設定するという問題があります... (._.)

2 つ目の問題は、信号品質の悪さでした。STM32 の USART は、ONEBIT モードで動作する可能性があります。このモード (私が理解しているように) は、各ビットを 3 回ではなく、すべてのビットを 1 回だけサンプリングします。したがって、USART の許容範囲を 3.88% に増やします。

最後に、これは安全のためだけに、保留中の USART 割り込みビットをすべてクリアしてから、USART Rx 割り込みをアクティブにしました。

受信フレームを確実に受信できるようになりました。

コメントとヘルプをありがとう。

4

0 に答える 0