teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

一文追加

2020/01/19 08:59

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -8,9 +8,18 @@
8
8
  ```
9
9
  n = HAL_UART_Receive(&huart1,(uint8_t *)buf3, sizeof(buf3), 0xF);
10
10
  // n == 2 なら
11
- rxbuf[0] = buf3[0];
11
+ rxbuf[0] = buf3[0]; // 一文字目
12
- rxbuf[1] = buf3[1];
12
+ rxbuf[1] = buf3[1]; // 二文字目
13
13
 
14
14
  ```
15
15
  で受信文字を受け取れる可能性があります。
16
- ただし、最低でも char buf3[2]; とかして、buf3[] を2バイト以上にしておくこと。実際はもう少し大きな配列にするんじゃないかな。
16
+ ただし、最低でも char buf3[2]; とかして、buf3[] を2バイト以上にしておくこと。実際はもう少し大きな配列にするんじゃないかな。
17
+
18
+ なお、質問のコードは
19
+ ```C
20
+ if(i<10){ // この i は何?
21
+ rxbuf[i]=buf3[0]; // 常にbuf3[0] をコピーする
22
+ i++;
23
+ }
24
+ ```
25
+ となっており、ループしても、二文字以上受信できていても、 rxbuf[i] には一文字目しかコピーされませんよ。

1

一文追加

2020/01/19 08:58

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -1,4 +1,5 @@
1
1
  そもそも buf3[] をどう定義したのかわかりません。そこを明記してほしいのだけど。
2
+ if(i<10){ という判定も意味不明。i はどこに? 10 としたのはなぜ?
2
3
 
3
4
  y_waiwaiさんがおっしゃるように、
4
5
  n = HAL_UART_Receive(&huart1,(uint8_t *)buf3, sizeof(buf3), 0xF);