简单回答,发送两次就行了
问题是,先发高8位还是低8位
这要看外部器件的说明了
比如w25q128Flash芯片的读操作
在读指令03之后,要发送24位地址(23~0位)。
请看,23处标有星号,下面注释了:*=MSB
也就是高位优先。
所以先发送高8位,再发中间8位,最后发送低8位。
然后,给出该芯片读操作的代码,供参考
uint8_t BSP_W25Qx_Read(uint8_t* pData uint32_t ReadAddr uint32_t Size) { uint8_t cmd[4]; /* Configure the command */ cmd[0] = READ_CMD; cmd[1] = (uint8_t)(ReadAddr >> 16); cmd[2] = (uint8_t)(ReadAddr >> 8); cmd[3] = (uint8_t)(ReadAddr); W25Qx_Enable(); /* Send the read ID command */ HAL_SPI_Transmit(&hspi2 cmd 4 W25Qx_TIMEOUT_VALUE); /* Reception of the data */ if (HAL_SPI_Receive(&hspi2 pDataSizeW25Qx_TIMEOUT_VALUE) != HAL_OK) { return W25Qx_ERROR; } W25Qx_Disable(); return W25Qx_OK; }
发的时候选择的数组仍然是8位的,但每次发的是两个字节