jlink驱动官网详解

发布时间:2023-05-22

一、jlink驱动概述

jlink驱动是一款硬件模块,可用于连接PC(个人计算机)和ARM微处理器(第三方)。此设备旨在提供一个高效的连接方式,支持多种不同的猎鹰ARM微处理器,并支持嵌入式软件开发。在极不稳定的工程环境下,极大地提高了效率。 相对于传统FX2LP和USB通信,其稳定性和抗干扰能力更高。此外,jlink驱动还具有以下特点:

  1. 支持调试接口
  2. 支持多种不同类型的微控制器,在一定程度上减少了工程师在设计过程中的困难
  3. 支持多线程调试与多核并行调试,降低了调试时的错误率
  4. 支持按需加载调试,灵活定义调试区顺序

二、jlink驱动软件开发

  1. jlink驱动软件开发在Windows、Linux、macOS和Android等平台上都有广泛应用
  2. jlink驱动软件开发使用JTAG调试接口,借助这个接口可以实现单片机的程序烧写与下载,还可以实现单片机在板子上的调试以及单片机与PC机的通信
  3. 此外,jlink还支持多种开发环境,包括IAR、Keil、GCC等,不同的环境适用于不同的情况,满足不同的开发需求。

三、jlink驱动与ARM程序调试

  1. 使用JTAG调试单片机时需要进行专门的电路设计,使得JTAG接口可以完全适配我们开发板的个别器件
  2. 为了从单片机的芯片内存中读出程序,我们通常会使用JLINK连接器
  3. 使用jlink驱动进行STM32的程序调试时,应首先配置一系列前置条件,将目标设备与jlink驱动连接。然后在使用J-Link Commander等PC端工具进行设置的同时,可以在Keil、IAR等开发环境中使用J-Link Probe来进行芯片调试。

四、jlink驱动与SWD模式下的STM32调试

  1. jlink驱动支持向使用了SWD接口的STM32微控制器写入程序
  2. SWD(Serial Wire Debug)是一种调试接口,它将调试通信引脚从前向式变为是两根线
  3. 在使用jlink驱动进行开发过程中,还需要在开发板上选择PIN,以便调试程序可以正确连接与工作

五、jlink驱动与Keil MDK环境配合使用

  1. Keil MDK是一款嵌入式开发环境,包括一个工具套件和一个IDE
  2. 在Keil MDK开发环境中,可以使用jlink驱动来完成程序调试工作。通过此调试方式,可以直接使用Keil MDK IDE中的J-Link配置选项来进入jlink驱动的配置界面,并进行芯片调试。
  3. Keil配置具体方式:
    1. 在Keil的“Options for Target”窗口选择Debug->J-Link/J-Trace Adapter->Settings->Configure
    2. 选择jlink驱动设备
    3. 进入“Target”选项卡,选择目标芯片型号以及调试接口SWD/JTAG,并设置Freqency。
    4. 在“Flash Download”选项卡中选择目标芯片的flash类型,并指定文件路径
    5. 点击OK。

六、jlink驱动与IAR环境配合使用

  1. IAR Embedded Workbench是一个用于嵌入式软件开发的集成开发环境
  2. IAR环境与jlink驱动配合使用,可以实现很好的单片机代码调试效果
  3. IAR配置具体方式:
    1. 打开工程
    2. 选择 Project -> Options -> Debugger -> Setup -> Host - J-Link(XXX)
    3. 选择连接设备
    4. 配置芯片的调试参数,包括目标芯片型号、芯片电源、调试接口等信息
    5. 设置Endianness、堆栈等信息。
    6. 点击OK,即可进入调试界面

七、jlink驱动的代码示例

  1. jlink驱动的代码示例涉及到各种开发环境以及不同的目标芯片,以下代码展示Keil MDK环境下jlink驱动的代码实现
#include "JLinkARM.h"
#include "stm32f1xx_hal.h"
void system_init(void)
{
    // Enable AF clock
    __HAL_RCC_AFIO_CLK_ENABLE();
    // Alternate function remap
    __HAL_AFIO_REMAP_SWJ_NOJTAG();
    // Enable HAL clock
    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOD_CLK_ENABLE();
    // Configure LED pins
    GPIO_InitTypeDef pin_config = {0};
    pin_config.Pin = GPIO_PIN_13;
    pin_config.Mode = GPIO_MODE_OUTPUT_PP;
    pin_config.Pull = GPIO_NOPULL;
    pin_config.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOC, &pin_config);
    pin_config.Pin = GPIO_PIN_5;
    HAL_GPIO_Init(GPIOD, &pin_config);
    // Configure switch pin
    pin_config.Pin = GPIO_PIN_4;
    pin_config.Mode = GPIO_MODE_INPUT;
    pin_config.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOB, &pin_config);
}
int main()
{
    // Initialize HAL
    HAL_Init();
    // System initializations
    system_init();
    // LED initialization
    GPIO_PinState state = GPIO_PIN_RESET;
    // Main loop
    while (1)
    {
        // Toggle LED state
        if (state == GPIO_PIN_SET)
        {
            state = GPIO_PIN_RESET;
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_SET);
        }
        else
        {
            state = GPIO_PIN_SET;
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
            HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, GPIO_PIN_RESET);
        }
        // Wait for switch to be pressed
        while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4) != GPIO_PIN_RESET);
        // Delay
        for (int i = 0; i < 500000; i++);
    }
}

以上代码展示了Keil MDK环境下jlink驱动实现的示例程序,其中代码逻辑简单,调试流程较清晰,可为初学者提供参考。