沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置
目录
- 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录
- 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录
- 沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置
使用 DAP-Link 烧录


DAP-Link 是ARM官方的一款开源的调试仿真器,也叫CMSIS-DAP, 几乎支持所有Cortex-M内核的MCU,不挑品牌厂家. 其功能等价于ST的ST-Link.
在Win10 Keil5 MDK中可以不需驱动, 不需配置, 即插即用. 在 Linux 的 PlatformIO 中, 需要做一些配置才能正常使用.
1. 首先定位到 PlatformIO 的配置目录
默认的目录是 /home/[你的用户名]/.platformio/ , 下面能看到 packages, penv, platforms 这几个目录, 这一步很重要, 因为需要往配置目录中添加新文件
2. 在开发板配置中添加 CH32F103C8
在 platforms/ststm32/boards 目录下, 新增一个 bluepill_ch32f103c8.json 文件, 文件内容如下,
{
"build": {
"arduino": {
"variant_h": "variant_PILL_F103Cx.h"
},
"core": "stm32",
"cpu": "cortex-m3",
"extra_flags": "-DSTM32F1 -DSTM32F103xB",
"f_cpu": "72000000L",
"hwids": [
[
"0x1EAF",
"0x0003"
],
[
"0x1EAF",
"0x0004"
]
],
"mcu": "stm32f103c8t6",
"product_line": "STM32F103xB",
"variant": "STM32F1xx/F103C8T_F103CB(T-U)",
"zephyr": {
"variant": "stm32_min_dev_blue"
}
},
"debug": {
"default_tools": [
"stlink"
],
"jlink_device": "STM32F103C8",
"openocd_extra_args": [
"-c",
"reset_config none"
],
"openocd_target": "ch32f1x",
"svd_path": "STM32F103xx.svd"
},
"frameworks": [
"arduino",
"mbed",
"cmsis",
"libopencm3",
"stm32cube",
"zephyr"
],
"name": "BluePill CH32F103C8",
"upload": {
"maximum_ram_size": 20480,
"maximum_size": 65536,
"protocol": "stlink",
"protocols": [
"jlink",
"cmsis-dap",
"stlink",
"blackmagic",
"mbed",
"dfu"
]
},
"url": "http://www.wch.cn/products/CH32F103.html",
"vendor": "Generic"
}
这个文件是基于 bluepill_f103c8.json 修改的, 主要就是修改了 "openocd_target": "ch32f1x",, 更换了 openocd 的配置文件.
添加之后, 在 PlatformIO 的 Boards 中, 就能搜索到名为"BluePill CH32F103C8"的开发板
3. 修改 platformio.ini
将 board 修改为自定义的 bluepill_ch32f103c8, 修改之后配置类似于
[env:bluepill_ch32f103c8_dap]
platform = ststm32
board = bluepill_ch32f103c8
framework = cmsis
upload_protocol = cmsis-dap
debug_tool = cmsis-dap
4. 在OpenOCD配置中添加 CH32F1X
在 packages/tool-openocd/scripts/target 目录下, 新增一个 ch32f1x.cfg 文件, 内容为
# CH32F103x
set CPUTAPID 0x2ba01477
source [find target/stm32f1x.cfg]
配置的内容, 是在 stm32f1x.cfg 这个配置的基础上定义芯片ID是 0x2ba01477, 这样就不需要在 platformio.ini 中额外配置了
5. 烧录
大部分情况下, 这时候连上DAP-Link就可以烧录了, 输出为
openocd -d2 -s /home/milton/.platformio/packages/tool-openocd/scripts -f interface/cmsis-dap.cfg -c "transport select swd" -f target/ch32f1x.cfg -c "reset_config none" -c "program {.pio/build/bluepill_ch32f103c8_dap/firmware.elf} verify reset; shutdown;"
xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2021-10-16-21:15)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
debug_level: 2
swd
Info : DEPRECATED target event trace-config; use TPIU events {pre,post}-{enable,disable}
none separate
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Serial# = 205544643577
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : stm32f1x.cpu: Cortex-M3 r2p1 processor detected
Info : stm32f1x.cpu: target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
** Programming Started **
Info : device id = 0x20000410
Info : flash size = 64kbytes
** Programming Finished **
** Verify Started **
** Verified OK **
** Resetting Target **
shutdown command invoked
6. 调节频率
如果出现这样的错误
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800014c msp: 0x20005000
** Programming Started **
Info : device id = 0x20000410
Info : flash size = 64kbytes
Info : SWD DPIDR 0x2ba01477
Error: Failed to write memory at 0x2000003c
Error: error writing to flash at address 0x08000000 at offset 0x00000000
embedded:startup.tcl:1070: Error: ** Programming Failed **
in procedure 'program'
in procedure 'program_error' called at file "embedded:startup.tcl", line 1135
at file "embedded:startup.tcl", line 1070
*** [upload] Error 1
说明DAP-Link已经正常识别芯片, 但是在写入时出错, 可以将频率降低后再试. 频率的设置在
packages/tool-openocd/scripts/target/stm32f1x.cfg
修改其中的
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
adapter speed 1000
可以设置为500或800后再次尝试
使用 WCH Link 烧录



WCH-Link是基于WCH549芯片的下载和调试模块, 支持3.3V/5V双电源输出, 支持USB转TTL串口, 用LED指示灯标识工作状态, 有两种工作模式:
- CMSIS-DAP模式: 可以用于带有SWD接口的 ARM 内核MCU的调试和下载
- RISC-V模式: 可用于RISC-V架构的沁恒系列MCU调试和下载,
资料查看
- WCH-Link仿真调试器模块 http://www.wch.cn/products/WCH-Link.html
- 资料下载 http://www.wch.cn/bbs/thread-71088-1.html
WCH-Link 使用的是带USB和串口功能的8位MCU做主控, 价格非常有竞争力, 当前的成本估计在七元以内,
这个价格ST-Link和DAP-Link基本上是做不到的, 主控芯片的成本都不止这个数了.
1. 在开发板配置中添加 CH32F103
与 DAP-Link 的配置一样
2. 修改 platformio.ini
与 DAP-Link 的配置一样
3. 在OpenOCD配置中添加 CH32F1X
在 packages/tool-openocd/scripts/target 目录下, 新增 ch32f1x.cfg 文件, 内容为
# CH32F103x
set CPUTAPID 0x2ba01477
cmsis_dap_vid_pid 0x1a86 0x8011
source [find target/stm32f1x.cfg]
与 DAP-Link 的配置相比, 增加了一行 cmsis_dap_vid_pid 0x1a86 0x8011, 这样 openocd 才能将 WCH-Link 识别为 CMSIS DAP 设备.
4. 修改 99-platformio-udev.rules
安装 PlatformIO 的时候, 应该在 /etc/udev/rules.d/ 目录下添加过 99-platformio-udev.rules 这个文件, 用于给 USB 设备添加 0666 权限.
而 WCH-Link 对于 PlatformIO 来说是新设备, 在 99-platformio-udev.rules 中并未对其添加规则, 如果不设置, 会出现权限错误
Error: could not open device 0x1a86:0x8011: Access denied (insufficient permissions)
Error: unable to open CMSIS-DAP device 0x1a86:0x8011
Error: unable to find a matching CMSIS-DAP device
Error: No Valid JTAG Interface Configured.
*** [upload] Error 255
在 99-platformio-udev.rules 中需要新增 WCH Link 的配置, 在最底下添加两行
# WCH Link (CMSIS-DAP compatible adapter)
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="8011", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"
保存后执行
sudo udevadm control --reload-rules
然后重新拔插WCHLink让权限生效
5. 烧录
以上配置正确的话, 烧录输出为
CURRENT: upload_protocol = cmsis-dap
openocd -d2 -s /home/milton/.platformio/packages/tool-openocd/scripts -f interface/cmsis-dap.cfg -c "transport select swd" -f target/ch32f1x.cfg -c "reset_config none" -c "program {.pio/build/bluepill_f103c8_ch32/firmware.elf} verify reset; shutdown;"
xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2021-10-16-21:15)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
debug_level: 2
swd
Info : DEPRECATED target event trace-config; use TPIU events {pre,post}-{enable,disable}
none separate
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : stm32f1x.cpu: Cortex-M3 r2p1 processor detected
Info : stm32f1x.cpu: target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800014c msp: 0x20005000
** Programming Started **
Info : device id = 0x20000410
Info : flash size = 64kbytes
** Programming Finished **
** Verify Started **
** Verified OK **
** Resetting Target **
shutdown command invoked
结束
如果需要两种烧录调试工具并存的话, 可以创建两个board配置, 在 platformio.ini 中创建两个env分别使用不同的board, 使用时通过 [platformio] default_envs = xxxx进行切换
参考
沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置的更多相关文章
- 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录
目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 StdPeriphLi ...
- 沁恒CH32F103C8T6的开发和烧录配置说明
概述 CH32F1系列是沁恒生产的32位Cortex-M3 MCU, 片上集成了时钟安全机制.多级电源管理. 通用DMA控制器等. 此系列具有 2 路 USB2.0接口.多通道 TouchKey. 1 ...
- 沁恒CH32V103C8T6开发环境笔记
CH32V103C8T6 CH32V103C8T6是沁恒的RISC-V内核MCU, 基于RISC-V3A处理器, 内核采用2级流水线处理,设置了静态分支预测.指令预取机制,支持DMA. 主要参数如下 ...
- 沁恒CH32V103C8T6(二): Linux RISC-V编译和烧录环境配置
目录 沁恒CH32V103C8T6(一): 核心板焊接和Windows开发环境配置 沁恒CH32V103C8T6(二): Linux RISC-V编译和烧录环境配置 硬件准备 CH32V103 开发板 ...
- 沁恒CH32V003F4P6 开发板上手报告和Win10环境配置
CH32V003 沁恒最近推出的低价CH32V003系列, 基于青稞RISC-V2A内核, 48MHz主频, 2KB SRAM, 16KB Flash, 工作电压兼容3.3V和5V. 主要参数如下 S ...
- 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置
目录 沁恒CH32V003(一): CH32V003F4P6开发板上手报告和Win10环境配置 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置 硬件准备 沁 ...
- Linux内核中影响tcp三次握手的一些协议配置
在Linux的发行版本中,都存在一个/proc/目录,有的也称它为Proc文件系统.在 /proc 虚拟文件系统中存在一些可调节的内核参数.这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 ...
- 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置
[转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...
- centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课
centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB ...
随机推荐
- 1161 - Extreme GCD
1161 - Extreme GCD PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB All ...
- 一、golang以及vscode的安装和配置
1.golang的下载安装 golang的官网最近好像整合了内容,统一到了一个地址:https://go.dev/ 首页直接点击download,下载自己对应的版本即可. 安装是傻瓜式的,一般默认安装 ...
- MySQL 的性能
影响数据库性能的因素: SQL 脚本 数据库服务器配置 网卡流量 磁盘 IO 大表操作 大事务操作 存储引擎 数据库参数配置 1. SQL 脚本 超高的 QPS 和 TPS TPS:英文全称是 Tra ...
- Proximal Algorithms 3 Interpretation
目录 Moreau-Yosida regularization 与次梯度的联系 改进的梯度路径 信赖域问题 Proximal Algorithms 这一节,作者总结了一些关于proximal的一些直观 ...
- Tomcat 服务器的端口会与其他的服务器端口发生冲突,此时则需要修改 Tomcat 服务器的端口
查看相关知识 查看相关练习 Tomcat 服务器的端口会与其他的服务器端口发生冲突,此时则需要修改 Tomcat 服务器的端口 实现步骤: 1.找到 Tomcat 服务器安装目录下的 conf 文件夹 ...
- Python两处容易理解错误的设计
函数内部修改可变类型的变量时不会视作局部变量(除非函数内有该变量的赋值运算符),因为如果做局部变量处理则修改语句势必报错,此处的理解不会有歧义: s = 'test' d = {True:1,2:'S ...
- iis站点下发布多个vue项目
记录一下iis上某个域名下发布多个vue项目的过程,主要分为webpack打包前的配置和iis重定向的配置. vue打包配置: 1.在webpack 配置文件中(以vue.config.js为例),指 ...
- What's new in Dubbo-go v1.5.1
近期我们发布了 dubbo-go v1.5.1,虽然是 v1.5 的一个子版本,但相比于 v1.5.0, 社区还是投入了很大人力添加了如下重大改进. 1 应用维度注册模型 在新模型 release 后 ...
- emqx的acl.conf使用
allow_anonymous=true就不说了,打开这个就像开了挂 现在讨论一下allow_anonymous=false,这样的话你会发现,client连接不上了 后来发现连接和权限 是两个事.. ...
- java 字符串 大小写转换 、去掉首末端空格 、根据索引切割字符 、判断是否含有某连续字符串
1. 字符串转大写: toUpperCase() 字符串转小写: toLowerCase() @Test public void tt(){ String d = "sdgGHJGjghGH ...