bonjour les tous
comment je peux faire un délai de 1 second sur un stm32F4 discovery avec une fréquence interne de 168MHZ
merci
-----
bonjour les tous
comment je peux faire un délai de 1 second sur un stm32F4 discovery avec une fréquence interne de 168MHZ
merci
je rêve !
Tu te piques de développer un OS universelEt tu viens poser une question de ce niveau ?
Tu es un charlatan !
Ah oui quand même....j'ai répondu à l'autre discussion avant de venir ici....
looool
voila c'est ici que j'ai eu mes problèmes. je suis 100% microchipien. lors de passage vers STM32 j'ai eu des problèmes avec les délai(pour les lcd par exemple). donc j'avais camouflais un délai de 10 us(j'ai met un toogle sur une PIN avec un decomptage d'une variable et j'ai installer un oscilloscope, j'ai eu mon 100 KHZ).
depuis ce moment je travail avec cette fonction sans aucune idée qu'est qu'il passe.
comme dans les délai de PIC, je pense à réaliser une fnction qu'est bien étudier et je doit soit passer par assembleur et tiendre compte de pipeline, soit prendre idée sur le nombre de cycle pri pour faire les instruction while(); compt-- ...
c'est pour ça je demande votre aide
Pour un délais d'une seconde, tu passes par un timer !
non daudet pas de passage par timer, je veux une solution software
non pas une seconde bien sur ! ça va bloquer AYmos, mais pour quelque microsecond max 2 ms
??????Ta question de départ !
et ne me dit pas que c'est une faute de frappe ... tu as tout le temps pour écrire ta demande et la vérifier .
Une fois envoyé, tu as 5 minutes pour la corriger.
Pour moi, le seul motif : Le je m’en foutisme
si vous me donner le code pour une seconde je peux le transformer en 1 us .. mais prend une conseil de moi mon chère
DAUDET78 qui tu es surement null dans le domaine de l'embarqué que la validation d'une procédure de temps se fais en second, on démarre une boucle qui incrémente une variable chaque second puis après une heure on calcul le taux d'erreur. donc lorsque je demande une procédure je le demande pour une seconde pour faire mes test et pas pour des microseconds que je doit être équipé par un oscilloscope
partage votre expérience alors ! pas pour moi pour les autres
vazi donner nous le code alors
Il est dans les exemples....
Quant à ton histoire de tester sur 1 seconde, c'est du grand délire. C'est comme si on testait une voiture de série à 500 km/h en disant qu'elle marchera à 100.
Les fonctions et la logique pour faire une pause de 1µs ou d'1 seconde ne sont pas les mêmes. Sur 1 seconde, on hésitera pas à mettre le micro en veille, alors que sur 1µs, ça mérite réflexion.
remplacer 900 par la valeur juste et voila un delay courte durée non precis sans timerCode:int i; for(i=0;i<900;i++);
merci pour les informations précieux ! j'apprend de vous
Il est dans les exemples....c'est sa mon problème ! je sais pas combien il reste !! pour une séquence d'initialisation de LCD soit il prend bcp de temp pour initialiser ou sera bref pour que l'initialisation ne réussit pasremplacer 900 par la valeur juste et voila un delay courte durée non precis sans timer
oui vous êtes raison !!Quant à ton histoire de tester sur 1 seconde, c'est du grand délire. C'est comme si on testait une voiture de série à 500 km/h en disant qu'elle marchera à 100.
et c'est pour ça je n'apprécier pas le STM32.
dans les PIC vous utilisez les fonctions qui fais des délais par nombre de tick à perdre.
ici on sait pas même est ce qu'on est à quelle fréquence et votre code combien il prend
pour sortir de quelque chose je partage mes fonctions. ils sont précis mais je peux pas expliquer pourquoi ça !
pour un délai de 10 micro second
pour les multiples (délai = x * 10us)void delay_10_us(void)
{
char x;
x= 36;
while(x--);
}
pour les millisecondvoid delay_x10_us(uint32_t x)
{
while(x--) delay_10_us();
}
taux d'erreur faible mais négligeablevoid delay_ms(uint32_t x)
{
while(x--) delay_x10_us(100);
}
Bref ton delay ne fonctionne pas.
Parce que tu ne maîtrises pas le micro, que tu n'as pas ouvert les exemples les plus basiques et que tu as surement à peine survolé le User manual...c'est bête hein, faut bosseroui vous êtes raison !!
et c'est pour ça je n'apprécier pas le STM32.
dans les PIC vous utilisez les fonctions qui fais des délais par nombre de tick à perdre.
ici on sait pas même est ce qu'on est à quelle fréquence et votre code combien il prend
Nous non plus, on ne peut pas expliquer....et ajoute une interruption dans ton système, une réception sur port série par exemple, et on verra si c'est encore précis...pour sortir de quelque chose je partage mes fonctions. ils sont précis mais je peux pas expliquer pourquoi ça !
Tu devrais franchement arrêter là, reprendre les bases avant de te couvrir totalement de ridicule.
Pour faire des delays précis, on désactive les interruptions, et on définit les temps de cycles équivalents au delay, tout en prenant en compte l'entrée et la sortie de la fonction. Vu qu'en pratique et sur un système complexe, on ne désactive jamais les interruptions pour un bête delay, on utilise un timer soit réglé sur la durée à passer soit sur une valeur fixe (1ms ou 1µs par exemple) et on compte le nombre d'interruptions....
Bonjour,
Le STM32 je le connais presque par coeur.
Par contre avec ton français peu reluisant, tes explications et la finalité de ta demande pas très bien exprimée, je comprends rien et donc peux pas t'aider.
Un chronogramme serait le bien venu!
il faut activer les 168 MHZBref ton delay ne fonctionne pas.
sinon sa sera des heures pour une secondSystemInit();
SystemCoreClockUpdate();
oui ta raison !! lorsque j'ouvre le reference manuel je vois du chinois, lorsque j'ouvre les exemples soit je trouve des délai sans indications de temps qu'ils prend, soit un OS integré donc je doit manipuler plus de 10 000 lignes pour chercher mon objectifParce que tu ne maîtrises pas le micro, que tu n'as pas ouvert les exemples les plus basiques et que tu as surement à peine survolé le User manual...c'est bête hein, faut bosser
ahhh voila j'ai compris !!!! j'ai compris maintenant pourquoi les sociétés exige des délai qui utilise les TIMER (j'ai travailler avec personne qui exige ça)Nous non plus, on ne peut pas expliquer....et ajoute une interruption dans ton système, une réception sur port série par exemple, et on verra si c'est encore précis...
Tu devrais franchement arrêter là, reprendre les bases avant de te couvrir totalement de ridicule.
Pour faire des delays précis, on désactive les interruptions, et on définit les temps de cycles équivalents au delay, tout en prenant en compte l'entrée et la sortie de la fonction. Vu qu'en pratique et sur un système complexe, on ne désactive jamais les interruptions pour un bête delay, on utilise un timer soit réglé sur la durée à passer soit sur une valeur fixe (1ms ou 1µs par exemple) et on compte le nombre d'interruptions....
bon les délais que je cherche sont pour la séquence d'initialisation lors de démarrage de controller (pas encore activer les interruptions)
mais j'ai suis convaincu par l'utilisation de TIMER !!
tu as raisons sly37 et je suis désoléPar contre avec ton français peu reluisant, tes explications et la finalité de ta demande pas très bien exprimée, je comprends rien et donc peux pas t'aider.
je vais essayer de soigner mon français
alors je peux trouver une fonction de délai avec TIMER chez vous? pour débuter
vu le nombre de timer que tu as dans le stm32 que tu as tu peut faire ca:
Code:void delay(void) { Timer2_Delay_Finished = 1; timer2Cmd(ENABLE); while(Timer2_Delay_Finished); }
Code:void Timer2Interrupt(void) { Timer2_Delay_Finished = 0; ClearITflag(Timer2Update); }
Pour un os... ouiiiiii...
On se demande à quoi peu bien servir un timer dans un micro-contrôleur...
cours d'électronique:
loi 1: "le fil rouge sur le bouton rouge, le fil vert sur le bouton vert"
loi 2: "il est interdit de faire des tempos avec des boucles logicielles vides (sauf trrrrrès rares exceptions)"
loi 3: "loi d'ohm: U=R*I"
Je tiens à préciser que j'ai très facilement trouvé de la doc stm32 qui ne soit pas en chinois.Trop tard... Le timer est tombé (depuis longtemps)....
Tu devrais franchement arrêter là, reprendre les bases avant de te couvrir totalement de ridicule.
...
Jusqu'ici tout va bien...
sa pas fonctionner hulk69
merci POLO merci DAVID !
ici pour proposer des solutions et d'apprendre
Au lieu de critiquer les critiques, as-tu lu les docs et les exemples qu'on trouve sans problème sur le site de st (et ailleurs) ? ? ?
fait une recherche sur AN4013 stm32...
bon, si tu ne trouves pas regarde ici.
il y a aussi tout un dossier de code sample relatifs au timer dans ce que donne st.
qu'as-tu seulement déjà lu de tout ça ? ? ?
ici, on veut bien un peu aider à condition qu'il y a un travail visible de la part du demandeur.
Jusqu'ici tout va bien...
non polo je suis désolé je suis pas entrain de critiquer !
je veux dire que grâce a vous, chères les membres, qu'on sort de plein de truc et d'astuce
je suis vraiment désolé pour l'incompréhension.
j'appris un lesson de vous que lieu d'utiliser les pertes de temps par processeur on utilise les timers car celui ci ils ont immunité contre les interruptions
j'essayer le timer
c'était simple par rapport le PIC (au moins on n'est pas besoin de calcul pour crée 1 second ).
voila un bout de code
le but de ce code et de faire un délai d'une second. le problème que j'avais tourner mon oscillateur interne à 168Mhz. théoriquement je doit mettre TIM_Prescaler = 168 . pour y'avoir 1 Mhz dans la bouche de timer pour je passe le preload period 1 000 000 pour compter 1M impulsions comme j'aurais le 1 second. ce qui je doit le faire sa pas marcher. pour y'avoire le 1 Mhz j'ai mis TIM_Prescaler = 16 . est ce que mon horloge interne tourne à 16 Mhz ou quoi?RCC_APB1PeriphClockCmd(RCC_APB 1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Peri od = 1000000;
TIM_TimeBaseStructure.TIM_Pres caler = 16;
TIM_TimeBaseStructure.TIM_Cloc kDivision = 0;
TIM_TimeBaseStructure.TIM_Coun terMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
Salut,
Simple question... Est-ce que tu as configuré l'horloge pour qu'il tourne à 168MHz?
Sinon, tu tournes par défaut sur l'oscillateur interne qui est effectivement à 16MHz.
Bon courage.