Pagina 1 di 1

STM32 clock

MessaggioInviato: 9 mar 2015, 18:19
da alle96
Salve, sono tornato con altri dubbi :ok:

Per merito dei vostri consigli sono riuscito ad utilizzare GPIO, timer ed interrupt su keil uvison5 utilizzando il micro della stm32f4-discovery.
Usando il timer mi sono reso conto che la scheda non gira a 168Mhz. Ho provato a scrivere la funzione per il clock.
Ecco il risultato:
Codice: Seleziona tutto
RCC ->CR |= RCC_CR_PLLON; //attivo pll
   RCC ->CR &= ~(RCC_CR_HSEBYP); //non bypasso
   RCC ->CR &= ~(RCC_CR_HSION); //no HSI
   
   RCC ->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; //HSE source
   RCC ->PLLCFGR |= RCC_PLLCFGR_PLLM_3; //divide by 8
   RCC ->PLLCFGR |= 0x5400; //moltiplico per 336
   RCC ->PLLCFGR |= RCC_PLLCFGR_PLLP_1; //re-divede by 2
   
   RCC ->CFGR |= RCC_CFGR_SW_HSE; //seleziono l'HSE
   
   RCC ->CR |= RCC_CR_HSEON; //attivo HSE
   while(!RCC_CR_HSERDY);


Non ho un oscilloscopio per verificare ma voi cosa ne pensate? ho scritto le cose bene?
Scusate se ho fatto qualche errore elementare O_/

Re: STM32 clock

MessaggioInviato: 9 mar 2015, 19:54
da TardoFreak
Nell' F4 bisognerebbe verificarlo ma probabilmente devi anche impostare il numeo di wait states per la memoria interna altrimenti il micro non può funzionare.
Se usi la "Standard Peripheral Library" della STM tutte queste funzioni vengono fatte in automatico.
La scarichi dal sito della ST e ci sono i modelli da copiare per realizzare un nuovo progetto.
E' obbligatorio leggersi la documentazione per capire come funziona il framework ma poi ti può esserre molto utile, soprattutto per l' inizializzazione delle periferiche e per le prime prove con queste.

Ricordati che le periferiche (include le GPIO) non basta abilitarle, bisogna fornire loro il clock perima di farci qualsiasi cosa, anche solo l' inizializzazione.

Se usi una periferica (ad esempio la seriale) che usa dei PIN di I/O devi dare il clock a questa, il clock alla GPIO corrispondente, Inizializzare i PIN di I/O e poi la periferica.

I Cortex sono un po' macchinosi, non sono per principianti.

Un sistema semplice per iniziare a provare qualcosa (che consiglio vivamente e fortemente ai neofiti degli ARM) è prendere il classico progetto "blinky" che ti fa lampeggiare un LED e partire da questo come base per sviluppare i tuoi progetti.

Partire da zero significa studiare per un paio di mesi e non riuscire neanche a far lampeggiare un LED.

Re: STM32 clock

MessaggioInviato: 9 mar 2015, 19:56
da simo85
Prova anche a dare una occhiata a questo thread sul forum della ST:

https://my.st.com/public/STe2ecommuniti ... tviews=225

Re: STM32 clock

MessaggioInviato: 9 mar 2015, 22:10
da alle96
Sono riuscito a farla funzionare ma non sono sicuro il mio ragionamento sia corretto. Ho letto il datasheet e risulta che il TIM7 abbia 84MHz di freqenza clock e 42MHz di interfacciamento, considerando che l'STM32F407VG usa 2 cicli di clock per 1 istruzione allora il TIM7 aumenterà il counter a 21MHz. Quanto pensato è giusto? incrementa con frequenza di 21MHz?

Grazie in anticipo O_/

Re: STM32 clock

MessaggioInviato: 10 mar 2015, 10:31
da TardoFreak
No, il ragionamento è sballato, completamente.

Re: STM32 clock

MessaggioInviato: 10 mar 2015, 16:43
da alle96
cavoli ahahahah ok

Ma ho letto che il Timer7 ha 84Mhz di clock e 42Mhz di interfacciamento. Puoi dirmi la differenza?

Re: STM32 clock

MessaggioInviato: 10 mar 2015, 17:34
da TardoFreak
Il clock della periferica non ha niente a che fare con l' ingresso di clock del timer.
Bei cortex M3 il clock di periferica (quello che serve per i casini interni sui) è a 24MHz mentre il clock d'ingresso al timer arriva fino a 72Mhz.

Re: STM32 clock

MessaggioInviato: 17 mar 2015, 7:55
da alle96
Ho appena finito, dopo un periodo di inattività, la funzione per far andare la discovery a 168MHz senza dover cambiare nulla e senza funzioni particolari. La posto qua sotto che magari serve a qualcuno O_/

Codice: Seleziona tutto
void Clock_Set()
{
   uint32_t val;
   /*imposto 5WS per i 168MHz*/
   FLASH ->ACR |= FLASH_ACR_LATENCY_5WS;
   
   /*azzero il registro per il clock*/
   RCC ->CR &= 0x0000;
   /*HSE e PLL*/
   RCC ->CR |= RCC_CR_HSEON | RCC_CR_PLLON;
   /*reset CFGR*/
   RCC ->PLLCFGR &= 0x0000;
   /*imposto PLL_M 8, PLL_N 336, PLL_P 2*/
   RCC ->PLLCFGR |= RCC_PLLCFGR_PLLM_3 | 0x0150 | RCC_PLLCFGR_PLLSRC_HSE;
   /*seleziono PLL HSE*/
   RCC ->CFGR |= RCC_CFGR_SW_PLL;
}


Bye bye O_/

Re: STM32 clock

MessaggioInviato: 17 mar 2015, 12:32
da TardoFreak
Ottimo! :ok: