Skip to main content
xpp07
Associate III
October 18, 2018
Question

How to ensure that an SPI master sends exactly 16 clock pulses to the slave?

  • October 18, 2018
  • 1 reply
  • 918 views

I'm using this current sensor: TLI4970-D050T4 According to the datasheet:

0690X000006CDVbQAO.png

How can the SPI master send exactly 16 clock pulses to the slave? I'm using L432KC Nucleo running at 2 MHz, but the SPI clock has been prescaled to 1 MHz. I would appreciate any advice. This is the code that I use to read the sensor and calculate current:

while (1)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_SPI_Receive(&hspi1, (uint8_t *)&SPIRx, 2, 10);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
motorCurrent=motor_current();
 
float motor_current() {
 
 float Iout;
 float BIout;
 int16_t Bit15;
 Bit15 = SPIRx&0x8000;
 if(Bit15==0x8000){
 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
 }
 else {
 BIout= SPIRx&0x1FFF;
 Iout = (BIout-4096)/80;
 }
 return Iout;
 }

    This topic has been closed for replies.

    1 reply

    T J
    Senior III
    October 19, 2018

    // clear CS

    uint16_t RxSPI = *((__IO uint16_t *)&hspi1.Instance->DR); // force 16bit transfer

    // wait for last bit to leave pin

    // set CS

    otherwise, did you try to set the buffer to 16 bit ?

    does this look ok guys ?

    uint16_t SPIRx[64];

    HAL_SPI_Receive(&hspi1, (uint16_t *)&SPIRx, 2, 10);