【问题标题】:Unable to program STM32 using ST Link utility: programming error @: 0x00000001无法使用 ST Link 实用程序对 STM32 进行编程:编程错误@:0x00000001
【发布时间】:2017-03-23 12:16:56
【问题描述】:

我一直在努力掌握 STM32 编程。我有一个 Nornir 开发的 Dash7/传感器板(绝对没有文档存在……),它有一个 STM32L100RBT6 MCU。所以我想为这个开发板编写自己的软件。

到目前为止,我已经成功地制作了一个项目并构建了固件。此时,我正在尝试使用官方 ST-link v2 编程器结合 ST-Link 实用软件(在 Windows 10 下)将 .hex 文件闪存到 MCU 上。我正在使用板上的 JTAG 接口。

在 ST-link 实用程序中,我可以连接到电路板并读出它。我已经擦除了芯片,我只读取了内存中的零,对于两个内存页面(0x00000000 和 0x08000000)。

当我尝试Target > Program 时,在选择我的 .hex 文件并点击开始后,控制台告诉我:

16:54:48 : Connected via JTAG.
16:54:48 : Connection mode : Normal.
16:54:48 : Debug in Low Power mode enabled.
16:54:49 : Device ID:0x416 
16:54:49 : Device flash Size : 128KBytes
16:54:49 : Device family :STM32L100x8/L15xx8
16:54:52 : Memory programmed in 0s and 250ms.

但是当我读出内存时,它没有被编程。它只在两个页面上显示零(0x00000000 和 0x08000000)。

当我选择Target > Program & Verify 时,我收到一条错误消息“编程错误@:0x00000001”和以下控制台输出:

16:55:39 : Connected via JTAG.
16:55:39 : Connection mode : Normal.
16:55:39 : Debug in Low Power mode enabled.
16:55:39 : Device ID:0x416 
16:55:39 : Device flash Size : 128KBytes
16:55:39 : Device family :STM32L100x8/L15xx8
16:56:16 : No OnChip verification function found. Verify after programming will be performed.
16:56:17 : Programming error @: 0x00000001

我的内存链接脚本(mem.ld)如下:

MEMORY
{
  FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
  RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 10K

  /*
   * Optional sections; define the origin and length to match
   * the the specific requirements of your hardware. The zero
   * length prevents inadvertent allocation.
   */
  CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 0
  FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
  EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0
  EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
  EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0
  EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0
}

我被困在这一点上,到目前为止还找不到任何资源将我指向正确的方向。有什么想法吗?

【问题讨论】:

  • STM32的Flash起始地址是0x08000000,如果错误在0x00000001,则可能是你想把你的程序刷到错误的地方。 ST-Link Utility 中有一个Address: 字段,请告诉我其中可见的地址是什么?
  • 看看你的.hex文件的前两行,它应该看起来像:020000040800F2 000000FC3F0120A50A0008C90D0008950C000856
  • 添加内存链接器脚本会很有帮助。
  • 前两行是:1000000000280020...和:10001000D9010000...,所以我猜它没有正确链接
  • 在将 mem.ld 地址固定为 0x08000000 并更改为正确的 gcc-arm-none-eabi 编译器 (oeps) 后,十六进制文件现在看起来正确::020000040800F2 :10000000002800205901000861010008650100086E,但 ST-link 实用程序中的错误仍然存​​在

标签: stm32


【解决方案1】:

ST Link 实用程序缓存您使用的文件。它没有在任何地方记录,但它确实这样做了。如果你想 100% 确定你已经编写了最新的二进制/十六进制文件,请更改文件的名称(从以前的版本开始)并再次编程

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 2019-04-17
    • 2021-06-27
    • 2020-03-23
    • 2022-08-16
    • 1970-01-01
    • 2016-09-11
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多