DAPLink源码固件编译与制作

DAPLink源码固件编译与制作


  • ✨这里以Air/stm32f103cbt6固件编译为例。
  • 📌DAPLink源码地址:https://github.com/ARMmbed/DAPLink
  • 🔖 如果不想自己生成,可以使用合宙提供的现成的工程以及固件;https://gitee.com/openLuat/daplink/tree/main,但是需要注意,适配的是216MHz主频。🧨现成的固件下载地址:https://gitee.com/openLuat/luatos-soc-air32f103/tree/master/AIR_Jlink_Keil
    在这里插入图片描述
  • 🔖使用合宙提供的源码工程,还需要拷贝DAPLink源码工程中的version_git.h文件,或者修改对应的宏,否则会报错,找不到头文件。
    version_git.h
  • 📓stm32其他型号制作,可以参考DAPLINK源码生成的Keil工程目录型号列表:
  • 在这里插入图片描述

🈯需要使用到的CMD命令集合

python.exe -m pip install --upgrade pip  --升级pip命令pip install virtualenv  安装虚拟环境virtualenv venv	--创建虚拟环境cd D:\STM32\DAPLink-main\venv	-- 进入虚拟环境文件夹venv/Scripts/activate.bat		-- 执行激活虚拟环境cd D:\STM32\DAPLink-main\		-- 返回主目录pip install -r requirements.txt		-- 安装所需组件progen generate -t uvision		-- 生成Keil工程列表venv/Scripts/deactivate.bat		-- 退出虚拟环境

🛠固件编译前的环境搭建

  • 🌿需要安装Python3,并且将Python路径添加到系统环境变量中。
  • 📍Python下载地址:https://www.python.org/getit/
  • 🌿Windows环境下,Python虚拟环境的搭建::pip install virtualenv 安装虚拟环境
    在这里插入图片描述

  • 🌿在cmd命令提示符窗口内,通过cd命令进入到所下载下来的并解压的DAPLink源码文件夹内:cd D:\STM32\DAPLink-main
    在这里插入图片描述

  • 🌿在.\DAPLink-main源码所在文件夹内,创建虚拟环境:virtualenv venv,会随之创建一个名为venv文件夹。

在这里插入图片描述
在这里插入图片描述

  • 🌿通过cd命令进入到venv文件夹内:
    在这里插入图片描述
  • 🌿执行.\Scripts\activate.bat命令.激活虚拟环境
    在这里插入图片描述

✨上面2个步骤可以合并,直接在DAPLink-main源码所在文件位置,执行.venv\Scripts\activate.bat

  • 🌿f返回源目录:cd D:\STM32\DAPLink-main\;执行:pip install -r requirements.txt,安装所需组件。
    在这里插入图片描述
  • 🌿在DAPLink-main目录下,执行progen generate -t uvision;生成Keil工程列表
    在这里插入图片描述
  • 🌿退出虚拟环境
    在这里插入图片描述
  • ✨在DAPLink-main\projectfiles\uvision路径下的得到下面的工程列表,我们只需要保留其中的2个工程:
    在这里插入图片描述
  • ✨工程说明:
stm32f103xb_bl:Bootload固件,支持拖拽升级
stm32f103xb_stm32f103rb_if:实际实现dap功能的工程
  • 📢烧录完成stm32f103xb_bl.Hex固件后,通过USB(P11,PA12)连接电脑,会出现一个64M的U盘,让后将stm32f103xb_stm32f103rb_if工程生成的Hex文件拷贝到U盘中完成DAPLINK功能升级。

🔨工程编译

  • 🔖以stmAir32F103c8t6为例,型号选择:✨选择stm32/Air32F103C8t6作为对象都可以正常编译。

在这里插入图片描述
在这里插入图片描述

  • 📢由于工程中的头文件路径依赖关系,工程目录结构不能随意移动。(如需拷贝,需要将DAPLink-main目录全部拷贝)
    在这里插入图片描述
  • 🌿options for Target选项- User
    在这里插入图片描述
  • 🌿勾选生成Hex文件
    在这里插入图片描述
  • 🌿相关引脚配置都在IO_Config.h文件中:

在这里插入图片描述
在这里插入图片描述

/*** @file    IO_Config.h* @brief** DAPLink Interface Firmware* Copyright (c) 2009-2016, ARM Limited, All Rights Reserved* SPDX-License-Identifier: Apache-2.0** Licensed under the Apache License, Version 2.0 (the "License"); you may* not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/#ifndef __IO_CONFIG_H__
#define __IO_CONFIG_H__#include "stm32f1xx.h"
#include "compiler.h"
#include "daplink.h"COMPILER_ASSERT(DAPLINK_HIC_ID == DAPLINK_HIC_ID_STM32F103XB);//USB control pin
#define USB_CONNECT_PORT_ENABLE()    __HAL_RCC_GPIOA_CLK_ENABLE()
#define USB_CONNECT_PORT_DISABLE()   __HAL_RCC_GPIOA_CLK_DISABLE()
#define USB_CONNECT_PORT             GPIOA
#define USB_CONNECT_PIN              GPIO_PIN_15
#define USB_CONNECT_ON()             (USB_CONNECT_PORT->BSRR = USB_CONNECT_PIN)
#define USB_CONNECT_OFF()            (USB_CONNECT_PORT->BRR  = USB_CONNECT_PIN)//Connected LED
#define CONNECTED_LED_PORT           GPIOB
#define CONNECTED_LED_PIN            GPIO_PIN_11
#define CONNECTED_LED_PIN_Bit        11//When bootloader, disable the target port(not used)
#define POWER_EN_PIN_PORT            GPIOB
#define POWER_EN_PIN                 GPIO_PIN_15
#define POWER_EN_Bit                 15// nRESET OUT Pin
#define nRESET_PIN_PORT              GPIOB
#define nRESET_PIN                   GPIO_PIN_0
#define nRESET_PIN_Bit               0//SWD
#define SWCLK_TCK_PIN_PORT           GPIOB
#define SWCLK_TCK_PIN                GPIO_PIN_13
#define SWCLK_TCK_PIN_Bit            13#define SWDIO_OUT_PIN_PORT           GPIOB
#define SWDIO_OUT_PIN                GPIO_PIN_14
#define SWDIO_OUT_PIN_Bit            14#define SWDIO_IN_PIN_PORT            GPIOB
#define SWDIO_IN_PIN                 GPIO_PIN_12
#define SWDIO_IN_PIN_Bit             12//JTAG
#define TDO_PIN_PORT                 GPIOA
#define TDO_PIN                      GPIO_PIN_10
#define TDO_PIN_Bit                  10#define TDI_PIN_PORT                 GPIOA
#define TDI_PIN                      GPIO_PIN_9
#define TDI_PIN_Bit                  9//LEDs
//USB status LED
#define RUNNING_LED_PORT             GPIOA
#define RUNNING_LED_PIN              GPIO_PIN_2
#define RUNNING_LED_Bit              2#define PIN_HID_LED_PORT             GPIOA
#define PIN_HID_LED                  GPIO_PIN_6
#define PIN_HID_LED_Bit              6#define PIN_CDC_LED_PORT             GPIOA
#define PIN_CDC_LED                  GPIO_PIN_10
#define PIN_CDC_LED_Bit              10#define PIN_MSC_LED_PORT             GPIOA
#define PIN_MSC_LED                  GPIO_PIN_0
#define PIN_MSC_LED_Bit              0#endif

📚72MHz主频STM32F103编译的固件

  • 🏷由于源工程630M太多不方便分享。进提供相关固件。
📢烧录再啰嗦一遍:可通过STM32 ST-LINK Utility或者STM32CubeProgrammer软件烧录stm32f103xb_bl.Hex,Bootload程序。之后,就不需要以上工具了,再通过USB(PA11,PA12)连接电脑,将出现一个64M的U盘,将stm32f103xb_stm32f103rb_if.Hex文件拷贝到U盘中进行升级成DAPLINK。

在这里插入图片描述

链接:https://pan.baidu.com/s/1NDvg_HMIuZ8lElKROrOsEg 
提取码:gqq2
  • 🔖Keil 选择DAPLINK烧录默认选项界面:
    在这里插入图片描述

📘其他说明

  • ✨针对STM32F103制作DAPLINK,一定要注意,USB D+需要上拉一个1.5K的电阻,否则识别不到USB接口,STM32其他较新出的芯片,不需要此上拉电阻,这一点需要注意。
    在这里插入图片描述
  • 🍁ST-LINK原理图:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

官方指定Jmeter配置JVM堆内存方式

1.概述 在使用Jmeter做性能测试过程中,可能会应为默认设置的堆内存值较小出现堆内存溢出问题,此时解决的方式有两种,分布式测试和调大堆内存。下面介绍官方推荐调整堆内存方法。 2.调整Jmeter堆内存 2.1.介绍官方推荐堆内存调整方法(jmete…

mysql原理--连接的原理

1.连接简介 1.1.连接的本质 为了故事的顺利发展,我们先建立两个简单的表并给它们填充一点数据: mysql> CREATE TABLE t1 (m1 int, n1 char(1)); mysql> CREATE TABLE t2 (m2 int, n2 char(1)); mysql> INSERT INTO t1 VALUES(1, a), (2, b), (…

攻防世界-web-ics07

1. 题目描述 工控云管理系统项目管理页面解析漏洞 打开链接,是这样的一个界面 我们点击项目管理 可以看到,这里有一个查询界面,还有个view-source的链接,我们点击下view-source,可以看到这里面共有三段php代码 第一段…

在Spring Cloud中使用Zuul网关实现一个案例

本篇依旧是在Spring Cloud系列的博主已经搭建的Spring Cloud微服务模块上进行的,注意,本文依旧适合初学者和或者在Spring Cloud框架了解不是很深入的基础的开发者,本系列说不上有多高大上,博主坚持通过简单的案例,让开…

嵌入式中GPIO的工作原理-面试工作必会技能

GPIO工作方式 1、4种输入模式 输入浮空输入上拉输入下拉模拟输入 如下图为GPIO的基本结构,它主要由4部分组成,其中我们所看到的的最右边的I/O引脚,也就是芯片外接可看到的引脚,其它的部分都是GPIO内部的结构。 ①保护二极管 保护…

【新版HI3559AV100开发注意事项(二)】

#新版HI3559AV100开发注意事项(二) 十一、请问海思HI3559AV100 SPC030资料里面的HI3559ADMEB_VER_C_PCB.pcb是用什么软件打开啊? 答:PADS VX 2.2 Altium designer 十二、hi3559级联问题请教 在SDK的文档中只看到了两块Hi3559板…

服务器数据恢复-EMC存储raid5磁盘物理故障离线的数据恢复案例

服务器数据恢复环境&故障: 一台emc某型号存储服务器,存储服务器上组建了一组raid5磁盘阵列,阵列中有两块磁盘作为热备盘使用。存储服务器在运行过程中有两块磁盘出现故障离线,但是只有一块热备盘激活,最终导致该ra…

【️如何理解Java中的多态】

✅如何理解Java中的多态? ✅理解Java中的多态 ✅ 扩展知识仓✅方法的重载✅方法的重写✅重载和重写的区别区分 ✅理解Java中的多态 多态的概念比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 如果…

Java 中的内部类的定义

目录 一、成员内部类 二、静态内部类 三、局部内部类 四、匿名内部类 一、成员内部类 public class InnerClass {String name;private Integer age;static String hobby;/*** 成员内部类* 1、成员内部类中只能定义非静态属性和方法* 2、成员内部类中可以访问外部类的成员&a…

vue3表格导入导出.xlsx

在这次使用时恰好整出来了,希望大家也能学习到,特此分享出来 使用前确保安装以下模块,最好全局配置element-plus ### 展示一下 ### ###导出选项 ### ###导入de数据 ### 安装的模块 npm install js-table2excel // 安装js-table2excel n…

自动化测试工具选择指南

随着软件开发周期的不断缩短和需求的增加,自动化测试变得愈发重要。然而,选择适合项目的自动化测试工具并非易事。以下是一些指导原则,帮助你在众多自动化测试工具中做出明智的选择。 1. 项目需求分析 在选择自动化测试工具之前,首…

海康威视对讲广播系统 RCE漏洞复现(CVE-2023-6895)

0x01 产品简介 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 0x02 漏洞概述 Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版本存在操作系统命令注入漏洞,该漏洞源于文件/php/ping.php的参数jsonda…

阿里云k8s集群搭建

文章目录 一、安装前准备1.环境2.k8s集群规划 二、k8s 安装1. centos基础设置2. docker 安装3. k8s安装3.1 添加阿里云 yum 源3.2 安装 kubeadm、kubelet、kubectl3.3 部署 Kubernetes Master3.4 加入 Kubernetes Node3.5 部署 CNI 网络插件3.6 测试 kubernetes 集群 一、安装前…

Python | Flask测试:发送post请求的接口测试

HTTP/1.1 协议规定的 HTTP 请求方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 几种。POST通常用来向服务端提交数据,主要用于提交表单、上传文件。 HTTP 协议是以ASCII码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为…

浅析:智能化视频安全监管系统的设计与实现步骤

关于智能化视频监管方案,小编已经和大家分享了很多,今天就和大家来探讨一下关于智能化视频安全监管系统的设计与实现步骤。 首先需要分析需求。要与使用者和业务部门合作,明确系统的功能和需求,例如,确定监控区域、安…

MyBatis——MyBatis的原始Dao开发(了解)

MyBatis的原始Dao开发-了解 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方式和Mapper接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。在之前的文章已经给大家介绍了基于代理方式的dao开发&#x…

在scrapy 使用selenium模拟登录获取cookie

前言 最近有一点点爬虫需求,想总结一下scrapy框架的一些基本使用方法,加深印象,自己一直习惯使用一些脚本文件运行爬虫,面对数据量非常大,稳定性要求比较高的,效率需求比较高的情况下还是用scrapy较为合适…

Azure Machine Learning - 提示工程高级技术

本指南将指导你提示设计和提示工程方面的一些高级技术。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师&#xff0c…

Python MySQL数据库连接实现增删改查

一、应用场景 python项目连接MySQL数据库时,需要第三方库的支持。这篇文章使用的是PyMySQL库,适用于python3.x。 二、安装 pip install PyMySQL三、使用方法 1.导入模块 import pymysql2.连接数据库 db pymysql.connect(hostlocalhost,usercode_s…

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后,我们可以将寄存器信息保存到设备树,即便是更换了一个设备,我们也无需修改驱动文件,只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式,这两种方式的主要是设备树中 re…