关于HAL库发送16bit数据

说明

该文档是作为记录STM32国内帖子关于HALSPI问题解决无法有效回答的补充,网上的回答大部分都是直说怎么发的,但是没说原理是什么

问题记录

  • 在使用HAL库时,HAL提供的发送函数时,提供的接口发送数据为uint8_t *类型的数据的,所以发送16bit数据时主观上感觉无法发送16位的数据,并且HAL库并没有在函数原型上说明如何发送16bit数据

spi发送函数原型定义

spi发送函数原型定义

发送16bit方法

其实,HALspi发送16bit的方法其实就在函数的实现中说明了,只是大部分人就直接只看函数头来猜测函数功能从而导致了不完全清楚如何使用该函数发送数据,从而只是用其发送8bit数据

看看下面的一部分函数实现

spi发送函数发送16bit的实现

spi发送函数发送16bit的实现

说明:

  • hspi:是函数原型中的第一个参数:实例
  • hspi->TxXferCount:为函数原型中的参数Size
  • hspi->pTxBuffPtr:为函数原型中的参数pData

可以看到,发送16bit数据时DR放的是pData指向的地址,但是每次发送完后都会增加一个16bit长度,一共发送Size

结论

所以由上节得出结论,该函数用来发送16bit数据时,需要做以下操作:

  1. 初始化SPI16bitDataSize
  2. 发送数据定义为16bit类型
  3. 发送函数HAL_SPI_Transmit中放的pData16bit数据,Size是以16bit数据为单位的长度,其他与发送8bit操作一致

版权

本作品采用 CC BY-NC-ND 4.0 授权。