stm32 - STM32 SPI数据反向发送
问题描述
我一直在尝试使用 SPI 写入外部EEPROM,但我取得了好坏参半。数据确实以相反的方式移出。EEPROM 需要一个起始位,然后是一个操作码,该操作码本质上是用于读取、写入和擦除的 2 位代码。本质上,起始位和操作码组合成一个字节。我正在创建一个 32 位无符号整数,然后将值移位到其中。当我传输这些时,我看到首先看到的是实际数据,然后是 SB+操作码,然后是内存地址。我如何反转这个以首先查看操作码,然后是内存地址,然后是实际数据。如下图所示,数据为BCDE,SB+opcode为07,内存地址为3F。正确的顺序应该是 07、3F 和 BCDE(我认为!)。
这是代码:
uint8_t mem_addr = 0x3F;
uint16_t data = 0xBCDE;
uint32_t write_package = (ERASE << 24 | mem_addr << 16 | data);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_SPI_Transmit(&hspi1, &write_package, 2, HAL_MAX_DELAY);
HAL_Delay(10);
}
/* USER CODE END 3 */
解决方案
您将信息打包成一个 32 位整数,在代码的第 3 行,您可以决定将哪些数据位放置在单词中的哪个位置。要更改顺序,您可以将该行替换为:
uint32_t write_package = ((data << 16) | (mem_addr << 8) | (ERASE));
也就是将data
16 位左移到字的最高有效 16 位,mem_addr
向上移动 8 位并进行或运算,然后添加ERASE
最低有效位。
推荐阅读
- c - 在结构中设置点的有效方法
- python - 数据框根据其他列获取列的平均值
- flutter - 在颤动中单击设备后退按钮时隐藏键盘
- react-hooks - 如何有条件地将样式颜色应用于活动选项卡
- ios - 世博通用链接断开
- python - 如何将 pandas 数据框中的列与重复名称结合起来?
- php - 如何跨所有数据库表在门户网站上实现搜索
- angular - Angular 9 构建错误自定义命名导出
- javascript - 带有 vuex 和 axios 的 Vue.js - 只能在第二次加载时获取数据
- python - ImportError:libGL.so.1:无法打开共享对象文件:CentOS 中没有这样的文件或目录