khlenar 5 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Здравствуйте все. Есть задача по вводу/выводу данных через микросхему расширений PCA9555 с интерфейсом I2C. Не могу считать данные. Пошагово считывает, а при запуске затыкается.. uint8_t I2CRead(uint8_t addres, uint8_t comand, uint8_t *data1, uint8_t *data2) { I2C1->CR1 |= I2C_CR1_START; while (!LL_I2C_IsActiveFlag_MSL(I2C1)); (void)I2C1->SR1; I2C1->DR = addres; while (!(I2C1->SR1 & I2C_SR1_ADDR)); (void)I2C1->SR1; (void)I2C1->SR2; LL_I2C_TransmitData8(I2C1, comand); while (!LL_I2C_IsActiveFlag_BTF(I2C1)); I2C1->CR1 |= I2C_CR1_START; while (!LL_I2C_IsActiveFlag_MSL(I2C1)); // (void)I2C1->SR1; I2C1->DR = addres+1; while (!(I2C1->SR1 & I2C_SR1_ADDR)); ВОТ ЗДЕСЬ ЗАТЫКАЕТСЯ. ПОШАГОВО ЗДЕСЬ БИТ ADDR УСТАНАВЛИВАЕТСЯ. И ФЛАГИ BTF (void)I2C1->SR1; (void)I2C1->SR2; // ожидаем окончания приема данных while (!(I2C1->SR1 & I2C_SR1_RXNE)) { } // cчитываем приянтое значение *data1 = I2C1->DR; // ожидаем окончания приема данных while (!(I2C1->SR1 & I2C_SR1_RXNE)) { } // cчитываем приянтое значение *data2 = I2C1->DR; LL_I2C_GenerateStopCondition(I2C1); // LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK); return I2C_OK; } В этой функции с начало пишу команду(считывание) потом посылаю адрес с битом чтения и все, затык. А пошагово проходит и считывает. Правда пошагово я проверяю флаг BTF, иначе не успевает проверить ADDR. Микросхема сконфигурирована на вход. В чем может быть дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Что еще интересно. Щупом осциллографа если смотрю SCL, то совсем не работает. Такое впечатление, что влияет емкость щупа. Проскакивает 1 импульс и все. Подтяжка 4.7к Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Контроллер STM32F103C8T6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Интересно, резисторы к 5в. подтягивать можно?. Вроде ничего крименального. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Если речь о выводах PB6-PB11 то да, их можно подтягивать к +5 (в даташите они помечены как FT = 5 V tolerant). В какой режим настроены ножки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба I2C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Короче. Поменял контроллер и стало все норм. Он мне сразу не понравился. Не помню на чем, он подозрительно себя вел)). Я даже осциллографом не смог тактовые импульсы посмотреть (I2C), а сейчас норм Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Может вы ему ногу питания не припаяли, от которой этот порт питается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 16 апреля, 2019 Опубликовано 16 апреля, 2019 · Жалоба Первым делом я все просмотрел и пропаял. Я сначало думал, что они в воздухе висят, SCL. 2 раза их пропаял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться