Attualmente sto cercando di ottenere una coppia di stm32l152 (kit di rilevamento) per comunicare tramite I2C. (Non sto usando la libreria periferica standard fornita da STM come voglio provare a realizzare l'i2c me ..)Configurazione delle porte di uscita STM32 per I2C
La mia configurazione è come segue:
modalità di indirizzamento a 7 bit (nessun doppio indirizzo, solo OAR1)
velocità 100kHz
ACK abilitata (slave)
dis ACK abili (su maestro, dal momento che solo 1 byte che vengono trasmessi tra master/slave in qualsiasi momento)
sia master/slave, utilizzando GPIOB (PB10) come SCL e GPIOB (PB11) come SDA
Ecco la parte strana: quando configuro i 2 pin GPIOB come push-pull (senza pullup/down), sono in grado di vedere il mio master inviare il bit di start, il byte di indirizzo .. sull'oscilloscopio.
Ma il mio schiavo non sta restituendo un riconoscimento. lo so per certo perché il master non ha asserito il bit ADDR in SR1, non vedo ack sull'oscilloscopio e anche lo slave non è entrato in interrupt (ho abilitato l'interrupt di evento I2C sullo slave).
su uno sguardo ravvicinato alla forma d'onda sull'oscilloscopio, ho realizzato che il segnale (sia SCL, SDA) non andava completamente a 0Volt per la logica bassa, sono invece a 1 volt. sto indovinando questo forse perché lo schiavo non può leggere il byte di indirizzo dal padrone e quindi non ha rinviato l'ack.
Così configuro i 2 pin GPIO come open-drain (senza pullup/down) .. ma ora il mio master non può inviare il bit di start .. passo il codice e ho visto che il bit SB del master in SR1 è impostato quando imposto il bit START .. ma non vedo alcuna risposta sui segnali SDA e SCL sull'oscilloscopio (entrambi sono alti a 3V).
(ho estratto sia SCL che SDA a 3v utilizzando 10kohms su ciascuna linea).
Si dovrebbe accettare la risposta se ciò ha funzionato. –