0

2 つのデバイス (コンピュータと STM8S2 ボード) 間の UART1 通信に問題があります。

STM8に2バイト長のデータを書き込むソフトウェアをコンピュータに実装しました

• 識別子として機能する最初のバイト。

•2 バイト目は、VLS メモリに書き込みたいデータでした。

ただし、STM8 では、最初のバイトのみが読み取られ、2 回、たとえば、識別子 0xb7 とデータ 0x90 が送信されましたが、バイト 0xb7 のみが (0xb7, 0xb7) としてバッファーに格納されました。

現在、UART割り込みを介して毎回1バイトの長さを読み取るように実装していますが、データの場合、ファームウェアがバグを起こしやすくなる可能性があり、識別子バイトの同じ値を持つ可能性があります。

最善の解決策は、2 バイトのデータとして送信することだと思います。しかし、どうすればそれを実装できますか、または最初のバイトだけが繰り返し読み取られるのはなぜですか?

以下は、STM8 でデータを受信および書き込みするための関数です。

void UART1_ReceiveBytes(uint8_t * buf, uint8_t numberOfBytes)
{
    while (numberOfBytes > 0){
        *(buf++) = UART1_ReceiveData8();
        numberOfBytes--;
    }
}


void UART1_SendBytes(uint8_t *data, unsigned int numberOfBytes)
{
    while (numberOfBytes > 0) {
        UART1_SendData8(*data++);
        numberOfBytes--;
        while(UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
    }
}

UART セットアップ:

void UART1_setup(void)
{
    UART1_DeInit();
    UART1_Init( 9600, 
                UART1_WORDLENGTH_8D,
                UART1_STOPBITS_1,
                UART1_PARITY_NO,
                UART1_SYNCMODE_CLOCK_DISABLE,
                UART1_MODE_TXRX_ENABLE);
    
    UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
    enableInterrupts();
    
    UART1_Cmd(ENABLE);
}

STM8に送信されるデータのサンプル

ここに画像の説明を入力

Cosmic コンパイラで ST Visual Develop を使用しています。

前もって感謝します

4

1 に答える 1