STM32F103 适用于 Arduino IDE 但不适用于 STM32CubeIDE

问题描述

我刚买了一个 STM32F103“蓝色药丸”和一个 ST-Link V2 克隆来对其进行编程。我遇到了一个奇怪的问题,我可以使用 Arduino IDE 对微控制器进行编程和闪存,它工作得很好,至少 LED 和东西会闪烁,但是当我尝试使用 ST 提供的 STM32CubeIDE 对其进行闪存时,它不起作用. 似乎知道有一个微控制器连接到 ST-Link,当我尝试刷新它时,如果我在板上运行闪烁的代码,它就会停止,不再闪烁,就像 STM32CubeIDE 擦除了之前的程序一样,但不会加载新的。 这是我试过的:

  • 我确保我没有使用 ST-Link 用于编程和调试的引脚,并且该项目已为这些引脚配置了“串行调试”
  • 我尝试让板载 LED 闪烁,甚至只使用 HAL_GPIO_WritePin() 打开输出,什么也不做
  • 我读过一些板子有克隆微控制器(即使我的有 ST 标志)并且只能使用 OpenOCD 调试器,所以我也尝试过,修改“stm32f1x.cfg”所以它忽略了设备 ID
  • 我还了解到将重置更改为“软件系统重置”是有效的,所以我尝试使用 OpenOCD 和 GDB 服务器,但不走运
  • 我尝试重新安装 IDE

我真的不知道发生了什么,考虑到使用 Arduino IDE 它首先尝试工作,甚至没有错误或警告消息。

这是我尝试使用 GDB 服务器时的 Consolre 报告:

copyright (c) 2020,STMicroelectronics. All rights reserved.

Starting server with the following options:
        Persistent Mode            : disabled
        Logging Level              : 1
        Listen Port Number         : 61234
        Status Refresh Delay       : 15s
        Verbose Mode               : disabled
        SWD Debug                  : Enabled

Waiting for debugger connection...
Debugger connected
      -------------------------------------------------------------------
                       STM32CubeProgrammer v2.7.0-RC1                  
      -------------------------------------------------------------------

ST-LINK SN  : 4B2A18002C135737334D4E00
ST-LINK FW  : V2J37S7
Board       : --
Voltage     : 3.19V
SWD freq    : 4000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x410
Revision ID : Rev X
Device name : STM32F101/F102/F103 Medium-density
Flash size  : 64 KBytes
Device type : MCU
Device cpu  : Cortex-M3



Memory Programming ...
opening and parsing file: ST-LINK_GDB_server_a10312.srec
  File          : ST-LINK_GDB_server_a10312.srec
  Size          : 6244 Bytes
  Address       : 0x08000000 


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 6]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:00.483



Verifying ...




Download verified successfully 


Debugger connection lost.

这是 OpenOCD 的输出

Open On-Chip Debugger 0.11.0-rc2+dev-00037-g4c4dbd9 (2021-02-09-13:39)
Licensed under GNU GPL v2
For bug reports,read
    http://openocd.org/doc/doxygen/bugs.html
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.159120
Info : Unable to match requested speed 8000 kHz,using 4000 kHz
Info : Unable to match requested speed 8000 kHz,using 4000 kHz
Info : clock speed 4000 kHz
Info : stlink_dap_op_connect(connect)
Info : SWD DPIDR 0x1ba01477
Info : STM32F103C8Tx.cpu: hardware has 6 breakpoints,4 watchpoints
Info : starting gdb server for STM32F103C8Tx.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'gdb' connection on tcp/3333
Info : device id = 0x20036410
Info : flash size = 64kbytes
Warn : GDB connection 1 on target STM32F103C8Tx.cpu not halted
undefined debug reason 8 - target needs reset
Info : accepting 'gdb' connection on tcp/3333
Warn : GDB connection 2 on target STM32F103C8Tx.cpu not halted
undefined debug reason 8 - target needs reset
target halted due to debug-request,current mode: Thread 
xPSR: 0x01000000 pc: 0x08000458 msp: 0x20005000
Info : Unable to match requested speed 8000 kHz,using 4000 kHz
target halted due to debug-request,current mode: Thread 
xPSR: 0x01000000 pc: 0x08000458 msp: 0x20005000
shutdown command invoked
Info : dropped 'gdb' connection
shutdown command invoked

编辑以添加更多信息: 我尝试使用调试选项调试代码。第一次,我看到微控制器正在“运行”代码,但总是卡在 IDE 生成错误处理程序代码上,这只是一个循环。 经过更多的调试,我发现由于某种原因,如果我将电路板的外部晶体用于 RTC,它会跳转到该子程序,所以我只是将其更改为使用内部 RC,因为我暂时不使用它。 然而,现在代码“运行”,从断点跳到断点,但它实际上并没有在微控制器上运行。为了更好地解释它,这是主循环:

  {
    /* USER CODE END WHILE */
      HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(GPIOC,GPIO_PIN_RESET);
      HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }

我在每次写入调用上都有一个断点,如果单击运行,则显示代码在无限循环中从写入跳转到写入。所以,理论上,它应该可以工作,但在微控制器中,输出引脚的状态不会改变。它始终保持开启状态,无论我让代码运行多少次。 这就像调试器在模拟微控制器,而不是在实际硬件上运行代码

我尝试使用 Arduino IDE,我什至可以用 STM 板制作 OLED 屏幕,所以我仍然对官方 IDE 不起作用感到困惑。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)