我们正在尝试从一个 PSoC 向另一个 PSoC 发送一个 16 位值。这个操作的本质应该很简单:
- 将值拆分为两个 8 位值,一个用于 MSB,一个用于 LSB
- 从系统 1 发送 MSB,然后发送 LSB
- 在系统 2 上接收 MSB,然后接收 LSB
- 通过移位 MSB 然后对 LSB 进行 OR 屏蔽来合并这两个字节。
- 利润
所以我们这样做的方式在实践中是:
//Split and send
uint16 utest = (uint16)test;
uint8 hibyte = utest>>8;
uint8 lowbyte = utest;
UART_PutChar(hibyte);
UART_PutChar(lowbyte);
系统 2(收到字节的 ISR):
//Recieve and merge
uint8 rx_msb = UART_GetByte();
uint8 rx_lsb = UART_GetByte();
rx_udata = ((uint16)rx_msb << 8) | rx_lsb;
sprintf(TransmitBufferUSB,"%d\n\r",rx_udata);
UART_USB_PutString(TransmitBufferUSB);
问题是这段代码不一致。而且我们似乎从来没有收到我们发送的相同数据。
当我们尝试通过系统 2 中的 UART_USB_PutString 函数将数据发送到计算机时,会出现另一个问题。我们在 putty 终端中接收到两组 %d\n\r,其中一组可能是发送的正确值,另一组可能是发送的正确值这似乎相当随机。
其他信息
- PSoC:CY8CKIT-059
- IDE:赛普拉斯 PSoC Creator 4.1
- 终端:腻子
- 发件人代码:https ://pastebin.com/4SfYGuSw
- 接收代码:https ://pastebin.com/90c7p2zJ
请记住,这是我们第一次在任何环境中使用 UART,因此如果您有任何提示和技巧,我们也可以使用。如果您需要任何其他信息或对如何修复这个破碎的狗屎有任何想法,请告诉我们。
真诚的两位从事 PSoC 工作的电子学菜鸟学生
\de_rush