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 を使用しています。
前もって感謝します