合适的工具是必要的,总结一下现在的工具。
keil具备编码,调试功能,支持CMSIS-DAP(野火)(jlink v8 不支持rt1021板子)
使用非gcc,有代码提示功能,但是这个提示差评。支持gcc,选项一些没处设置
MCUXpressoIDE 是gcc的编译器,使用make,对自身的sdk是全支持的(直接提供各种选项),不支持CMSIS-DAP
openocd 这个可以打开设备,可以停机,然后,没有然后了,没有和任何一个ide结合起来。
vscode 好像有支持的插件。但是,没下文...
openocd 设置是这样的
在bin目录下建my.cfg,写入
interface cmsis-dap
transport select swd
source [find target/stm32f4x.cfg]
运行openocd.exe -f my.cfg
显示的结果是这样:
C:\xpack-openocd-0.11.0-4\bin>C:\xpack-openocd-0.11.0-4\bin\openocd.exe -f my.cfg
xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-17:32)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
DEPRECATED! use 'adapter driver' not 'interface'
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: Test domain timer 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 = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 2000 kHz
Info : SWD DPIDR 0x0bd11477
Info : [stm32f4x.cpu] Cortex-M7 r1p1 processor detected
Info : [stm32f4x.cpu] target has 8 breakpoints, 4 watchpoints
Info : [stm32f4x.cpu] external reset detected
Info : starting gdb server for stm32f4x.cpu on 3333
Info : Listening on port 3333 for gdb connections
stm32f4是M4(cmsisdap的芯) ,这个Cortex-M7 按原义是目标cpu,但没找到
telnet连接4444,输入
halt
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249c msp: 0x2000ffe8
> reg
===== arm v7m registers
(0) r0 (/32): 0x00000000
(1) r1 (/32): 0x00000000
......
gdb 连3333 没成功,按这个修改一个,是个想法,
到此,平台确定是vscode 写 keil 调试, MCUXpressoIDE参考,编译成elf,调试可见c代码
上面不修改了,有新进展
试了下新想法
修改my.cfg 如下
interface cmsis-dap
transport select swd
source [find target/swj-dp.tcl]
source [find mem_helper.tcl]
set _CHIPNAME MIMXRT1021
set _ENDIAN little
# Work-area is a space in RAM used for flash programming
# By default use 32kB (Available RAM in smallest device STM32F410)
if { [info exists WORKAREASIZE] } {
set _WORKAREASIZE $WORKAREASIZE
} else {
set _WORKAREASIZE 0x8000
}
#jtag scan chain
if { [info exists CPUTAPID] } {
set _CPUTAPID $CPUTAPID
} else {
if { [using_jtag] } {
# See STM Document RM0090
# Section 38.6.3 - corresponds to Cortex-M4 r0p1
set _CPUTAPID 0x4ba00477
} {
set _CPUTAPID 0x2ba01477
}
}
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
tpiu create $_CHIPNAME.tpiu -dap $_CHIPNAME.dap -ap-num 0 -baseaddr 0xE0040000
if {[using_jtag]} {
jtag newtap $_CHIPNAME bs -irlen 5
}
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
if { [info exists QUADSPI] && $QUADSPI } {
set a [llength [flash list]]
set _QSPINAME $_CHIPNAME.qspi
flash bank $_QSPINAME stmqspi 0x90000000 0 0 0 $_TARGETNAME 0xA0001000
}
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 16MHz, so use F_JTAG = 2MHz
#
# Since we may be running of an RC oscilator, we crank down the speed a
# bit more to be on the safe side. Perhaps superstition, but if are
# running off a crystal, we can run closer to the limit. Note
# that there can be a pretty wide band where things are more or less stable.
adapter speed 2000
adapter srst delay 100
if {[using_jtag]} {
jtag_ntrst_delay 100
}
reset_config srst_nogate
if {![using_hla]} {
# if srst is not fitted use SYSRESETREQ to
# perform a soft reset
cortex_m reset_config sysresetreq
}
$_TARGETNAME configure -event examine-end {
# Enable debug during low power modes (uses more power)
# DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP
mmw 0xE0042004 0x00000007 0
# Stop watchdog counters during halt
# DBGMCU_APB1_FZ |= DBG_IWDG_STOP | DBG_WWDG_STOP
mmw 0xE0042008 0x00001800 0
}
proc proc_post_enable {_chipname} {
targets $_chipname.cpu
if { [$_chipname.tpiu cget -protocol] eq "sync" } {
switch [$_chipname.tpiu cget -port-width] {
1 {
mmw 0xE0042004 0x00000060 0x000000c0
mmw 0x40021020 0x00000000 0x0000ff00
mmw 0x40021000 0x000000a0 0x000000f0
mmw 0x40021008 0x000000f0 0x00000000
}
2 {
mmw 0xE0042004 0x000000a0 0x000000c0
mmw 0x40021020 0x00000000 0x000fff00
mmw 0x40021000 0x000002a0 0x000003f0
mmw 0x40021008 0x000003f0 0x00000000
}
4 {
mmw 0xE0042004 0x000000e0 0x000000c0
mmw 0x40021020 0x00000000 0x0fffff00
mmw 0x40021000 0x00002aa0 0x00003ff0
mmw 0x40021008 0x00003ff0 0x00000000
}
}
} else {
mmw 0xE0042004 0x00000020 0x000000c0
}
}
$_CHIPNAME.tpiu configure -event post-enable "proc_post_enable $_CHIPNAME"
$_TARGETNAME configure -event reset-init {
# Configure PLL to boost clock to HSI x 4 (64 MHz)
mww 0x40023804 0x08012008 ;# RCC_PLLCFGR 16 Mhz /8 (M) * 128 (N) /4(P)
mww 0x40023C00 0x00000102 ;# FLASH_ACR = PRFTBE | 2(Latency)
mmw 0x40023800 0x01000000 0 ;# RCC_CR |= PLLON
sleep 10 ;# Wait for PLL to lock
mmw 0x40023808 0x00001000 0 ;# RCC_CFGR |= RCC_CFGR_PPRE1_DIV2
mmw 0x40023808 0x00000002 0 ;# RCC_CFGR |= RCC_CFGR_SW_PLL
# Boost JTAG frequency
adapter speed 8000
}
$_TARGETNAME configure -event reset-start {
# Reduce speed since CPU speed will slow down to 16MHz with the reset
adapter speed 2000
}
///
这个就是删除stm32 ,当然,这个不会,就是试试,然后
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: Test domain timer 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 = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 2000 kHz
Info : SWD DPIDR 0x0bd11477
Info : [MIMXRT1021.cpu] Cortex-M7 r1p1 processor detected
Info : [MIMXRT1021.cpu] target has 8 breakpoints, 4 watchpoints
Info : [MIMXRT1021.cpu] external reset detected
Info : starting gdb server for MIMXRT1021.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'gdb' connection on tcp/3333
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249c msp: 0x81dfffe8
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
invalid command name "s"
invalid command name "setpu"
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249e msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x600024a2 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x600024a4 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x60002496 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x60002498 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249a msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249c msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249e msp: 0x81dfffe8
invalid command name "start"
invalid command name "s"
invalid command name "s"
invalid command name "s"
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x600024a2 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x600024a4 msp: 0x81dfffe8
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Warn : Prefer GDB command "target extended-remote :3333" instead of "target remote :3333"
前面用ida 可以连,不能调试,看不见单步动作,输入命令有回应(不会用)
后面用arm-none-eabi-gdb.exe连,也能连上(也不会用)
这个算在工作吗?