Да там даже вариантов нет, чтобы включить или выключить. Настроено как Alternate Function Open Drain. Думал логический анализатор врёт, так нет. Отключил. На мультиметре - +3.3, как на SDA, так и на SCL.
Да там даже вариантов нет, чтобы включить или выключить. Настроено как Alternate Function Open Drain. Думал логический анализатор врёт, так нет. Отключил. На мультиметре - +3.3, как на SDA, так и на SCL.
[ Альбом ] Дорогие коллеги! Есть зарядки, хорошего качества. почти на все модели ноутбуков! хорошо собранные, не проседают... Читать далее
У меня,пока домой месяц не заезжал,провели капремонт в этажном щите. Завтра пойду выяснять,почему поставили ВН, а не автомат... Читать далее
Господа, я в отчаянии. Купил конструктор, регулируемый стабилизатор на LM317, купил трансформатор, мечтал сделать себе лабораторный... Читать далее
У нас в университете пед практика и нужно сделать методичку по сборке розетки управляемой через интернет, через приложение.... Читать далее
Можно я скажу? Электрик, который вешает всю проводку в доме на клемник для слаботочки. Вот такой горе электрик приходил к... Читать далее
чуваки а кто точно знает как на ноутах power selector работает на входе? он программный или там мосфет стоит который безусловно... Читать далее
Комментарии: 21
Anonim
ээээ а какая тут связь с нестабильностью? что не работает-то?
Anonim
у меня в принципе стабильно довольно работает, или я не знаю как нагрузить чтобы проверить ну код в студию чтоли ты через HAL делаешь, я тоже, покажи код или я просто не нарывался чтобы было нестабильно а порты просто туда-сюда ты ногами не шевелил в статике чтобы мультиметром посмотреть? может пригорел транзистор какой на выходе
Aleksandr
while (HAL_I2C_Master_Transmit(&hi, (uint16_t) devAddr, (uint8_t*)&buff, (uint16_t)sizebuf, 1000) != HAL_OK) - вот отправка. она работает, но не всегда. чаще всего на ней всё встаёт в цикле.
Anonim
можно светодиодом или резистором еще нагрузить в статике чтоб проверить что в 0 и 1 они оба переключаются нормально
Anonim
я бы проверил порты как я написал, что они вообще есть, потом может со скоростью поигрался, 400 и 100 например, станет ли чаще глючить от этого когда не всегда он там отвечает что не так в возвращаемом коде ошибки, что там?
Aleksandr
Порты работают. Скорость менял до 20 кГц. Режимы тоже пробовал менять. Работает оно одинаково один раз на миллион. Таймаут На линии всё время тишина.
Anonim
а анализатор чего показал? смотрел ACK NACK вот это все?
Aleksandr
Тишину показывает. Единицы стабильно на всех линиях.
Anonim
не а сам обмен-то побайтно?
Aleksandr
Вероятно, нет. Нет обмена там тишина.
Anonim
посмотри, будет все видно например после какой-то команды, могу только посоветовать попробовать по 1 байту отправлять и в отладке смотреть на каком месте оно валится у тебя отладчик покажет после какого байта saleae у тебя? он вообще показывает и байты все и стопы
Aleksandr
китайский
Anonim
ну, шикарный прибор прям побайтно смотри обмен
Aleksandr
Я даже стартового бита не вижу. МК не посылает ничего Нет обмена
Anonim
хм. а повесь на другой I2C и хорошо бы схемку или скриншот, что за I2C ты используешь и какой проц ты в кубе делал код? покажи картинку распиновки, может у тебя конфликты там какие с другой аппаратурой могу программный I2C дать код
Andrey
хехе. Мне попался фуфловый STM32F103C8T6
Anonim
еррата на i2c уже прочитана? Она там емнип больше чем раздел в рефмане
Anonim
"stm32f1xx_hal.h" I2C_SCL_PORT GPIOB I2C_SDA_PORT GPIOB I2C_SDA_PIN 11 I2C_SCL_PIN 10 DELAY_I2C delay_i2c(1) void delay_i2c(uint32_t delay) { volatile uint32_t temp = delay; while(temp--); } void I2C_Start(void) { //__disable_irq(); I2C_SDA_PORT->BSRR = (1 << I2C_SDA_PIN); DELAY_I2C; I2C_SCL_PORT->BSRR = (1 << I2C_SCL_PIN); DELAY_I2C; while (!(I2C_SDA_PORT->IDR & (1 << I2C_SDA_PIN))) { I2C_SCL_PORT->BRR = (1 << I2C_SCL_PIN); DELAY_I2C; I2C_SCL_PORT->BSRR = (1 << I2C_SCL_PIN); DELAY_I2C; } I2C_SDA_PORT->BRR = (1 << I2C_SDA_PIN); DELAY_I2C; I2C_SCL_PORT->BRR = (1 << I2C_SCL_PIN); DELAY_I2C; //__enable_irq(); } void I2C_Stop(void) { //__disable_irq(); I2C_SDA_PORT->BRR = (1 << I2C_SDA_PIN); DELAY_I2C; I2C_SCL_PORT->BSRR = (1 << I2C_SCL_PIN); DELAY_I2C; I2C_SDA_PORT->BSRR = (1 << I2C_SDA_PIN); DELAY_I2C; //__enable_irq(); } uint8_t I2C_Write_Byte(uint8_t data) { uint8_t i; uint8_t ACK; for (i = 0; i < 8; i++) { if (data & 0x80) { I2C_SDA_PORT->BSRR = (1 << I2C_SDA_PIN); } else { I2C_SDA_PORT->BRR = (1 << I2C_SDA_PIN); } DELAY_I2C; I2C_SCL_PORT->BSRR = (1 << I2C_SCL_PIN); DELAY_I2C; I2C_SCL_PORT->BRR = (1 << I2C_SCL_PIN); data = data << 1; } DELAY_I2C; I2C_SCL_PORT->BSRR = (1 << I2C_SCL_PIN); DELAY_I2C; ACK = !(I2C_SDA_PORT->IDR & (1 << I2C_SDA_PIN)); I2C_SCL_PORT->BRR = (1 << I2C_SCL_PIN); I2C_SDA_PORT->BRR = (1 << I2C_SDA_PIN); return ACK; }
Aleksandr
Для начала попробую другой i2c. Процессор f103c8t6, как раз Нет, ничего не изменилось
Anonim
ну уменя есть проект с двумя I2C на блюпилле тоже 103, оба работают, один софтовый другой аппаратный, давай скину
Aleksandr
Оно так себя ведёт со всеми моими stm32. И нормально работает с ардуиной.