HAL库的SPI 发送16位

配置

配置为16位数据位

发送与读取

以下面代码为例说明
void Adxl_Read(uint16_t code,uint16_t * value)
{
  uint16_t pdata;
  pdata = (code | 0x0080) << 8;
 
  ADXLCS_L;
  
//  HAL_SPI_Transmit(&ADXLSPI,(uint8_t*)&pdata,1,ADXL345_FLAG_TIMEOUT);
//  HAL_SPI_Receive(&ADXLSPI,(uint8_t*)value,1,ADXL345_FLAG_TIMEOUT);

  HAL_SPI_TransmitReceive(&ADXLSPI,(uint8_t*)&pdata,(uint8_t*)value,1,ADXL345_FLAG_TIMEOUT);  // HAL_SPI_TransmitReceive 能发送16位
  ADXLCS_H;
}
  1. 参数用16位
  2. 给函数调用时,强制改为8位指针,
  3. 数据长度为1,因为我们发送一个16位的数据
    举例:16位的变量,被8位指针指向时,指针指向低8位,地址+1,指向高8位
  4. HAL库函数 HAL_SPI_TransmitReceive 可以正常收发,HAL_SPI_Transmit 会发送两次,而且只有第一次发送的正确,这个BUG 知道就行,我也懒得去研究

你可能感兴趣的:(STM32,HAL,SPI)