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

如何将int16_t变量转换为uint8_t指针传入STM32 CDC_Transmit_FS发送函数

问题根因
  • 原有调用代码的核心错误是缺失取地址符&:(uint8_t*)some_number是将some_number的数值直接强制转换为内存地址,相当于让发送函数去读取以这个数值为起始地址的内存,大概率触发非法内存访问导致运行失败。
  • 拆分数组后出现乱码,通常是两个原因:一是拆分时字节顺序和接收端的解析字节序不匹配,二是调用CDC_Transmit_FS时没有判断返回值,USB发送缓冲区满导致数据丢包。
正确实现方案

方案1:直接传址发送(无需手动拆分)

如果接收端可以适配STM32的默认小端字节序,直接对变量取地址强制转换即可,代码最简洁:

// 对some_number取地址,再转为uint8_t类型指针
CDC_Transmit_FS((uint8_t*)&some_number, sizeof(some_number));

方案2:手动组包发送(适配自定义字节序)

如果需要统一收发两端的字节序(比如规定大端传输),手动拆分变量到数组再发送,避免不同平台大小端差异导致的乱码:

uint8_t tx_buf[2];
// 示例为小端传输:低字节在前,高字节在后
tx_buf[0] = (uint8_t)(some_number & 0xFF);
tx_buf[1] = (uint8_t)((some_number >> 8) & 0xFF);
// 如果需要大端传输,交换两行赋值顺序即可
// tx_buf[0] = (uint8_t)((some_number >> 8) & 0xFF);
// tx_buf[1] = (uint8_t)(some_number & 0xFF);

// 建议增加发送成功判断,避免缓冲区满丢包
while(CDC_Transmit_FS(tx_buf, 2) != USBD_OK);

内容的提问来源于stack exchange,提问作者tstting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:54:07