Stm32 start timer on timer

A doua zi am avut nevoie pentru a începe ADC o dată pe secundă și imediat a devenit clar că biți SMPR [2: 1]. care specifică numărul de cicluri între eșantioane, acest lucru nu va funcționa, deci va trebui să căutați un alt mod.






Numărul maxim de cicluri dintre probele care pot fi setate cu acești biți este de 239,5. Dacă acest timp este adăugat la timpul de conversie - 12.5 cicluri, atunci obținem o perioadă de conversie de 252 de bari, în general, până la o secundă foarte departe.
Aș dori să vă reamintesc că următoarele evenimente pot servi drept sursă de lansare externă pentru o conversie regulată:

Stm32 start timer on timer


Adică conversia poate fi declanșată prin comparație de captare (eveniment CCx), depășire temporizată (TRGO), întrerupere externă (linia EXTI) sau prin setarea bitului SWSTART. Suntem gata să începem cronometrul de depășire (TRGO), rămâne doar să ne dăm seama cum să facem cronometrul să genereze același semnal pentru a începe ADC, dar mai întâi să îl inițializăm.







Pentru ca semnalul TRGO să fie generat la depășirea temporizatorului, este necesar să se rezolve cu biti MMS. Selectarea modului principal, apoi inițializarea timerului va arăta astfel.

Acum vom uni toate acestea.

Ca rezultat, ADC va fi pornit în fiecare secundă și puteți obține rezultatul conversiei fie într-o întrerupere, fie la sfârșitul conversiei, fie folosind DMA.
Trebuie să spun că în programul de simulator nu funcționează așa cum ar trebui, atunci întreruperea a avut loc unul după altul, fiecare cu o pauză de câteva milisecunde o dată pe secundă. Apoi am încercat să depana un program în glanda, conectat prin jtag și punerea pe punct de întrerupere temp = linia ADC1-> DR, dar efectul nu este dat, programul funcționează la fel de bine ca și în simulator. Căutarea o greșeală și nu a găsit-o, am încercat să depana în timp real utiliza interfața de ieșire SWO DLS și cum se dovedește codul funcționează aproape corect. Întreruperea după verificarea pentru sfârșitul conversiei, un mesaj de presupus „+1“, un total de 10 secunde, am emis 11 rapoarte, adică, imediat după timer-ul începe de conversie, de ce se întâmplă acest lucru pentru mine, nu se știe cum se va ocupa în mod necesar corectate.







Articole similare

Trimiteți-le prietenilor: