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

Select board and Application

Hardware Abstraction Layer (HAL) API

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

HAL API documentation

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);
        }
    }
}
Here is the sample functions that we use from the HAL API documentation

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