1、准备好相关硬件
2、arduino环境搭建参考前文
https://blog.csdn.net/qq_38288618/article/details/90553252
3、接线参考看前文
https://blog.csdn.net/qq_38288618/article/details/98640223
4、arduino ide相关设置,如图
5、找个示例编译成功,下载出现如下错误
Arduino:1.8.9 (Windows 10), 开发板:"Generic STM32F103C series, STM32F103C8 (20k RAM. 64k Flash), JLink, 72Mhz (Normal), Smallest (default)"
项目使用了 16564 字节,占用了 (25%) 程序存储空间。最大为 65536 字节。
全局变量使用了11552字节,(56%)的动态内存,余留8928字节局部变量。最大为20480字节。
D:\Program Files\arduino-1.8.9>rem: @echo off
D:\Program Files\arduino-1.8.9>rem: Note D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win\ get path of this batch file
D:\Program Files\arduino-1.8.9>rem: Need to change drive if My Documents is on a drive other than C:
D:\Program Files\arduino-1.8.9>set driverLetter=D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win\
D:\Program Files\arduino-1.8.9>set driverLetter=D:
D:\Program Files\arduino-1.8.9>D:
D:\Program Files\arduino-1.8.9>cd D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win\
D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win>rem: the two line below are needed to fix path issues with incorrect slashes before the bin file name
D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win>set tmpBinFilePath=C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_204733/rtos_blink.ino.bin
D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win>set tmpBinFilePath=C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_204733\rtos_blink.ino.bin
D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win>rem: create commander script file with the tmp bin that the Arduino IDE creates
D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win>JLink.exe -device STM32F103C8 -if SWD -speed auto -CommanderScript C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_204733\rtos_blink.ino.bin.jlink
'JLink.exe' �����ڲ����ⲿ���Ҳ���ǿ����еij���
���������ļ���
上传项目出错
这里的乱码应该是
'JLink.exe' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
分析了一下,
arduino上传(下载)时调用了一个bat,安装目录如D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win\jlink_upload.bat
bat文件内容如下
rem: @echo off
rem: Note %~dp0 get path of this batch file
rem: Need to change drive if My Documents is on a drive other than C:
set driverLetter=%~dp0
set driverLetter=%driverLetter:~0,2%
%driverLetter%
cd %~dp0
rem: the two line below are needed to fix path issues with incorrect slashes before the bin file name
set tmpBinFilePath=%1
set tmpBinFilePath=%tmpBinFilePath:/=\%
rem: create commander script file with the tmp bin that the Arduino IDE creates
@echo erase > %tmpbinfilepath%.jlink
@echo loadbin %tmpbinfilepath% , 0x8000000 >> %tmpbinfilepath%.jlink
@echo r >> %tmpbinfilepath%.jlink
@echo q >> %tmpbinfilepath%.jlink
JLink.exe -device STM32F103C8 -if SWD -speed auto -CommanderScript %tmpBinFilePath%.jlink
可见其最后调用了JLink.exe
可是文件夹里并没有这个文件
因为在keil下Jtag模式是正常的,能不能借用keil的下的文件呢?
于是找到安装目录的
D:\Keil_v5\ARM\Segger
JL2CM3.dll
JLink.exe
JLinkARM.dll
JLTAgdi.dll
将相关的文件拷贝到D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win,
再执行下载就ok了
我觉得配置一个Path的环境变量也是可以的,让命令找到 JLink.exe的位置
执行结果如下
D:\Program Files\arduino-1.8.9\hardware\Arduino_STM32-master\tools\win>JLink.exe -device STM32F103C8 -if SWD -speed auto -CommanderScript C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_204733\rtos_blink.ino.bin.jlink
SEGGER J-Link Commander V6.00d (Compiled Jul 29 2016 19:08:27)
DLL version V6.16c, compiled Jun 16 2017 18:14:49
Script file read successfully.
Processing script file...
J-Link connection not established yet but required for command.
Connecting to J-Link via USB...O.K.
Firmware: J-Link V9 compiled Jun 16 2017 16:15:10
Hardware version: V9.30
S/N: 59300616
License(s): RDI, FlashBP, FlashDL, JFlash, GDB
VTref = 3.369V
Target connection not established yet but required for command.
Device "STM32F103C8" selected.
TotalIRLen = 9, IRPrint = 0x0011
JTAG chain detection found 2 devices:
#0 Id: 0x3BA00477, IRLen: 04, CoreSight JTAG-DP
#1 Id: 0x16410041, IRLen: 05, STM32 Boundary Scan
TotalIRLen = 9, IRPrint = 0x0011
JTAG chain detection found 2 devices:
#0 Id: 0x3BA00477, IRLen: 04, CoreSight JTAG-DP
#1 Id: 0x16410041, IRLen: 05, STM32 Boundary Scan
Scanning APs, stopping at first AHB-AP found.
AP[0] IDR: 0x14770011 (AHB-AP)
AHB-AP ROM: 0xE00FF000 (Base addr. of first ROM table)
CPUID reg.: 0x411FC231. Implementer code: 0x41 (ARM)
Found Cortex-M3 r1p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 001BB000 SCS
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 001BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 000BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 001BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 001BB923 TPIU-Lite
Found SW-DP with ID 0x1BA01477
Found SW-DP with ID 0x1BA01477
Using pre-configured AP[0] as AHB-AP to communicate with core
AHB-AP ROM: 0xE00FF000 (Base addr. of first ROM table)
CPUID reg: 0x411FC231. Implementer code: 0x41 (ARM)
Found Cortex-M3 r1p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 001BB000 SCS
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 001BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 000BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 001BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 001BB923 TPIU-Lite
Cortex-M3 identified.
Erasing device (STM32F103C8)...
J-Link: Flash download: Total time needed: 1.699s (Prepare: 0.249s, Compare: 0.000s, Erase: 1.416s, Program: 0.000s, Verify: 0.000s, Restore: 0.033s)
Erasing done.
Downloading file [C:\Users\ADMINI~1\AppData\Local\Temp\arduino_build_204733\rtos_blink.ino.bin]...
J-Link: Flash download: Flash programming performed for 1 range (17408 bytes)
J-Link: Flash download: Total time needed: 2.133s (Prepare: 0.481s, Compare: 0.137s, Erase: 0.074s, Program: 1.150s, Verify: 0.004s, Restore: 0.285s)
O.K.
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
Setting AIRCR.SYSRESETREQ
Script processing completed.