1

我正在尝试将 CMSIS-pack 与我的新 F103 项目一起使用。到目前为止,我一直在使用自动生成的项目结构,只是将一些文件移动到其他地方,一切正常。现在使用 CMSIS-pack,虽然代码已成功编译,但在将 .elf 下载到 MCU 时出现“加载失败”错误。我运行自动生成的调试配置,与我之前的所有项目相同。我正在使用 ST-link 和 GDB-server。这是错误:

Failure at line:13 in 'Target Software Startup Scripts'. Please edit the debug configuration settings.

Load Failed

调试日志:

[0.000] init():  Atollic TrueSTUDIO gdbserver for ST-Link. Version 4.2.2 (WIN32 2018-02-26 16:20:21 15675)
[1.229] reset_hw_wtchpt_module():  Hardware watchpoint supported by the target 
[1.233] createFlashParams():  STM32 device: Flash size =1024
[1.335] STM32_AppReset():  Enter STM32_AppReset() function 
[1.440] STM32_AppReset():  NVIC_DFSR_REG = 0x00000009
[1.441] STM32_AppReset():  NVIC_CFGFSR_REG = 0x00000000
[1.442] STM32_AppReset():  XPSR = 0x01000000
[1.442] Device_Initialise():  ST_LINK Major version =2 Jtag version =27
[1.442] Device_Initialise():  ST_LINK VID=1155 PID=14155
[1.442] Device_Initialise():  ST_LINK device status: HALT_MODE
[1.442] Device_Initialise():  ST_LINK detects target voltage =3.26 Volt
[1.443] initServerContext():  ST-Link device initialization OK
[1.445] WaitConnection():  Waiting for connection on port 61234...
[2.028] WaitConnection():  Accepted connection on port 61234...
[2.028] Device_GetStatus():  ST_LINK device status: HALT_MODE
[2.045] handlePacket():  Reading 0x4 bytes of memory from addr 0x8006b54 
[2.045] handlePacket():  Reading 0x2 bytes of memory from addr 0x8006b54 
[2.069] handlePacket():  Reading 0x20 bytes of memory from addr 0xe00fffd0 
[2.071] handlePacket():  Reading 0x2 bytes of memory from addr 0x807a 
[2.071] handlePacket():  Reading 0x2 bytes of memory from addr 0x807e 
[2.084] STM32_AppReset():  Enter STM32_AppReset() function 
[2.189] STM32_AppReset():  NVIC_DFSR_REG = 0x00000009
[2.190] STM32_AppReset():  NVIC_CFGFSR_REG = 0x00000000
[2.191] STM32_AppReset():  XPSR = 0x01000000
[2.755] handlePacket():  Reading 0x4 bytes of memory from addr 0xffffffff 
[2.755] handlePacket():  Reading 0x4 bytes of memory from addr 0xffffffff 
[2.930] handlePacket():  Reading 0x40 bytes of memory from addr 0x8006b40 
[2.932] handlePacket():  Reading 0x40 bytes of memory from addr 0x8006b80 
[6.065] STM32_AppReset():  Enter STM32_AppReset() function 
[6.170] STM32_AppReset():  NVIC_DFSR_REG = 0x00000009
[6.171] STM32_AppReset():  NVIC_CFGFSR_REG = 0x00000000
[6.172] STM32_AppReset():  XPSR = 0x01000000

任何想法为什么它不能下载代码,而相同的配置适用于我所有没有组件/CMSIS 包的项目?

问候,帕特里克

4

2 回答 2

1

自 3 天以来,我只找到了一个解决方案:卸载 9.3.0 Atollic true studio 版本并安装版本 9.0.1。之后,您将无法收到类似的错误。某些版本的某些板有问题...

于 2020-10-17T10:11:38.740 回答
0

查看 CMSIS 自动生成的项目文件和 CubeMx 生成的项目的构建生成文件的差异,我注意到 .list 文件存在差异。isr_vector 未列出。

如果您检查此部分 ,您会注意到新的自动生成的项目中缺少某些内容。它是您设备的启动文件。

在项目树中的 RTEconfig 对象中,有一种方法可以通过勾选来包含设备启动文件:

设备>启动

将此添加到 RTE 组件选择器并保存更改后,您将在项目树中找到文件

  • “CMSIS 系统和时钟配置文件”RTE>Device>STM32F103C8>system_stm32f10x.c

  • 将包含“CMSIS 设备外设访问头”stm32f10x.h

  • 所以“CMSIS系统和时钟配置头”文件startup_stm32f10x.h

恐怕在当今唯一可用的初始版本 v1.0.0 中,“CMSIS 设备启动中断向量”文件 startup_stm32f10x.s 不会以任何方式添加到项目中。

我修复它的方法是从CubeMx Generated project添加startup_stm32f10x.sSTM32F103C8_FLASH.ld文件。

STM32F103C8_FLASH.ld 位置必须添加到 project>C/C++ Build>Settings>C Linker>General>Linker script

我将 startup_stm32f10x.s 文件复制到 RTE>Device>STM32F103C8 文件夹

这样做,重新编译代码并启动调试会话,您将按预期获得正常的调试会话。这只是一个临时解决方案,但我希望我可以帮助某人。

于 2019-05-30T05:05:21.807 回答