You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:39:56