[AIROC™ 蓝牙]【英飞凌CYW20829测评】2.GPIO控制

GPIO即通用输入输出,是现代电子设备中常见的接口类型之一,它扮演着连接外部设备和处理器的桥梁角色,通过GPIO管脚处理器可以实现与外部设备的数据交换和控制,从而实现系统功能的扩展和完成各种任务
接下来创建个空的工程来熟悉一下CYW20829的GPIO操作,选择Empty APP
 


main函数里空空的
 


HAL层提供了GPIO初始化方法cyhal_gpio_init
 


参数说明:
pin:要配置的GPIO
direction:输入输出方向,可选参数如下
 


drive_mode:gpio驱动模式,可选参数如下
 


init_val:初始状态
gpio的控制和输入状态读取方法如下
 


接下来初始化开发板上的2个LED,并让2个LED交替亮起,BSP里已经有了LED的定义CYBSP_USER_LED1和CYBSP_USER_LED2,查看原理图,LED在输出低电平时亮起
 


初始化代码

复制

cyhal_gpio_init(CYBSP_USER_LED1, CYHAL_GPIO_DIR_OUTPUT,CYHAL_GPIO_DRIVE_STRONG, CYBSP_LED_STATE_OFF);

cyhal_gpio_init(CYBSP_USER_LED2, CYHAL_GPIO_DIR_OUTPUT,CYHAL_GPIO_DRIVE_STRONG, CYBSP_LED_STATE_ON);

主循环中写入交替亮起代码

复制

for (;;)

{

        Cy_SysLib_Delay(500);

        cyhal_gpio_toggle(CYBSP_USER_LED1);

        cyhal_gpio_toggle(CYBSP_USER_LED2);

}

运行效果
 


除了手动写代码初始化gpio外,还可以用这个初始化
 


切换到Pins标签,找到USER_LED,drive mode选择Strong Drive,初始状态LED1选Low,LED2选High
 


注释掉原来的初始化代码,重新编译烧录运行效果和之前一样
以上是对gpio输出模式的控制,接下来使用gpio输入模式实现对按键状态的检测,这次直接使用配置工具初始化按键的gpio,查看原理图
 


按键低电平触发,drive mode选择上拉输入
 


先简单地将按键输入设置为LED输出,这样按下按键时对应的LED就会亮起

复制

for (;;)

{

        cyhal_gpio_write(CYBSP_USER_LED1,cyhal_gpio_read(CYBSP_USER_BTN1));

        cyhal_gpio_write(CYBSP_USER_LED2,cyhal_gpio_read(CYBSP_USER_BTN2));

}

运行效果
 


接下来用轮询的方式实现对按键点击的检测,使用延时进行去抖,点击按键后对应的指示灯开始闪烁

复制

uint8_t btn1_press_count = 0;

uint8_t btn2_press_count = 0;

uint16_t led_count = 0;

uint8_t led_sel = 0;



void app_key_check(void)

{

        if(!cyhal_gpio_read(CYBSP_USER_BTN1))

        {

                if(btn1_press_count < 0xFF)

                        btn1_press_count += 1;

        }

        else

        {

                btn1_press_count = 0;

        }

        if(!cyhal_gpio_read(CYBSP_USER_BTN2))

        {

                if(btn2_press_count < 0xFF)

                        btn2_press_count += 1;

        }

        else

        {

                btn2_press_count = 0;

        }

        if(btn1_press_count == 20)

        {

                led_sel = 0;

        }

        if(btn2_press_count == 20)

        {

                led_sel = 1;

        }

}



void app_led_loop(void)

{

        if(led_count < 300)

                led_count += 1;

        else

        {

                led_count = 0;

                if(led_sel == 0)

                {

                        cyhal_gpio_toggle(CYBSP_USER_LED1);

                        cyhal_gpio_write(CYBSP_USER_LED2,CYBSP_LED_STATE_OFF);

                }

                else

                {

                        cyhal_gpio_write(CYBSP_USER_LED1,CYBSP_LED_STATE_OFF);

                        cyhal_gpio_toggle(CYBSP_USER_LED2);

                }

        }

}

主循环

复制

for (;;)

{

        Cy_SysLib_Delay(1);

        app_led_loop();

        app_key_check();

}

运行效果

 

---------------------
作者:yuyy1989
链接:https://bbs.21ic.com/icview-3384428-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值