Hallo,
folgendes Problem: Ich habe einen I2C Bus (ich nutze die STM32 Hardware
ganz "normal" dafür) und will zusätzlich auf die SCL-Leitung Pegel
aufmodulieren (quasi Bit-Banging), wenn der eigentliche I2C Bus inaktiv
(bzw. fertig mit dem Senden ist) ist. Ports umdefinieren hab ich schon
versucht, leider dauert das ganze etwas zu lange.
Meine Idee: Ich nutze einen weiteren Pin im OpenDrain Modus, schalte ihn
hochohmig während der I2C sendet und zieh ihn auf Low, wenn ich meine
Pegel draufmodulieren will.
Erste Frage: Funktioniert das prinzipiell so?
Zweite Frage: Wie nutze ich den hochohmigen Zustand mit der STM
StdPeripheralLib? Ich habe bis jetzt nur die Funktionen
und ähnliche gefunden.
Hier mal meine Konfiguration des zusätzlichen Pins:
1 | GPIO_InitTypeDef GPIO_InitStruct;
|
2 | GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
|
3 | GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
|
4 | GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
5 | GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
|
6 | GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
7 | GPIO_Init(GPIOB, &GPIO_InitStruct);
|
Der I2C Bus funktioniert!