Necesito conectar el reloj DS3231 en tiempo real al microcontrolador STM32F103C8T6. Conecté el pin DS3231 SCL al pin STM32 PB6 y el pin SDA al PB7. La compilación del código del programa fue exitosa, pero DS3231 no reaccionó. También probé pines PB8 y PB9, pines PB11 y PB10. No puedo entender por qué DS3231 no hace ninguna respuesta. Creo que uso los pines incorrectos. Estaba buscando bibliotecas y documentación para los pines predeterminados, pero no encontré nada. Estoy programando vía Arduino IDE. Utilizo este código de ejemplo:
#include "Arduino.h"
#include "Wire.h"
#include "uRTCLib.h"
// uRTCLib rtc;
uRTCLib rtc(0x68, 0x57);
unsigned int pos;
void setup() {
delay (2000);
Serial.begin(9600);
Serial.println("Serial OK");
// Max position: 32767
#ifdef ARDUINO_ARCH_ESP8266
Wire.begin(0, 2); // D3 and D4 on ESP8266
#else
Wire.begin();
#endif
#ifdef _VARIANT_ARDUINO_STM32_
Serial.println("Board: STM32");
#else
Serial.println("Board: Other");
#endif
#ifdef ARDUINO_ARCH_AVR
int inttmp = 32123;
#else
// too logng for AVR 16 bits!
int inttmp = 24543557;
#endif
float floattmp = 3.1416;
char chartmp = 'A';
// Testing template
if (!rtc.eeprom_write(0, inttmp)) {
Serial.println("Failed to store INT");
} else {
Serial.println("INT correctly stored");
}
if (!rtc.eeprom_write(4, floattmp)) {
Serial.println("Failed to store FLOAT");
} else {
Serial.println("FLOAT correctly stored");
}
if (!rtc.eeprom_write(8, chartmp)) {
Serial.println("Failed to store CHAR");
} else {
Serial.println("CHAR correctly stored");
}
rtc.set(0, 42, 16, 6, 2, 5, 15);
// RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
inttmp = 0;
floattmp = 0;
chartmp = 0;
Serial.print("int: ");
rtc.eeprom_read(0, &inttmp);
Serial.println(inttmp);
Serial.print("float: ");
rtc.eeprom_read(4, &floattmp);
Serial.println((float) floattmp);
Serial.print("char: ");
rtc.eeprom_read(8, &chartmp);
Serial.println(chartmp);
Serial.println();
for(pos = 9; pos < 1000; pos++) {
rtc.eeprom_write(pos, (unsigned char) (pos % 256));
}
pos = 0;
}
void loop() {
rtc.refresh();
Serial.print("RTC DateTime: ");
Serial.print(rtc.year());
Serial.print('/');
Serial.print(rtc.month());
Serial.print('/');
Serial.print(rtc.day());
Serial.print(' ');
Serial.print(rtc.hour());
Serial.print(':');
Serial.print(rtc.minute());
Serial.print(':');
Serial.print(rtc.second());
Serial.print(" DOW: ");
Serial.print(rtc.dayOfWeek());
Serial.print(" - Temp: ");
Serial.print(rtc.temp());
Serial.print(" ---- ");
Serial.print(pos);
Serial.print(": ");
Serial.print(rtc.eeprom_read(pos));
Serial.println();
pos++;
pos %= 1000;
delay(1000);
}