наткнувшись на очень странную вещь, я хотел бы узнать, может ли кто-нибудь дать разумное объяснение.
У меня есть датчик влажности SHT31, работающий на I2 C, и после попытки запустить его на STM32F2 он не сделал ' t работает.
uint8_t __data[5]={0};
__data[0] = SHT31_SOFTRESET >> 8;
__data[1] = SHT31_SOFTRESET & 0xFF;
HAL_I2C_Master_Transmit(&hi2c3,((uint16_t)0x44)<<1,__data,2,1000);
Я открыл функцию и увидел:
/**
* @brief Transmits in master mode an amount of data in blocking mode.
* @param hi2c Pointer to a I2C_HandleTypeDef structure that contains
* the configuration information for the specified I2C.
* @param DevAddress Target device address: The device 7 bits address value
* in datasheet must be shifted to the left before calling the interface
* @param pData Pointer to data buffer
* @param Size Amount of data to be sent
* @param Timeout Timeout duration
* @retval HAL status
*/
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
{
/* Init tickstart for timeout management*/
uint32_t tickstart = HAL_GetTick();
if (hi2c->State == HAL_I2C_STATE_READY)
....... and it goes ....
Итак, я следил за комментарием и разочарованием из моего прицела (глядя, почему мои биты не попадают в сеть ) и сделал:
HAL_I2C_Master_Transmit(&hi2c3,((uint16_t)0x44)<<1,__data,2,1000);
Наконец мои биты выходят, и устройство возвращает мне ACK - вуаля, оно работает!
Но почему ?? В чем причина того, что программист обременен изменением адреса?