conexión STM32 y DS3231

0

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);
}
    
pregunta mant13

0 respuestas

Lea otras preguntas en las etiquetas