Começando com a OM13098 - LPCXpresso54628 no MCUXpresso IDE - Parte 2

 OM13098 NXP LPCXpresso54628 LPC



{getToc} $title={Índice}

Neste artigo será mostrado como criar um novo projeto para a placa OM13098 [1] da NXP e testar algumas de suas funcionalidades disponíveis.

Caso ainda não possua o MCUXpresso IDE e a SDK instalados, pode ver como fazer isso aqui [2].

Exemplo de projeto importado da SDK

Para validar tanto a instalação da SDK quanto o funcionamento correto da placa e de alguns dos seus periféricos, pode-se utilizar um projeto exemplo importado da SDK. Pra isso, deve-se clicar em Import SDK example(s)… seja pelo barra Project Explorer no lado esquerdo, ou pelo Quickstart Panel no lado esquerdo inferior.

Figura 1 - Importar exemplo da SDK
A janela SDK Import Wizard será aberta, na qual terão disponíveis as placas cujas SDKs foram instaladas na sua IDE. Nesta etapa, deve ser escolhido a placa que deseja utilizar, neste caso, a lpcxpresso54628. Pra isso deve-se dar um clique duplo na imagem da placa na aba Available boards, ou clicar na imagem e ir em Next >.

Na hora de criar um projeto, é possível de se criar mais de um projeto ao mesmo tempo, selecionando mais de uma caixa de seleção. Os projetos criados terão o seu nome com o prefixo determinado em Project name prefix e sufixo determinado pelo Project name suffix. Tomando como exemplo o projeto hello_world, se o prefixo for lpcxpresso54628 e o sufixo example, o projeto terá o nome lpcxpresso54628_hello_world_example.

Para validar o funcionamento do painel touchscreen LCD, pode-se utilizar o exemplo touch_cursor, do grupo demo_apps. Para este caso, será utilizado o prefixo padrão lpcxpresso54628 e o sufixo será alterado para test, a fim de não ser confundido com possíveis projetos que possam vir a existir no futuro.

O local que o projeto ficará salvo no seu computador pode ser alterado desmarcando a opção Use default location. Com essa opção marcada, o projeto será salvo na pasta do seu workspace, dentro de uma pasta com o nome do prefixo definido anteriormente.

As demais opções podem ficar da maneira que já estão configuradas, basta então clicar em Finish e o projeto será criado.

Figura 2 - Projeto exemplo touch_cursor
Após isso, a tela com o seu projeto aberto no Project Explorer deve ser mostrada. O arquivo touch_cursor.c deverá abrir por padrão na tela, que é o arquivo que possui a função principal do programa. Caso você venha a fechar, ou por algum motivo essa tela não abra, o arquivo deve estar dentro da pasta source. Na frente do nome do projeto na aba Project Explorer, pode ser visto um indicador de <Debug>, que indica qual projeto que estará sendo compilado e depurado caso exista mais de um projeto aberto no workspace.
Figura 3 - Projeto exemplo importado no workspace
Para compilar o projeto, basta clicar no símbolo de martelo na barra de atalhos superior, ou no Build presente no Quickstart Panel em Build your project.
Figura 4 - Local do botão de Build

Se não houverem erros, você verá a mensagem semelhante a esta no Console, na parte inferior da tela:

09:51:37 Build Finished. 0 errors, 0 warnings. (took 3s.779ms)

A próxima etapa é fazer o flash do projeto na placa e a depuração do código. Para fazer isso, será usado a ferramenta de debug.

Conecte o cabo USB na porta de Debug, conforme indicado na figura 5.

Figura 5 - Indicação da porta USB para Debug
Para debugar (ou depurar, como preferir) há duas opções, uma específica do MCUXpresso (de cor azul, à esquerda), e outra geral de todas as IDEs baseadas no Eclipse (de cor verde, à direita). Se optar por usar a geral, na primeira vez que for debugar, é preciso criar um arquivo que especifique o target. Por isso, neste artigo será utilizado a opção específica do MCUXpresso, pois ele já cria este arquivo automaticamente. A figura 6 (a seguir) indica as opções disponíveis para debug, sendo uma no Quickstart panel e outro na barra de atalhos superior.
Figura 6 - Indicação do botão de Debug na IDE
Ao clicar, será aberto uma janela com as opções para debug que foram identificadas. Em sistemas Linux pode ocorrer de algum erro ser acusado devido a opção SEGGER J-Link probes, mas pra esse caso a opção de debug que será usada é a MCUXpresso IDE LinkServer (inc. CMSIS-DAP) probes, então se houver algum erro você pode fechar a janela que abrir e desmarcar a opção SEGGER J-Link probes.

Figura 7 - Janela de opções de Debug

Clicando no nome do probe desejado, e depois em OK, o programa será carregado e a interface mudará para o modo de debug. Caso seja desejado, pode-se pressionar e arrastar as abas da IDE para posicionar de modo mais agradável para o usuário.

Figura 8 - MCUXpresso em modo de Debug

Depois disso, o programa já estará sendo carregado no MCU, e basta clicar no botão Resume (ou F8 no teclado) para continuar o debug e visualizar o seu funcionamento na placa.

Caso há algum erro durante a execução, e o exemplo não funcione como deveria, o problema pode ser no display definido como padrão no código. Para trocar, basta mudar o define DEMO_PANEL (linha 22, pode ser visto na figura 3) de DEMO_PANEL_RK043FN66HS para DEMO_PANEL_RK043FN02H no arquivo touch_cursor.c dentro da pasta source e repetir a operação de debug.

Exemplo de projeto próprio utilizando a SDK

Antes de criar um projeto novo, para que não haja confusão, é recomendado que se feche o programa de exemplo, clicando com o botão direito no nome do projeto e depois em Close project, ou abra um novo Workspace. Depois disso, basta criar um novo projeto em File>New>Create a new C/C++ Project. A próxima etapa é selecionar a placa e clicar em Next >, semelhantemente ao que foi realizado com o projeto de exemplo.
Uma nova janela será aberta (figura 9), onde pode-se escolher o nome do projeto (igual ao projeto exemplo), e outras configurações.
Figura 9 - Novo projeto do MCUXpresso
Em Operating Systems pode-se escolher se o projeto será um sistema Baremetal ou um sistema de tempo real FreeRTOS. Neste artigo, será utilizado o baremetal.
A aba Drivers mostra quais são os Drivers disponíveis da SDK, cada projeto deverá conter a sua configuração. Para este exemplo não será preciso alterar nenhuma configuração, a padrão já possui até mais configurações habilitadas do que será necessário, mas é recomendado que se explore e escolha os drivers apropriados para cada projeto.
O nome do projeto será mantido como LPC54628_Project, e o sufixo alterado para example. Clicando em Finish, será criado o projeto com as configurações atuais.
Figura 10 - Novo projeto criado no MCUXpresso

Na pasta source, o arquivo LPC54628_Project_example.c irá conter a main do Projeto, conforme pode ser visto na figura 10. 
Aqui será desenvolvido uma aplicação simples, usando os LEDs de usuário presentes na placa, e a chave SW5 (o local desses componentes pode ser visto na figura 11). Quando a chave estiver pressionada, o LED1 irá acender e o LED2 apagar, e quando ela não estiver pressionada, o LED1 irá apagar e o LED2 acender.
Figura 11 - Local dos LEDs e da chave SW5

No arquivo board/board.h existem algumas definições que podem ser úteis e que utilizam as mesmas nomenclaturas da placa.
Para inicializar o botão SW5, deve-se usar a função GPIO_PinInit a fim de torná-lo uma entrada GPIO. O mesmo poderia ser feito para os LEDs, porém o arquivo board.h já traz uma abstração interessante, permitindo a inicialização com os macros LED1_INIT e LED2_INIT.
O botão possui um resistor de pull-up na placa, sendo assim, quando ele está acionado ele entrega nível lógico baixo. A leitura do seu nível é realizado pela função GPIO_PinRead.
Para mudar o estado dos LEDs, existem os macros LED1_ON e LED1_OFF para o LED1, e LED2_ON e LED2_OFF para o LED2.
Por fim, pode-se modificar a main de modo a ficar de acordo com o código a seguir, e cumprir o desafio proposto.

```c
int main(void) {

    /* Init board hardware. */
    BOARD_InitBootPins();
    BOARD_InitBootClocks();
    BOARD_InitBootPeripherals();
#ifndef BOARD_INIT_DEBUG_CONSOLE_PERIPHERAL
    /* Init FSL debug console. */
    BOARD_InitDebugConsole();
#endif
    gpio_pin_config_t sw5_config;
    sw5_config.pinDirection = kGPIO_DigitalInput;
    GPIO_PinInit(BOARD_SW5_GPIO, BOARD_SW5_GPIO_PORT, BOARD_SW5_GPIO_PIN, &sw5_config);
    LED1_INIT(LOGIC_LED_ON);
    LED2_INIT(LOGIC_LED_ON);

    while(1) {
    if(GPIO_PinRead(BOARD_SW5_GPIO, BOARD_SW5_GPIO_PORT, BOARD_SW5_GPIO_PIN) == 0){
    LED1_ON();
    LED2_OFF();
    }
    else {
    LED1_OFF();
    LED2_ON();
    }
    }
    return 0 ;
}
```
Depois, basta fazer o debug para subir o firmware na placa da forma que foi feito com o exemplo da SDK, e testar o funcionamento na placa.

Postar um comentário

Deixe seu comentário ou sua sugestão!

Postagem Anterior Próxima Postagem

Formulário de contato