Bibliothèque 3231 et STM32 BluePill

Bonjour à toutes et à tous,

je possède une bibliothèque 3231 réalisée par "RinkyDinkElectronis" datant de 2015 et qui fonctionne très bien lorsque je l'utilise avec des Arduino tels que Pro Mini Nano, Uno, Mega2560.

Je souhaite utiliser cette bibliothèque avec un "STM32 BluePill". A la compilation, j'ai une erreur dans cette bibliothèque :

e:\Arduino\libraries\DS3231/DS3231.h:121:17: error: 'Twi' does not name a type
  121 |                 Twi             *twi;

Le fichier DS3231 est le suivant :

/*
  DS3231.cpp - Arduino/chipKit library support for the DS3231 I2C Real-Time Clock
  Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
  
  This library has been made to easily interface and use the DS3231 RTC with
  an Arduino or chipKit.

  You can find the latest version of the library at 
  http://www.RinkyDinkElectronics.com/

  This library is free software; you can redistribute it and/or
  modify it under the terms of the CC BY-NC-SA 3.0 license.
  Please see the included documents for further information.

  Commercial use of this library requires you to buy a license that
  will allow commercial use. This includes using the library,
  modified or not, as a tool to sell products.

  The license applies to all part of the library including the 
  examples and tools supplied with the library.
*/
#ifndef DS3231_h
#define DS3231_h

#if defined(__AVR__)
	#include "Arduino.h"
	#include "hardware/avr/HW_AVR_defines.h"
#elif defined(__PIC32MX__)
	#include "WProgram.h"
	#include "hardware/pic32/HW_PIC32_defines.h"
#elif defined(__arm__)
	#include "Arduino.h"
	#include "hardware/arm/HW_ARM_defines.h"
#endif

#define DS3231_ADDR_R	0xD1
#define DS3231_ADDR_W	0xD0
#define DS3231_ADDR		0x68

#define FORMAT_SHORT	1
#define FORMAT_LONG		2

#define FORMAT_LITTLEENDIAN	1
#define FORMAT_BIGENDIAN	2
#define FORMAT_MIDDLEENDIAN	3

#define	SUNDAY	0
#define	MONDAY	1
#define	TUESDAY	2
#define	WEDNESDAY	3
#define	THURSTDAY	4
#define	FRIDAY	5
#define	SATURDAY	6


#define SQW_RATE_1		0
#define SQW_RATE_1K		1
#define SQW_RATE_4K		2
#define SQW_RATE_8K		3

#define OUTPUT_SQW		0
#define OUTPUT_INT		1

class Time
{
public:
	uint8_t		hour;
	uint8_t		min;
	uint8_t		sec;
	uint8_t		date;
	uint8_t		mon;
	uint16_t	year;
	uint8_t		dow;

	Time();
};

class DS3231
{
	public:
		DS3231(uint8_t data_pin, uint8_t sclk_pin);
		void	begin();
		Time	getTime();
		void	setTime(uint8_t hour, uint8_t min, uint8_t sec);
		void	setDate(uint8_t date, uint8_t mon, uint16_t year);
		void	setDOW();
		void	setDOW(uint8_t dow);

		char	*getTimeStr(uint8_t format=FORMAT_LONG);
		char	*getDateStr(uint8_t slformat=FORMAT_LONG, uint8_t eformat=FORMAT_LITTLEENDIAN, char divider='.');
		char	*getDOWStr(uint8_t format=FORMAT_LONG);
		char	*getMonthStr(uint8_t format=FORMAT_LONG);
		long	getUnixTime(Time t);

		void	enable32KHz(bool enable);
		void	setOutput(byte enable);
		void	setSQWRate(int rate);
		float	getTemp();

	private:
		uint8_t _scl_pin;
		uint8_t _sda_pin;
		uint8_t _burstArray[7];
		boolean	_use_hw;

		void	_sendStart(byte addr);
		void	_sendStop();
		void	_sendAck();
		void	_sendNack();
		void	_waitForAck();
		uint8_t	_readByte();
		void	_writeByte(uint8_t value);
		void	_burstRead();
		uint8_t	_readRegister(uint8_t reg);
		void 	_writeRegister(uint8_t reg, uint8_t value);
		uint8_t	_decode(uint8_t value);
		uint8_t	_decodeH(uint8_t value);
		uint8_t	_decodeY(uint8_t value);
		uint8_t	_encode(uint8_t vaule);
#if defined(__arm__)
		Twi		*twi;
#endif
};
#endif

Une idée pour corriger cette erreur ou une bibliothèque fonctionnelle avec le "STM32 BluePill" ?

Cordialement.

Pierre.

on trouve des bibliothèques qui semblent spécifiques

TWI = Two Wire Interface.

Est-ce que ce n'est pas un problème de nom ?
Qu'utilise STMicro : TWI ou I2C ?

C'est un problème de sous, de radinisme.
Pour utiliser le terme I2C dans un composant il faut payer une cotisation au consortium I2C (Philips puis maintenant NXP).
Idem pour obtenir des adresses I2C.

Sur un micro en mode esclave, on peut mettre l'adresse que l'on veut par programation, Atmel n'ayant pas besoin d'adresse I2C n'adhérait pas au consortium. Il ne pouvait utiliser le terme I2C d'où le contournement avec twi.
Ce n'était pas le cas de Microchip.

Arduino aurait pu utiliser le terme I2C mais ne l'a pas fait et a collé à Atmel, d'où la classe TwoWire et l'objet Wire.

Note : pour plus de clarté, rien n'empêche d'instancier un objet :
TwoWire i2c
et d'écrire
i2c.begin() ;

L'objet Wire, non utilisé, devrait être ignoré du compilateur.

StMicro qui a besoin d'adresses I2C, cotise et peut utiliser le terme I2C.

Note :
Ce n'est qu'une supposition, mais peut-être pas si supposée que cela.

Voyant beaucoup de bibliothèques pour le DS3231, j'ai posté ici pour savoir laquelle choisir.

Je vous remercie donc pour les liens et les informations.

Pour autant, j'ai continué à chercher sur la toile et j'ai trouvé ce site qui décrivait exactement ce que je souhaitais faire.

Mon problème est donc solutionné.

Merci d'y avoir prêté attention.

Cordialement.

Pierre.