基于8位UART实现PSoC间16位数据传输的技术问询
两个PSoC之间的16位数值UART传输实现
刚好做过类似的PSoC之间的UART数据传输需求,这里给你梳理下16位数值拆分传输的完整实现思路和代码:
核心传输逻辑
这个方案的核心就是把16位的数值拆成两个8位字节分开发送,再在接收端还原,步骤很清晰:
- 发送端:将16位数值拆分为MSB(高位字节)和LSB(低位字节),严格按照「先发送MSB,再发送LSB」的顺序传输
- 接收端:按相同的顺序接收MSB和LSB,通过对MSB左移8位,再和LSB执行按位或运算,就能还原出原始的16位数值
实现代码
发送端(拆分并发送)
// 拆分并发送16位数值 uint16 utest = (uint16)test; // 假设test是你要发送的原始数据 uint8 hibyte = utest >> 8; // 提取高位字节(MSB),右移8位后自动截断为8位 uint8 lowbyte = utest; // 提取低位字节(LSB),直接赋值时会自动截断低8位 UART_PutChar(hibyte); // 通过UART发送高位字节 UART_PutChar(lowbyte); // 接着发送低位字节
接收端(接收并合并)
// 接收并合并还原16位数值 uint8 recv_msb, recv_lsb; uint16 restored_val; // 先接收高位字节(注意:实际项目中要先判断UART接收缓冲区是否有数据,避免阻塞) recv_msb = UART_GetChar(); // 再接收低位字节 recv_lsb = UART_GetChar(); // 合并还原:MSB左移8位后与LSB按位或,拼接成完整16位数据 restored_val = (uint16)recv_msb << 8 | recv_lsb;
关键注意事项
- 必须保证两个PSoC的UART配置完全一致:波特率、数据位(8位)、停止位、奇偶校验都要匹配,否则会出现乱码
- 异步UART传输容易出现丢包问题,建议加入简单的校验机制(比如发送前加一个起始标识、结尾加校验和),接收端验证后再合并数据
- 实际项目中要处理UART的接收超时、缓冲区溢出等异常场景,比如用中断方式接收,避免程序阻塞
内容的提问来源于stack exchange,提问作者de_rush
相关产品推荐
相关产品推荐

