Push/Pull Button to Turn ON/OFF LED via HAL

Lab Objective:

In this lab, participants will harness the Hardware Abstraction Layer (HAL) to interface with a push/pull button connected to the Infineon PSoC 6 microcontroller. Upon pressing the button, participants will program the microcontroller to toggle an LED's state between ON and OFF. This hands-on activity aims to familiarize participants with basic input/output operations, demonstrating real-time hardware interactions and the effective use of HAL for device control.

🔥 Requirements

ResourcesLinks

Computer

💻

ModusToolbox™ software v3.0 or later

CY8CKIT-062S2-43012 Infineon Board

Technical Report

🚩 Let start

Create Application

  • 👉 Open Eclipse IDE ModusToolbox

Hardware Abstraction Layer (HAL) API

Open Hardware Abstraction Layer (HAL) API to see the functions that use for GPIO Pin

The HAL API documentation provides a comprehensive set of functions to interact with the board efficiently. This API documentation offers detailed guidance on utilizing various functionalities to optimize your development process.

Coding

  • Coding: Open the main.c file and add the following code to the main(void) function.

int main(void)
{
    cy_rslt_t result;

    /* Initialize the device and board peripherals */
    result = cybsp_init() ;
    /*BSP init failed. Stop program execution */
    if (result != CY_RSLT_SUCCESS)
    {
        CY_ASSERT(0);
    }
    __enable_irq();


    /* Initialize the User LED */
    cyhal_gpio_init(CYBSP_USER_LED, CYHAL_GPIO_DIR_OUTPUT, CYHAL_GPIO_DRIVE_STRONG, CYBSP_LED_STATE_ON);

    /* Initialize the user button */
    cyhal_gpio_init(CYBSP_USER_BTN, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_PULLDOWN, CYBSP_BTN_OFF);

    /* Initialize retarget-io to use the debug UART port. It sets up the standard input/output functions (such as printf)*/
    cy_retarget_io_init(CYBSP_DEBUG_UART_TX, CYBSP_DEBUG_UART_RX, CY_RETARGET_IO_BAUDRATE);

    printf("\x1b[2J\x1b[;H");

    for (;;)
    {
    	//Button is active low
    	if(!cyhal_gpio_read(CYBSP_USER_BTN)){
            // Button is pressed
            cyhal_gpio_write(CYBSP_USER_LED, CYBSP_LED_STATE_ON);
            printf("Button Pressed --> LED ON \r\n");
            cyhal_system_delay_ms(250);
        }

        else {
            // Button is not pressed
            cyhal_gpio_write(CYBSP_USER_LED, CYBSP_LED_STATE_OFF);
            printf("Button not Pressed --> LED OFF \r\n");
            cyhal_system_delay_ms(250);
        }
    }
}

Build the Application

  • 👉 Build the Application

Launching the Application

  • 👉 Launching the Application

    • Before launching the program to the board, make sure that you have already connected the board to the computer through a USB cable.

    • Launching Program

  • 👉 Check the Result

🎉 Congratulations! You can now complete Lab103

Supported toolchains (make variable 'TOOLCHAIN')

  • GNU Arm® embedded compiler v10.3.1 (GCC_ARM) - Default value of TOOLCHAIN

  • Arm® compiler v6.16 (ARM)

  • IAR C/C++ compiler v9.30.1 (IAR)

Supported kits (make variable 'TARGET')

ResourcesLinks

ModusToolbox™ Software Training

Other resources

Infineon provides a wealth of data at www.infineon.com to help you select the right device, and quickly and effectively integrate it into your design.

Document history

Document title: BILL_MTB-103GPIO-HAL Button with LED Template

VersionDescription of change

1.0.0

Lab 103: Learn basic GPIO control with PSoC 6 using Push/Pull Button to Turn ON/OFF LED via HAL

Authors:

  • Assoc. Prof. Wiroon Sriborrirux

  • Mr. Sriengchhun Chheang

  • Mr. Sabol Socare


© BDH Corporation, 2022-2023

Last updated

Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University