Hello Alice, Thanks a lot for your answer.
There is something right in what you are investigating.
As, I mentionned in my note this an IMU application.
I do not use print but I use sprint to convert float to char for gyro and Acc Measurments. And I have the Issue.
But for the GPS application at this point, I doesn't use sprint. And the flashing is OK.
In fact,as sprintf is not working for float, I did 2 functions to convert float to char(using sprintf only for int) and send via SCI1 (Sorry it's french base):
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// float_Ndeci_vers_char(float nombreFlottant, uint8_t Ndecis, char resultat[])
// -----------------------------------------------------------------------------
// convertir un nombre float vers une chaine de caracteres
// avec 9 chiffres entiers maximum et 3 chiffres decimaux due a la limitation de uint32_t <= 4 294 967 296
///////////////////////////////////////////////////////////////////////////////////////////////////////////
void float_3deci_vers_char(float nombreFlottant, char resultat[])
{
//float p1, p2;
uint32_t int1, int2, longueur_entier, longueur_decimal;
char virgule[1], zero[1], resultat_entier[10], resultat_decimal[10];
virgule[0] = ',';
zero[0] = '0';
//definir le signe
if (nombreFlottant>=0) {resultat[0]= '+';}
else {resultat[0]= '-'; nombreFlottant = - nombreFlottant;}
int1 = (int32_t)(nombreFlottant);
if(int1 >= 1000000000) {resultat[0]= 'F';} //limitation uint32_t indication F = Faux
sprintf(resultat_entier,"%d",int1); //calcul resultat_entier[] = chaine partie entiere
longueur_entier = strlen(resultat_entier);
strcat(resultat, resultat_entier); //calcul chaine resultat: on ajoute resultat_entier au signe
resultat[1+longueur_entier]= ',';//calcul chaine resultat: on ajoute virgule au resultat_entier et signe
int2 = (int32_t)(1000*(nombreFlottant-int1)) ;
sprintf(resultat_decimal,"%d",int2); //calcul resultat_decimal[] = chaine partie decimale
longueur_decimal = strlen(resultat_decimal);
if(longueur_decimal < 3) //si le nombre de chiffre decimaux est inferieur au nombre de fiche affiché,
{
uint8_t i = 0 ;
uint8_t imax ;
imax = 3 - longueur_decimal; //Nombre de zeros manquants aprés la virgule
for(i = 0; i < imax ; i++)
{
resultat[1+longueur_entier+1+i] = '0'; //Rajouter des zeros aprés la virgule
}
}
strcat(resultat, resultat_decimal); //calcul chaine resultat: on ajoute resultat_decimal au virgule, resultat_entier et signe
} //Fin float_Ndeci_vers_char(float nombreFlottant, uint8_t Ndecis, char resultat[])
/*****************************************************************************
* Fonction : void Envoi_Chaine_SCI1(char index_debut[], char chaine[], char index_fin[])
* Description : Envoi une chaine avec un index de debut et un index de fin
* Entrée : (char index_debut[], char chaine[], char index_fin[]
* Sortie : void
* ***************************************************************************/
//void float_5deci_vers_char(char index_debut[], float nombreFlottant_5decis, char resultat[], char index_fin[]);
void Envoi_Chaine_SCI1(char index_debut[], char chaine[], char index_fin[])
{
uint16_t nombreDeCaracteres = 0;
nombreDeCaracteres= strlen(index_debut)+strlen(chaine)+strlen(index_fin)+1;
char message_envoi[nombreDeCaracteres];
strcpy(message_envoi, index_debut);
strcat(message_envoi, chaine); //Concatenation Entete Chaine de caracteres M_MIN_X
strcat(message_envoi, index_fin); //Concatenation Entete Chaine de caracteres M_MIN_X
DrapeauEnvoi_SCI1 = FALSE; //
Erreur = SCI1_SendBlock(Pointeur_SCI1, message_envoi, nombreDeCaracteres);
while (!DrapeauEnvoi_SCI1) {};
uint8_t i;
for ( i = 0 ; i < strlen(chaine) ; i ++)
{
chaine[i] = 0;
}
}
Best Regards