- /**
- * 函数功能: 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;
- }
|