基于STM32H7A2现有SPI代码,如何修改实现16位数据传输?
问题:STM32H7A2 SPI从8位传输改为仅16位数据传输的代码调整方案
目前正在使用STM32H7A2的SPI外设传输8位数据,且运行正常,相关代码如下(包含寄存器地址和对应数据)。现需基于该代码修改,实现仅传输16位数据的功能,请问该如何调整代码?原代码在发送SPI地址位和8位数据位时工作正常,现在需要修改为通过SPI仅发送16位数据,望各位提供修改建议。
原代码:
uint8_t dataOut = 0x50; uint8_t regAddr = 18; // address of register HAL_StatusTypeDef spi_write(uint8_t regAddr, uint8_t *pData) { HAL_StatusTypeDef ret; uint8_t sendData[2] = {regAddr, *pData}; // Start communication HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, 0); // send reg addr and data to write into ret = HAL_SPI_Transmit(&hspi1, sendData, 2, 20); if (ret != HAL_OK) { HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, 1); return ret; } }
调整方案
核心思路
原代码是分两次8位传输(寄存器地址+8位数据),现在要改成仅传输16位数据,需要从数据封装和**SPI配置(可选)**两方面调整,具体如下:
1. 修改函数接口与数据封装
- 移除寄存器地址参数,将函数参数改为接收
uint16_t类型的16位数据 - 根据外设要求的字节序(大端/小端),把16位数据拆分为高低两个字节,放入发送缓冲区
2. 修正传输逻辑
- 发送缓冲区仅存放16位数据拆分后的两个字节,传输长度保持为2(对应2个8位字节,合计16位)
- 补充原代码缺失的正常传输完成后CS置高操作,保证时序严谨
3. SPI配置切换(可选)
如果外设支持16位帧格式传输,可以直接修改SPI配置:
- 在STM32CubeMX中把SPI的
Data Size设为16 Bits,或者手动配置SPI_CR1寄存器的DS[3:0]位为0b1111 - 这种情况下,
HAL_SPI_Transmit的传输长度设为1(对应1个16位帧),无需拆分字节
修改后的示例代码
方式一:保持8位帧格式,拆分16位数据传输
uint16_t dataOut = 0x1234; // 要发送的16位数据 HAL_StatusTypeDef spi_write_16bit(uint16_t pData) { HAL_StatusTypeDef ret; // 按大端序拆分(高字节先发送,若外设要求小端则调换顺序) uint8_t sendData[2] = {(uint8_t)(pData >> 8), (uint8_t)pData}; HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, 0); // 传输2个8位字节,合计16位 ret = HAL_SPI_Transmit(&hspi1, sendData, 2, 20); // 无论传输成功与否,都置高CS HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, 1); return ret; }
方式二:切换为16位帧格式传输
uint16_t dataOut = 0x1234; // 要发送的16位数据 HAL_StatusTypeDef spi_write_16bit(uint16_t pData) { HAL_StatusTypeDef ret; HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, 0); // 传输1个16位帧,长度参数设为1 ret = HAL_SPI_Transmit(&hspi1, (uint8_t*)&pData, 1, 20); HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, 1); return ret; }
注意事项
- 必须确认外设的字节序要求,否则会出现数据传输错误
- 若使用16位帧格式,需确保SPI的时钟极性、相位等配置与外设完全匹配
- 原代码仅在传输错误时置高CS,修改后的代码统一在传输结束后置高,避免出现总线挂起问题
内容的提问来源于stack exchange,提问作者Stan woldes
相关产品推荐
相关产品推荐

