STM32 I2C установил низкий уровень SDA - PullRequest
1 голос
/ 11 марта 2019

Есть ли способ установить вывод SDA и SCL соединения I2C1 STM32 на низкий или высокий сигнал?

Я использую защитную микросхему, и мне нужно отправить условие пробуждения со следующим условием:

если SDA удерживается на низком уровне в течение периода более 60 мкс, устройство выйдет из режима низкого энергопотребления и после задержки 1500 мс он будет готов к приему команд I2C.

Я уже пытался переключить фактический вывод с помощью HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);, но это не работает.

Я настроил свой проект с помощью STM32CubeMX.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

В I2C условие START требует перехода с высокого уровня на низкий, если вы затем отправите фиктивный адрес 0, будет сгенерирован NACK (или, скорее, отсутствие какого-либо ответа будет интерпретировано как NACK).В обычной транзакции программное обеспечение будет реагировать на NACK, генерируя повторное условие START или STOP, однако это должно быть сделано в программном обеспечении, поэтому все, что вам нужно сделать, это ничего не делать в течение 1,5 мс.После этого вы можете сгенерировать START с реальным адресом устройства, и если устройство работает, оно сгенерирует ACK.

Я не знаком с драйвером библиотеки HAL, и, честно говоря, документация ужасна, но этоВозможно, это не даст вам необходимого контроля, и вам придется получить доступ к периферийному устройству I2C на уровне регистра, по крайней мере, для этой процедуры.Вы можете попробовать I2C_MasterRequestWrite() вызов нулевой длины по нулевому адресу с последующей задержкой.Осциллограф может быть полезен для обеспечения генерации ожидаемой синхронизации сигнала.

0 голосов
/ 18 марта 2019

Когда вы инициализируете I2C, режим выводов GPIO устанавливается на ALTERNATE MODE, поэтому написание команд HAL на нем работать не будет.

Использование обычных библиотек HAL не поможет вам в этом. Вы должны настроить протокол I2C самостоятельно, используя регистры stm32.

...