1 基于J-Link的调试信息输出( 五 )

< 20){cnt ++;}else if(cnt == 20){cnt ++;// Unlock Power supplynrf_gpio_pin_clear(POWER_LOCK_PIN);}}}
将代码编译烧录到芯片按照前边讲的RTT调试打开和并连接后 , 在中输入r回车复位芯片 , 输入g回车启动程序 , (这些命令都是的调试命令 , 想进一步了解学习的话可以看JLink的文档)就可以完整的看到我们在程序中的输出信息 , 如下图
代码实现的功能如下
当ADC转换完成会进入函数 , 在函数中会打印输出当前ADC采集的电压值(mV) , 当每转换100次 , 进行一次saad校准 。
4 按键长按、单击、双击、三击……
按键检测我们采用在主循环中扫描的方式 , 我们还需要一个时间戳来让我们能够检测按键是长按、短按、消抖、和连击之间的间隔时间 。我们的时间戳不采用上节中的DWT而是采用 , 相信很多用过stm32的朋友应该很熟悉 , 这里就不再过多介绍了 。
按键长按检测逻辑如下:
扫描中如果按键此时按下 , 记录当前系统计数(ms单位) , 设置当前按键状态为按下状态此时按键松开 , 检测当前系统计数和按下时的系统计数差值是否大于20ms , 如果大于20ms则认为这是一次按下事件 , 把按下事件计数加一 , 同时记录当前系统计数 , 如果小于20ms则认为时抖动轮询当前系统计数 , 如果距离按键按下时的计数大于1秒则认为长按事件发生 , 按键扫描函数返回按键长按
按键单击检测逻辑如下:
扫描中如果按键此时按下 , 记录当前系统计数(ms单位) , 设置当前按键状态为按下状态此时按键松开 , 检测当前系统计数和按下时的系统计数差值是否大于20ms , 如果大于20ms则认为这是一次按下事件 , 把按下事件计数加一 , 同时记录当前系统计数 , 如果小于20ms则认为时抖动轮询当前系统计数 , 如果距离按键松开时的计数大于300ms则认为没有后续连击发生 , 按键扫描函数返回按键单击发生
按键双击检测逻辑如下:
扫描中如果按键此时按下 , 记录当前系统计数(ms单位) , 设置当前按键状态为按下状态此时按键松开 , 检测当前系统计数和按下时的系统计数差值是否大于20ms , 如果大于20ms则认为这是一次按下事件 , 把按下事件计数加一 , 同时记录当前系统计数 , 如果小于20ms则认为时抖动如果按键在松开后300ms内再次被按下 , 记录当前系统计数(ms单位) , 设置当前按键状态为按下状态此时按键松开 , 检测当前系统计数和按下时的系统计数差值是否大于20ms , 如果大于20ms则认为这是一次按下事件 , 把按下事件计数加一 , 同时记录当前系统计数 , 如果小于20ms则认为时抖动轮询当前系统计数 , 如果距离按键松开时的计数大于300ms则认为没有后续连击发生 , 按键扫描函数返回按键双击发生
按键三击检测逻辑和双击的逻辑基本一样 , 只是按下事件计数再加一而已
工程建立
我们把RTT文件夹复制一份并重命名为KEY作为我们本节的工程文件夹 。
修改
打开文件 , 将 和 变量修改为如下代码
# Source files common to all targetsSRC_FILES += \$(PROJ_DIR)/main.c \$(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S \$(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c \$(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \$(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \$(SDK_ROOT)/components/libraries/util/app_util_platform.c \$(SDK_ROOT)/components/libraries/experimental_memobj/nrf_memobj.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_rtt.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_default_backends.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_frontend.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_str_formatter.c \$(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_serial.c \$(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \$(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \$(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \$(SDK_ROOT)/external/fprintf/nrf_fprintf.c \$(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \\$(PROJ_DIR)/key.c \$(PROJ_DIR)/systick.c \# Include folders common to all targetsINC_FOLDERS += \$(PROJ_DIR) \$(SDK_ROOT)/modules/nrfx \$(SDK_ROOT)/modules/nrfx/mdk \$(SDK_ROOT)/integration/nrfx \$(SDK_ROOT)/components/toolchain/cmsis/include \$(SDK_ROOT)/components/drivers_nrf/nrf_soc_nosd \$(SDK_ROOT)/components/libraries/atomic \$(SDK_ROOT)/components/libraries/balloc \$(SDK_ROOT)/components/libraries/delay \$(SDK_ROOT)/components/libraries/strerror \$(SDK_ROOT)/components/libraries/util \$(SDK_ROOT)/components/libraries/experimental_log/src \$(SDK_ROOT)/components/libraries/experimental_log \$(SDK_ROOT)/components/libraries/experimental_memobj \$(SDK_ROOT)/components/libraries/experimental_section_vars \$(SDK_ROOT)/external/fprintf \$(SDK_ROOT)/external/segger_rtt \\$(SDK_ROOT)/modules/nrfx/hal/ \