【前言】
CW32L012的GPIO具有独有的硬件滤波。这一篇将分享这一功能,在按键检测中,不添加消抖的效果。
【硬件电路】
在CW32L012最小系统开发板中,有一个按键,连接到了芯片的PB2上。

在此次试验中,我们将PB2配置为数字输入、开启中断、上拉触发。
【官方配置步骤】
在官方的GPIO描述中有如下说明:


【配置代码】
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
我要赚赏金
