
STM32F3 シリーズにて DMA を利用した UART 通信の受信を行ってます。
通信するデータは 7Byte 1Set の固定データで、連続して送信されます。
デバッグを開始して最初の 7Byte は受信できるのですが、それきり受信が止まってしまいます。
何か考えられる原因はありますか?
該当すると思われる箇所のコードを以下にピックアップします。
UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_usart1_rx;
#define USART1_RX_LEN 7
uint8_t USART1_RXD_Buffer[USART1_RX_LEN];
int main(void)
{
HAL_Init();
SystemClock_Config();
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_1);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 1);
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
HAL_UART_Receive_DMA(&huart1, &USART1_RXD_Buffer[0], USART1_RX_LEN);
while (1)
{
}
}
ちなみに、最初に 7Byte を正常に受信した後、
huart1.Lock = HAL_UNLOCKED
huart1.State = HAL_UART_STATE_READY
huart1.ErrorCode = HAL_UART_ERROR_NONE
hdma_usart1_rx.Lock = HAL_UNLOCKED
hdma_usart1_rx.State = HAL_DMA_STATE_READY
となってます。
(この状態で受信も受信による割り込みも発生しない状態になってしまいます。)
No.1ベストアンサー
- 回答日時:
HAL_UART_Receive_DMA()が繰り返し実行されるようになっていないため,一回しか受信しません。
HAL_UART_Receive_DMA()及びバッファを取り出す処理をwhileループの中もしくは
あなたが本来意図している場所に置く必要があるでしょう。
何も考えてないんだとは思いますが。。。
余力があれば:
>通信するデータは 7Byte 1Set の固定データで、連続して送信されます。
受信側での取りこぼしを避けるために連続送信させずに,送信側を待たせる方法があります。
「フロー制御」等についても調べてみてください。
ご指摘の通り、ループ内に以下のコードを追加したところ、無事に連続受信できました。
if((huart1.State == HAL_UART_STATE_READY) && (hdma_usart1_rx.State == HAL_DMA_STATE_READY))
{
HAL_UART_Receive_DMA(&huart1, &USART1_RXD_Buffer[0], USART1_RX_LEN);
}
的確なアドバイス、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- ネットワーク I2Cのスタートコンディションについて 2 2023/03/03 01:03
- 専門学校 高1男子です。僕はプログラマーを目指しており、大学を目指しています。しかし、念の為専門学校も色々考え 3 2022/07/28 19:05
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- UNIX・Linux ntpq -pの結果が全てstratum 16になっている 13 2022/07/18 12:11
- 特撮 仮面ライダーblackRXの信者っていまだに割と居るのはなぜでしょうか? 別に純粋に作品が好きってな 1 2023/02/04 11:25
- アンテナ・ケーブル 地デジアンテナの向きと中継局について。 栃木県佐野市に引っ越してきました。 戸建てなんですが、茨城県 3 2022/05/11 18:54
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- 政治 「戦争の過ちを繰り返さない」とか言ってる人間は具体的にどうやって日米開戦をかわすつもりですか? 8 2022/11/02 04:02
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
営業時間外にFax送信すると送信...
-
050IP電話の先へFAXが送れない...
-
FAX用紙の左上の日時と氏名につ...
-
FAXが先方に着信したかどうかの...
-
FAX受信したデータをNASにも同...
-
うちにはFAXがないのに、FAXの...
-
faxのない固定番号に何度もfax...
-
非通知で送られてきたファック...
-
転送設定するとFAXは受信できな...
-
スターファックスの送信が以上...
-
PCで受信したFAXが縮む
-
FAX送信後の確認の電話
-
どの相手先にFAXしても「かすれ...
-
excelシートのfax送信
-
通帳の記帳された文字のフォント
-
FAX 通信管理レポート
-
テプラのインク交換について
-
官公署の開庁時間外であっても...
-
FAXで送信した文書はどこかに保...
-
インクリボンを巻き戻して使いたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
営業時間外にFax送信すると送信...
-
FAXとは何ですか?また、FAXと...
-
FAXで再度印刷する方法
-
FAXが先方に着信したかどうかの...
-
FAX用紙の左上の日時と氏名につ...
-
050IP電話の先へFAXが送れない...
-
迷惑ファックスの受信拒否
-
コンビニから送ったファックス...
-
パソコンの電源を入れてないく...
-
受信したFAXが黒くなる
-
FAX受信した印刷データーだけを...
-
「**G3**」とでて、FAXの受信が...
-
電話への迷惑FAXについて
-
FAXの用紙のサイズ
-
通信速度について
-
電話とFAXの受信音は別々に出来...
-
ADSL兼用回線のTEL側につないだ...
-
メールソフト Thunderbird ...
-
FAX送信が真っ黒。
-
FAX番号と電話番号はなぜ違...
おすすめ情報