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


添加文件
在工程目录下添加 .h; .c; key.h; key.c 四个文件 , 这四个文件可以直接从我的源码中复制过来 。
修改main.c
打开main.c文件将代码修改为如下代码
#include "nrf_delay.h"#include "nrf_log.h"#include "nrf_log_ctrl.h"#include "nrf_log_default_backends.h"#include "systick.h"#include "key.h"/*** @brief Function for application main entry.*/int main(void){NRF_LOG_INIT(NULL);NRF_LOG_DEFAULT_BACKENDS_INIT();SYSTICK_init();KEY_init(SYSTICK_get_tick);NRF_LOG_DEBUG("KEY START");uint8_t keyIndex;while (true){keyIndex = KEY_scan();if(keyIndex){NRF_LOG_DEBUG("KEY: %d", keyIndex);}}}
将程序烧录到芯片后打开RTT调试 , 首先打印输出KEY START信息 , 然后我们按按键的时候相应的动作信息也会通过RTT打印输出 。

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

文章插图
5 RGB灯的驱动 灯简介
是一个集控制电路与发光电路于一体的智能外控LED光源 。其外型与一个灯珠相同 , 每
个元件即为一个像素点 。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路 , 还包含有高精度的内部振荡器和可编程定电流控制部分 , 有效保证了像素点光的颜色高度一致 。
数据协议采用单线归零码的通讯方式 , 像素点在上电复位以后 , DIN端接受从控制器传输过来的数据 , 首先
送过来的24bit数据被第一个像素点提取后 , 送到像素点内部的数据锁存器 , 剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点 , 每经过一个像素点的传输 , 信号减少24bit 。像素点采用自动整形转发技术 , 使得该像素点的级联个数不受信号传送的限制 , 仅仅受限信号传输速度要求 。
LED具有低电压驱动 , 环保节能 , 亮度高 , 散射角度大 , 一致性好 , 超低功率 , 超长寿命等优点 。将控制电
路集成于LED上面 , 电路变得更加简单 , 体积小 , 安装更加简便 。
这种灯只要串在一起 , 只需要使用单片机的一个引脚通过按照手册中的时序图发送高低电平就可以控制每个灯
1 基于J-Link的调试信息输出

文章插图
我们使用的PWM片内外设来实现这种时序 , 通过固定的PWM周期 , 不同的占空比来模拟 0码和1码 。
在官方的SDK中像这类片内外设的硬件抽象层代码都在 SDK//nrfx/文件夹内其中又分为hal和两个层级关系 , hal层的代码是更直接操作硬件寄存器的层是对hal层的更加抽象的再次封装 , 方便大家进行调用 。我们在使用某个片内外设时 , 一般只需要看一下数据手册对这个外设的介绍 , 看看SDK中的例子 , 然后再结合这个外设库的文档就可以进行开发了 。
工程建立
我们把RTT文件夹复制一份并重命名位作为我们本节的工程文件夹 。
修改.h
打开.h文件 , 在其中添加下边的配置宏定义
// PWM peripheral driver#define NRFX_PWM_ENABLED 1#define NRFX_PWM0_ENABLED 1
使能PWM驱动模块和PWM0
修改
打开文件 , 将 和 变量修改为如下代码
# 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)/ws2812b.c \$(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_pwm.c \$(SDK_ROOT)/components/libraries/util/app_error.c \$(SDK_ROOT)/components/libraries/util/app_error_weak.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/drivers/include/ \