这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【CW32L012】2、体验GPIO硬件滤波输入检测。

共1条 1/1 1 跳转至

【CW32L012】2、体验GPIO硬件滤波输入检测。

高工
2025-11-14 22:12:36     打赏

【前言】

CW32L012的GPIO具有独有的硬件滤波。这一篇将分享这一功能,在按键检测中,不添加消抖的效果。

【硬件电路】

在CW32L012最小系统开发板中,有一个按键,连接到了芯片的PB2上。

image.png

在此次试验中,我们将PB2配置为数字输入、开启中断、上拉触发。

【官方配置步骤】

在官方的GPIO描述中有如下说明:

image.png


image.png

【配置代码】

1、根据上面的配置步骤,我编写代码如下:

void KEY_Init(void)
{
    __SYSCTRL_GPIOB_CLK_ENABLE();     //使能GPIOB的时钟
    CW_GPIOB->ANALOG_f.PIN2    = 0;  //将PB2设置为数字功能
	  CW_GPIOB->DIR_f.PIN2       = 1;  //将PB2设输入
	  CW_GPIOB->PUR_f.PIN2       = 0;  //内部上拉电阻为否
	  
	  CW_GPIOB->FILTER_f.FLTCLK  = 0;  //中断滤波时钟为HCLK / 2
	  CW_GPIOB->FILTER_f.PIN2    = 1;  //使能端口滤波时钟
	
	  //清除KEY_GPIO_PINS(PB2)中断标志并使能NVIC
    CW_GPIOB->ICR &=  ~GPIO_PIN_2;  
    NVIC_EnableIRQ(GPIOB_IRQn);
	  CW_GPIOB->RISEIE_f.PIN2 = 1;     //使能上位中断触发
	  CW_GPIOB->FALLIE_f.PIN2 = 0;     //禁用下降沿中断触发
	  
}

2、添加中断回调函数:

void GPIOB_IRQHandlerCallBack(void)
{
    if ((CW_GPIOB->ISR & GPIO_PIN_2) != 0)
    {
        CW_GPIOB->ICR &=  ~GPIO_PIN_2;
        LED_TOG();
    }  
}

3、在GPIOB的中断函数中注册回调函数:

/**
 * @brief This funcation handles GPIOB
 */
void GPIOB_IRQHandler(void)
{
    /* USER CODE BEGIN */
	GPIOB_IRQHandlerCallBack();
    /* USER CODE END */
}

【实验现象】

下载到开发板后,按下开发板的按键,可以看到翻转顺利,没有象没有添加消抖的其他单片机那样会出现误判。

【总结】

CW32L012的数字滤波功能,在执行GPIO输入检测可以说是非常优秀,这样可以有效的减少了用户的BOM数量,同时也减少用户投入成本,与代码开发的难度。

【附件】

源代码:key_pro.zip





关键词: CW32L012     GPIO     LED     输入     检测    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]