【发布时间】:2021-01-10 11:14:21
【问题描述】:
两个设备(计算机和 STM8S2 板)之间的 UART1 通信出现问题。
我在计算机中实现了将两个字节长度的数据写入 STM8 的软件
• 用作标识符的第一个字节;
•第二个字节是我要写入VLS内存的数据,
但是,在 STM8 上,只读取了第一个字节,并且两次, 例如,我发送了标识符 0xb7 和数据 0x90,但只有字节 0xb7 以 (0xb7, 0xb7) 的形式存储在缓冲区中。
现在我正在通过 UART 中断每次读取 1 字节长度来实现它,但我担心它会使固件更容易出现错误,如果数据具有相同的标识符字节值。
我认为最好的解决方案是将其作为两个字节的数据发送。但是我该如何实现它,或者为什么只有第一个字节被重复读取?
以下是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。
提前致谢
【问题讨论】: