首页 > 解决方案 > 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 */

标签: stm32spieepromstm32f1

解决方案


您将信息打包成一个 32 位整数,在代码的第 3 行,您可以决定将哪些数据位放置在单词中的哪个位置。要更改顺序,您可以将该行替换为:

uint32_t write_package = ((data << 16) | (mem_addr << 8) | (ERASE));

也就是将data16 位左移到字的最高有效 16 位,mem_addr向上移动 8 位并进行或运算,然后添加ERASE最低有效位。


推荐阅读