Hello!
We are using STHS34PF80 IR sensor and STM32L031F6 processor in our IR motion sensor device.
In STHS34PF80 datasheet is said that SPI clock speed could be up to 10 MHz.
But we can achieve clock speeds up to 250 kHz.
Strange think is that we are able to read WHO_AM_I byte at 8 MBit/s, but InfraRedPD library doesn't work.
It works at speeds up to 250 kBit/s.
Here is our read function:
void ReadSensor(int16_t *ambientTemp, int16_t *objectTemp)
{
uint8_t pTxData[5];
uint8_t pRxData[5];
uint16_t tObject=0;
uint16_t tAmbient=0;
pTxData[0]=(0x27|0x80); //Read TObjH
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, pTxData, 1, 1000);
HAL_SPI_Receive(&hspi1, pRxData, 1, 1000);
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_SET);
tObject|=(uint16_t)pRxData[0];
tObject<<=8;
pTxData[0]=(0x26|0x80); //Read TObjL
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, pTxData, 1, 1000);
HAL_SPI_Receive(&hspi1, pRxData, 1, 1000);
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_SET);
tObject|=(uint16_t)pRxData[0];
pTxData[0]=(0x29|0x80); //Read TAmbH
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, pTxData, 1, 1000);
HAL_SPI_Receive(&hspi1, pRxData, 1, 1000);
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_SET);
tAmbient|=(uint16_t)pRxData[0];
tAmbient<<=8;
pTxData[0]=(0x28|0x80); //Read TAmbL
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, pTxData, 1, 1000);
HAL_SPI_Receive(&hspi1, pRxData, 1, 1000);
HAL_GPIO_WritePin(GPIOA, SPI_NSS, GPIO_PIN_SET);
tAmbient|=(uint16_t)pRxData[0];
*ambientTemp=tAmbient;
*objectTemp=tObject;
}
Would you please advice!