Цитата(golf2109 @ Aug 24 2017, 10:36)

адрес устройства 0x1E нельзя изменять вот тут
HAL_I2C_Master_Receive (&hi2c3, ((0x1E<<1)|0x01), &ui8byteFromReg,1, 200);
Может да, а может и нет.
Изменение адреса мудро заключено в скобки, поэтому
если вызов - функция, то все правильно.
если макрос - то в нем (макросе) не должно быть операциий ## для этого аргумента.
Если их нет - то тоже должно работать.
-------
Вообще, TS надо посмотреть док. и примеры использования вызовов HAL_xxxx()
1. Вызов HAL_I2C_Master_Receive - подразумевает прием, и соовт-но нет необходимости
указывать бит чтения в адресе.
2.
Возможно в этом HAL адрес надо задавать в "чистом" виде, без сдвига и прилепливания к нему
бита R/~W (читаем док или смотрим исходник HJL_xxxx). Это самое простое, проверьте.
3. Если HAL написан правильно и правильными писателями, то вызов должен возвращать
код результата выполнения операции (тк. I2C не так "прямолинеен" как SPI, где "мастер всегда прав")
4. Для "неразовой" работы с I2C (и другими интерфейсами) необходим лог. анализатор стоимостью 20-25 кваксов.
А для начинающего в этой части - так темболее

5. Ваш код, приведенный выше, думаю правильный. Тк вызовы HAL похожи на "все включено", где старты-сторпы-рестарты-ACK-NACK
уже сделаны. Но. Чтоб ОНО работало, еще должен быть настроен правильно аппаратный узел I2C, в том числе прерывания.
Работает ли он - проверяется тыканием осцилографа на SDA-SCL, а заодно проверяется формирование первого байта посылки
(установка адреса слейва) и ответа слейва в случае распознавания им своего ардеса нулевым ACK на 9-ом такте SCL.
PS - наткнулся. ЭТО
LA (лог.анализатор) - за менее чем 10 кваксов.