2395320_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2395320_ja-JP

2395320_ja-JP

S32K144シリアル通信で受信したデータは抽出できません。

DWINタッチスクリーンとS32Kマイクロコントローラ間のシリアル通信リンク機能を開発しています。タッチスクリーンがデータを送信し、マイクロコントローラがデータを受信して判定する際に、判定のためにデータの9ビット目を抽出し、それに応じて異なるCANデータを送信したいと考えています。しかし、データの抽出がうまくいきません。経験豊富な開発者の方々からのご助言をいただければ幸いです。

ffdsg_0-1784107803435.png


Re: S32K144串口通信接收的数据提不出

こんにちは、 @ffdsg さん

DWINのタッチスクリーンの経験はありませんが、ざっと調べたところ、フレーム構造はフレーム終了時に「\n」マーカーを使わず、最初の2つのヘッダー(5AとA5)を送り、その後にフレームの長さ(06)を送信しているようです。

Julin_AragnM_0-1784234811870.png

ですので、おそらくUARTコールバックを編集して、3バイト目で受信を止めることができるでしょう。例えば:

	void LPUART1_RX_ISR(void *driverState, uart_event_t event, void *userData)
{
    (void)driverState;
    (void)userData;

    if (event == UART_EVENT_RX_FULL)
    {
        bufferIdx++;

        if (bufferIdx >= 3) {
            uint8_t frameLen = buffer[2]; /* number of bytes after length byte */
            uint8_t totalLen = 3 + frameLen; /* header(2) + length(1) + payload */

            if (bufferIdx >= totalLen) {
                /* Full frame received */
                memcpy(rxdata, buffer, totalLen);
                keyNum   = rxdata[8];                    /* 9th byte*/
                memset(buffer, 0, sizeof(buffer));
                bufferIdx = 0;
                trigger = 1;
                LPUART_DRV_ReceiveData(INST_LPUART1, buffer, 1);
                return;
            }
        }

        LPUART_DRV_SetRxBuffer(INST_LPUART1, &buffer[bufferIdx], 1U);
    }
}

これにより、常に9バイト目を読み取ることができるようになります。

また、ルーチン内で以下の行をコメントアウトしています。

//if (keyNum==0X01) {

つまり、9バイト目が何を言ってもCANメッセージは常に同じです。

残念ながら、DWINのタッチスクリーンはサードパーティ製デバイスであり、当社のサポート範囲外であり、当ハードウェアのルーチンは提供していません。これらの変更は、ご自身のシステム環境で実装およびテストする必要があります。

よろしくお願いします、
ジュリアン

Tags (1)
No ratings
Version history
Last update:
Friday
Updated by: