Utilizando a UART da FRDM-K64F com o componente fsl_debug_console

fsl_debug_console

Em muitos projetos é necessário disponibilizar uma interface serial RS232, e alguns dos motivos são:

  • Depuração de código sem a necessidade do gravador/simulador;
  • Alteração de configuração do produto em campo;
  • Atualização de firmware em campo;
  • Meio de download de log para acompanhamento de funcionamento;
  • Meio de comunicação com outra aplicação seguindo um protocolo (MODBUS por exemplo);
  • Comunicação com módulos de comunicação (Modem GPRS, Wi-Fi, Bluetooth…);
  • Etc…

Para exemplificar, será utilizada a placa FRDM-K64F. Será uma série dividida em três partes:

  1. Utilizando a UART da FRDM-K64F com o componente fsl_debug_console;
  2. Utilizando a UART da FRDM-K64F com o componente fsl_uart sem Interrupção;
  3. Utilizando a UART da FRDM-K64F com o componente fsl_uart com Interrupção.

Com esta placa é possível disponibilizar esta interface basicamente de duas maneiras:

  1. Montar um circuito de interface bem conhecido utilizando um MAX3232 e assim consegue-se os níveis de tensão para o padrão RS232, ou até mesmo sem este transceptor, caso seja necessária a comunicação com algum módulo (GPS);
  2. Utilizar a serial disponibilizada pelo gravador/simulador presente na placa. Desta maneira não é necessário nenhum circuito a mais, porém, esta interface só funcionará quando o código estiver em modo de depuração. Esta será a serial utilizada nesta série.

Detalhe da UART utilizada na FRDM-K64F

No esquemático da placa K64F, página 4, tem os sinais RX e TX da UART ligados ao debugger. E os sinais que são ligados ao microcontrolador da placa, PTB16 e PTB17.

Sinais da UART ligados ao debugger.
Figura 1: Sinais da UART ligados ao debugger.

Ainda no esquemático mas na página 3, estão os sinais utilizados para a UART0 do microcontrolador.

Sinais da UART0.
Figura 2: Sinais da UART0.

Preparação do ambiente

O ambiente pode ser preparado utilizando este artigo do Denis Shimizu. Para a preparação da placa, sugiro seguir este artigo escrito por mim.

Criação do projeto

1) Com o KDS aberto, seguir o caminho “File -> New -> Kinetis Project“.

2) No campo “Project Name” digitar o seguinte nome “K64F-UART”. Clicar em “Next”.

3) Selecionar o microcontrolador no caminho “Processor -> Kinetis K -> MK60 -> MK64F (120MHz) -> MK64FN1M0xxx12”. Clicar em “Next“.

4) No campo Kinetis SDK, selecionar o KSDK instalado. No meu caso é o “KSDK_1.3.0”. Marcar a opção “Processor Expert”. No campo “Start with perspective designed for”, manter marcada a opção “use current perspective”.    No campo “Project Mode”, manter marcada a opção “Standalone”. Clicar em “Next”.

5) Em “Target Compiler“, selecionar “GNU C Compiler“. Clicar em “Finish“.

Adicionando e configurando o componente via Processor Expert

1) Abrir a janela referente ao Processor Expert. Caso esta ainda não esteja disponível, é possível exibí-la seguindo o caminho: “Menu Processor Expert -> Show Views”.

2) Selecionar as abas “Components Library -> Categories”. Selecionar o componente de serial pelo seguinte caminho: “KSDK 1.3.0 -> Peripheral Drivers/HAL -> Utilities -> fsl_debug_console”.

3) Clicar duas vezes no componente para adicioná-lo ao projeto.

4) Clicar no componente que acabou de ser adicionado, e clicar na aba “Component Inspector”.

5) Para facilitar a visualização dos parâmetros, normalmente eu altero as algumas configurações do PE. Clicar no botão “Advanced”. Clicar na seta para baixo onde mais configurações são exibidas e desmarcar a opção “Tabs View”.

Tela de Configuração da UART no Processor Expert.
Figura 3: Tela de Configuração da UART no Processor Expert.

6) Vendo o trecho do esquema nas figuras anteriores, é necessário utilizar a UART0, que já está selecionada.

7) No campo “Pins -> Pins/Signals -> Receiver -> RxD” alterar o pino para PTB16.

8) No campo “Pins -> Pins/Signals -> Transmitter -> TxD” alterar o pino para PTB17.

9) Configuração feita, agora é necessário gerar o código. Clicar no botão “Generate Processor Expert Code” e aguardar o fim do barra de progresso.

Detalhe do botão "Generate Processor Expert Code".
Figura 4: Detalhe do botão “Generate Processor Expert Code”.

Funções disponíveis para o componente serial utilizado

Funções Disponíveis do Componente Serial fsl_debug_console.
Figura 5: Funções Disponíveis do Componente Serial.

Código de exemplo

Vamos criar um simples menu de configuração, fazendo uso das funções do componente adicionado.

A ideia do menu é mostrar uma lista de parâmetros, selecioná-los de acordo com a numeração. Se a opção selecionada não estiver disponível, apresenta uma mensagem de opção inválida.

Para isso, vamos utilizar uma estrutura de máquina de estado bem simples, sem nos preocuparmos com o tamanho do código, mas sim em utilizar as funções do componente serial.

//Função para limpar a tela do terminal serial
void LimpaTela(void)
{
	uint8_t i;

	for(i = 0; i < 30; i++)
		debug_printf(“\n”);

	debug_printf(“\r”);
}

int main(void)
{
	uint8_t Estado = 0;		//Controle da máquina de estados
	uint8_t Opcao = 0;		//Recebe opção selecionada

	while(1)
	{
		switch(Estado)
		{
		//Imprime Menu
		case 0:
			LimpaTela();	//Limpa a tela do terminal serial

			//Apresenta o menu de configuração
			debug_printf("Menu de Configuracao\r\n\n");
			debug_printf("1 - Calibracao de sensores\r\n");
			debug_printf("2 - Configuracao de canais de comunicacao\r\n");
			debug_printf("3 - Teste de hardware\r\n\n");
			debug_printf("OPCAO: ");

			Estado = 1;		//Alterna para o estado de aguardar opção
			break;

		//Aguarda Seleção da opção e testa se é válida
		case 1:
			Opcao = debug_getchar();	//Espera uma tecla ser pressionada

			LimpaTela();				//Limpa a tela do terminal serial

			//Tratamento da opção selecionada
			switch(Opcao)
			{
			case '1':
				debug_printf("Calibracao de sensores\r\n\n");
				debug_printf("1 - Sensor 1\r\n");
				debug_printf("2 - Sensor 2\r\n");
				debug_printf("3 - Sensor 3\r\n");
				break;

			case '2':
				debug_printf("Configuracao de canais de comunicacao\r\n\n");
				debug_printf("1 - Canal 1\r\n");
				debug_printf("2 - Canal 2\r\n");
				debug_printf("3 - Canal 3\r\n");
				break;

			case '3':
				debug_printf("Teste de hardware\r\n\n");
				debug_printf("1 - Saida 1\r\n");
				debug_printf("2 - Saida 2\r\n");
				debug_printf("3 - Saida 3\r\n");
				break;

			//Qualquer tecla diferente é uma opção inválida
			default:
				debug_printf("Opcao Invalida\r\n\n");
				break;
			}

			OSA_TimeDelay(2000);	//Função de Delay criada pelo PE 2000ms
			
			Estado = 0;				//Alterna para o estado de apresentação do menu
            break;
        }
    }
}

Para testar a aplicação, é necessário um terminal serial. Eu utilizo o teraterm.

Configurar o terminal serial para se comunicar com a porta COM gerada pela placa. O baudrate deve ser 115200.

Estas são as telas geradas de acordo com as opções selecionadas.

Menu de Configuração.
Figura 6: Menu de Configuração.
Opção de Calibração de Sensores.
Figura 7: Opção de Calibração de Sensores.
Opção de Configuração de Canais de Comunicação.
Figura 8: Opção de Configuração de Canais de Comunicação.
Opção de Teste de Hardware.
Figura 9: Opção de Teste de Hardware.
Opção Inválida.
Figura 10: Opção Inválida.

Conclusão

A funcionalidade do Processor Expert de já criar funções com base em uma porta serial é bem interessante, assim já é possível fazer testes de hardware e algumas depurações. Mas não é a maneira mais eficiente, por conta do tamanho do código gerado para cada função. Sendo assim, nos próximos artigos serão apresentadas outras maneiras de utilizar a UART.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Hardware » Placas de desenvolvimento » Utilizando a UART da FRDM-K64F com o componente fsl_debug_console

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: