/* USER CODE BEGIN 4 */
// Fonction qui transmet un caractère via UART et le renvoie.Utilisé pour la sortie standard (printf).
int __io_putchar(int ch) {
HAL_UART_Transmit(&huart2, (uint8_t*) &ch, 1, 0xFFFF); // Pour Envoyer le caractère via UART
// ITM_SendChar(ch); // Option alternative pour envoyer le caractère via ITM
return ch;
}
// Fonction pour scanner le bus I2C pour trouver l'adresse d'un périphérique
void I2C_Scan(I2C_HandleTypeDef *hi2c)
{
HAL_Delay(500); // Petit délai de 500 millisecondes.
printf("I2C Scanner\r\n\r\n"); // Affiche le début du processus de scan I2C.
char Buffer[8] = {0}; // Déclare un tableau de caractères 'Buffer' de taille 8 et initialise tous les éléments à 0.
uint8_t i = 0; // Déclare 'i' et l'initialise à 0.
uint8_t ret; // Déclare 'ret' pour stocker le retour de la vérification du périphérique I2C.
/*-[ Balayage du bus I2C ]-*/
printf("Début du balayage I2C : \r\n"); // Affiche le début du processus de balayage I2C.
for(i = 1; i < 128; i++) // Sur les adresses I2C possibles (de 1 à 127).
{
// Vérifie si un périphérique est prêt à l'adresse 'i' (décalée à gauche de 1 pour correspondre à l'adresse sur 7 bits).
ret = HAL_I2C_IsDeviceReady(hi2c, (uint16_t)(i << 1), 3, 5);
if (ret != HAL_OK) // Si le périphérique n'est pas prêt :
{
printf(" * "); // Affiche un astérisque (*), aucun périphérique n'a été trouvé à cette adresse.
}
else if (ret == HAL_OK) // Si le périphérique est prêt (ret == HAL_OK) :
{
sprintf(Buffer, "0x%X", i); // Formate l'adresse en chaîne hexadécimale et la stocke dans 'Buffer'.
printf("%s", (uint8_t *)Buffer); // Affiche l'adresse hexadécimale du périphérique trouvé.
}
}
printf("\r\nTerminé ! \r\n\r\n"); // Affiche la fin du processus de balayage.
}
/* USER CODE END 4 */