ECO033 – Sistemas Embarcados
Por: Relampago Venâncio • 18/4/2017 • Relatório de pesquisa • 2.716 Palavras (11 Páginas) • 363 Visualizações
ECO033 – Sistemas Embarcados
Prática Extra:
Uso de Serial, Joystick e RS232
Procedimento
1. Criar um novo projeto chamado…/ProjetoSerial/ProjetoSerial.uvproj; Copie o código fornecido (pendrive) para a pasta. Recompile e teste.
2. Esse exemplo mandará aos LEDs do GPIOE um padrão como contador binário. Pra fazer isso nós precisamos escrever no Output Data Register do GPIOE (ODR).
Ex.: GPIOE->ODR = i << 8; /* enviar inteiro i para LEDs */
Teste. Nota: precisamos deslocar 8 bits porque a partir do esquemático você verá que os LEDs estão fisicamente conectados aos bits 8-15 do GPIOE.
3. Agora configurar a porta serial. O esquemático [3] mostra a porta serial COM conectada ao GPIOD bit 5 (Tx) e 6 (Rx). A função init_serial() inicia a UART2 (Universal Asynchronous Receiver Transmitter) que direciona a porta COM via GPIOD (bits 5-6). Inclua o arquivo Serial.c no seu projeto. Adicione a chamada para init_serial( ) depois de io_init( ) e teste a porta COM adicionando a linha sendchar(‘A’); /* envia caracter para porta COM */ no loop principal. (no caso, repetidamente mostra a letra A). Você precisará contar ao compilador que os comandos init_serial( ) e sendchar( ) são definidos externamente (no arquivo Serial.c) através da declaração dos protótipos no ProjetoSerial.c.
[pic 1][pic 2]
Ex.: /* protótipos de função*/
extern void init_serial(void);
extern int sendchar(int c);
Compile a aplicação.
4. Para testar a porta serial COM 3* você precisa conectá-la a um “terminal burro”. O aplicativo PuTTY [1] pode ser configurado como um terminal burro. Execute o Putty, conforme a comfiguração ao lado.
*O número da porta depende de como o PC está configurado. Você pode precisar checar em qual porta está alocado no painel de controle. Se o adaptador USB/Serial for usado, então o driver o alocará à próxima porta livre. Baixe e teste a aplicação.
5. Inclua Retarget.c* no seu projeto. Esse arquivo sobrecarrega na biblioteca padrão da linguagem C
Seu projeto agora deve se parecer assim:
[pic 3][pic 4]
Recompile e teste.
6. Pra ler um caracter da porta serial, primeiro devemos checar o registro de status da UART para ver se um caracter foi recebido. Os bits no registro de status são mostrados abaixo:
[pic 5][pic 6]
Quando um caracter é recebido, o bit USARTx_SR_RXNE será modificado indicando que os dados estão aguardando no registrador de dados (USARTx_DR); o bit é limpo quando o registrador de dados é lido. Testar o registrador de status é chamado polling. Comumente o teste aparece como uma condição de loop usando uma técnica chamada espera ocupada [2].
[pic 7][pic 8]
Modifique o programa como mostrado no Apêndice B, de modo que os caracteres entrados no teclado do PC são repetidos na porta COM: -
7. Dois conversores analógico-digitais (ADC) de 12 bits são fabricados dentro do dispositivo STM32F107VC usado na MCBSTM32C evaluation board. Cada ADC compartilha até 16 canais externso. O esquemático MCBSTM32C mostra que POT1 provê uma tensão de entrada variável para o bit 4 do GPIOC. A função mostrada no Apêndice C é usada para configurar o ADC. Inclua-a no seu programa. Os detalhes já foram cobertos na disciplina. Uma rotina simples para ler e mostrar o valor ADC é mostrada abaixo:
for (;;) {
/* Loop infinito */
adcValue = (ADC1->DR & 0x0FFF);
/* valor AD de 12 bits */
printf("\rValor ADC = %i", adcValue);
GPIOE->ODR = adcValue << 4; /* Mostra 8-bits mais signif.*/
}
8. O Joystick está conectado nos bits 11-15 do GPIOD [3]. Essa porta pode ser facilmente configurada pela adição das seguintes linhas na função io_Init().
RCC->APB2ENR |= (1<<4); /* habilita clock do GPIOD */
GPIOD->CRH &= 0x00000FFF; /* Configura o GPIO para o JOYSTICK */
GPIOD->CRH |= 0x44444000;
Os bits de estado que determinam a posição do Joystick são:
[pic 9][pic 10]
Esses valores podem ser exibidos na tela do terminal com:
GPIOE->ODR = (GPIOD->IDR & 0xF800); /* Mostrar Joystick */
[pic 11][pic 12]O arquivo GLCD_SPI_STM32.c contém funções para inialização e escrita para o QVGA TFT LCD colorido. Inclua-o no seu projeto.
Seu projeto agora deve parecer com isso: -
A função main() é mostrada no apêndice C. A função updateLCD() também é mostrada. Essa função escreve o valor ADC na tela LCD pelo uso da função sprintf() para formatar o valor inteiro como string hexadecimal. Após compilar e baixar para a memória flash você deve ver a saída ADC exibida na tela LCD.
Referências
[1] wikipedia, PuTTY at http://en.wikipedia.org/wiki/PuTTY
[2] wikipedia, Busy Waiting at http://en.wikipedia.org/wiki/Busy_waiting
[3] keil, “MCBSTM32C schematics”, mcbstm32c-base-board-schematics.pdf
Apêndice A
/*----------------------------------------------------------------------------
* Name: Serial.c
* Purpose: Low level serial routines for STM32
* Note(s):
*----------------------------------------------------------------------------
* This file is part of the uVision/ARM development tools.
...