/**
* 函数功能: SW420震动模块传感器IO引脚初始化.
* 输入参数: 无
* 返 回 值: 无
* 说 明:引脚进行初始化
*
*/
void SW420_GPIO_Init(void)
{
/* 定义IO硬件初始化结构体变量 */
GPIO_InitTypeDef GPIO_InitStruct;
/* 使能(开启)SW420引脚对应IO端口时钟 */
SW420_RCC_CLK_ENABLE();
/* 设定SW420对应引脚IO编号 */
GPIO_InitStruct.Pin = SW420_GPIO_PIN;
/* 设定SW420对应引脚IO操作速度*/
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
/* 设定SW420对应引脚IO为浮空输入模式 */
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
/* 初始化SW420对应引脚IO */
HAL_GPIO_Init(SW420_GPIO, &GPIO_InitStruct);
}
/**
* 函数功能: 简单粗暴的延时函数
* 输入参数: time;延时时间设置
* 返 回 值: 无
* 说 明:软件消抖
*/
static void SW420_ScanDelay(void)
{
uint32_t i,j;
for(i=0;i<100;++i)
for(j=0;j<1000;++j){ }
}
/**
* 函数功能: 读取引脚的状态
* 输入参数:无
* 返 回 值: SW420_HIGH:有震动;
* SW420_LOW:无震动
* 说 明:无。
*/
SW420_State_TypeDef SW420_StateRead(void)
{
/* 读取模块输出信号,若此时输出的是高电平 ,则进入下一步判断*/
if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
{
/* 延时一小段时间,消除抖动 */
SW420_ScanDelay();
/* 延时时间后再来判断引脚状态,如果还是高电平那么确实就是高电平 */
if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
{
/* 扫描完毕,确定有震动,返回震动状态(高电平) */
return SW420_HIGH;
}
}
/* 无震动,返回无震动状态 */
return SW420_LOW;
}
|