Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

ARM - From PIC

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[81] Re: ARM - From PIC

Messaggioda Foto UtenteTardoFreak » 9 mar 2012, 0:25

Domani spero di trovare il tempo per copiarti un po' di codice che ho scritto (e in parte copiato dagli esempi :mrgreen: ) e che funziona, garantito al limone.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[82] Re: ARM - From PIC

Messaggioda Foto Utentepierinter » 9 mar 2012, 0:31

Per l'UART ?

Già che sei così gentile... mi è arrivata questa schedina : http://www.sparkfun.com/products/10822

Secondo te come faccio a collegarmi dal computer ? nel manuale dice ci sono diversi modi per collegarsi alla schedina : o con l'UART (ma nn lo so ancora fare ) oppure creando una connessione ad hoc, ma non riesco.
Avatar utente
Foto Utentepierinter
620 2 7 10
Expert EY
Expert EY
 
Messaggi: 1395
Iscritto il: 23 mar 2009, 0:05

0
voti

[83] Re: ARM - From PIC

Messaggioda Foto UtenteTardoFreak » 9 mar 2012, 1:17

No, 'scolta,
Io ti copio un po' di funzioni per l' UART che ho scritto e che funzionano davvero.
Te le spiego, ti dico quale è il modo in cui bisogno ragionare per implementare le cose (che alla fine della fiera sono di carattere generale e vanno bene per tutto) ma non mi fare esplorare schede, please. Non ho il tempo di farlo e, a dire il vero, neanche la voglia.

Scusa la franchezza ma il negozio non può offrire altro al momento. :?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[84] Re: ARM - From PIC

Messaggioda Foto Utentepierinter » 9 mar 2012, 1:28

No ci mancherebbe.
Era solo un problema di interpretazione di una parte del datasheet che non capivo , ma ci sono riuscito quindi a posto
Avatar utente
Foto Utentepierinter
620 2 7 10
Expert EY
Expert EY
 
Messaggi: 1395
Iscritto il: 23 mar 2009, 0:05

0
voti

[85] Re: ARM - From PIC

Messaggioda Foto UtenteTardoFreak » 9 mar 2012, 1:45

L' UART ... alura,
Per prima cosa dobbiamo dichiarare da qualche parte queste variabili che ci servono per l' inizializzazione. Lo dobbiamo fare perché non siamo masochisti e quindi utilizziamo la libreria standard che la ST fornisce.
Codice: Seleziona tutto
// Definizione della struttura utilizzata per l' inizializzazione delle porte di I/O
GPIO_InitTypeDef GPIO_InitStructure;
// Definizione della struttura per inizializzare l' USART
USART_InitTypeDef USART_InitStructure;

Come per le GPIO dobbiamo per prima cosa dare il clcok alla periferica.
Codice: Seleziona tutto
  // Fornisce il clock all' USART1 per metterla in funzione
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

Configuriamo quindi i PIN (questa l' ho copiata e funziona)
Codice: Seleziona tutto
  // Configura il piedino di RX come input floating
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* Configura il pin TX come funzione alternativa push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


Quindi configuriamo l' UART
Codice: Seleziona tutto
// Configura l' USART 1200 baid, 8 bit, 1 stop, no parità nessun controllo hardware
  USART_InitStructure.USART_BaudRate = 1200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  // Configura l' USART1
  USART_Init(USART1, &USART_InitStructure);


E alla fine la abilitiamo
Codice: Seleziona tutto
  // Abilita l' USART1
  USART_Cmd(USART1, ENABLE);


Per scrivere un carattere sulla UART1
Codice: Seleziona tutto
//-----------------------------------------------------------------------
void USART1PrintChar(char ch)
{
  // Aspetta che il registro di trasmissione sia libero
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  USART_SendData(USART1,ch);
}


La ricezione la devo cercare e lo farò forse domani.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[86] Re: ARM - From PIC

Messaggioda Foto Utentepierinter » 9 mar 2012, 2:54

mm ok, fino ad ora è tutto chiaro :D Grazie.
Avatar utente
Foto Utentepierinter
620 2 7 10
Expert EY
Expert EY
 
Messaggi: 1395
Iscritto il: 23 mar 2009, 0:05

0
voti

[87] Re: ARM - From PIC

Messaggioda Foto Utentepierinter » 9 mar 2012, 17:22

Penso che la funzione per la ricezione sia questa, trovata sfogliando un po' le librerie ST :

Codice: Seleziona tutto
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);


e questa è l'implementazione :
Codice: Seleziona tutto
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
 
  /* Receive Data */
  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}



direi che quindi per la ricezione si potrebbe utilizzare una funzione del tipo :

Codice: Seleziona tutto
uint16_t USART1ReceiveChar
{
  //aspetto che sia disponibile qualcosa da leggere
  if (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == SET) {
             uint16_t ch=USART_ReceiveData(USART1);
             return ch;
  }
}




Più o meno credo potrebbe andare come logica ( non sto dando molta importanza ai tipi di variabile, sono ancora in fase preliminare nel cercare di capire la logica e conoscere le librerie, ad esempio il tipo 'uint16_t' non so nemmeno cosa sia e me lo dovrò andare un po' a vedere.

Che ne dici ?
Avatar utente
Foto Utentepierinter
620 2 7 10
Expert EY
Expert EY
 
Messaggi: 1395
Iscritto il: 23 mar 2009, 0:05

0
voti

[88] Re: ARM - From PIC

Messaggioda Foto UtenteTardoFreak » 9 mar 2012, 17:45

Non devi metterci un if ma un while se vuoi aspettare. E poi, visto che ricevi un carattere puoi usare un char come ritorno
Codice: Seleziona tutto
char USART1ReceiveChar(void)
{
  char ch;

  //aspetto fino a quando ci sarà un carattere disponibile da leggere
  while (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET);

  // Leggo il carattere ricevuto
  ch=USART_ReceiveData(USART1);

  return (ch);
}


ATTENZIONE! E' chiaro che la funzione si "pianta" fino a quando non riceve un carattere. -:-
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[89] Re: ARM - From PIC

Messaggioda Foto Utentepierinter » 9 mar 2012, 17:56

Si chiaro, mi pare si chiami Polling Mode se non sbaglio.
Più avanti quando prendo confidenza potre utilizzare gli interrupt in modo da rendere più efficiente il firmware, ma per ora va bene così.

Credo che nel tuo codice hai dimenticato di modificare RESET in SET.
Credo che il flag debba essere a livello alto.

Comunque ok, sono davvero interessanti queste cose, più andiamo avanti più mi prende ;)

Ora, come faccio a provare se tutto quelle che stiamo dicendo funziona ?
Ovviamente, oltre a collegarmi con un oscilloscopio per vedere la sequenza...

Intendo un modo per collegarmi al computer e vedere, in qualche modo se possibile, i byte che la schedina manda (magari dal terminale).

Credo che abbia bisogno di un adattatore TTL - USB , giusto ?
Quindi, o lo compro o me lo faccio... ma forse conviene comprarlo dato che potrebbe essere molto utile anche in futuro.
Avatar utente
Foto Utentepierinter
620 2 7 10
Expert EY
Expert EY
 
Messaggi: 1395
Iscritto il: 23 mar 2009, 0:05

0
voti

[90] Re: ARM - From PIC

Messaggioda Foto UtenteTardoFreak » 9 mar 2012, 17:58

Infatti, fino a quando il flag è a livello 0 il micro continua a stare dentro il while. Forse così ti è più chiaro
Codice: Seleziona tutto
  //aspetto fino a quando ci sarà un carattere disponibile da leggere
  while (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET)
  {
    // Non fa un cavolo di niente e rimane inlooppato
  }
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti