我遇到了两个设备(计算机和 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。
提前致谢