环境

  • IDE:Keil5 for ARM
  • 芯片:STM32F103C8T6

原因

多是由于使用的工程里面的芯片型号相关设置跟实际芯片不符。

解决:检查并修改以下几个设置。

需要检查并正确设置以下几个设置。

  • Option for Target - Device
    这个没什么好说的,改成自己芯片的型号即可。
  • Option for Target - C/C++ - 预编译宏定义
    本设置只有在使用了标准库函数开发时才需要,寄存器方式开发方式下不需要。这个设置会影响库函数的选择性编译,所以需要正确设置。(下图被选中的文字部分)

    这个设置跟Flash的容量有关,不清楚自己芯片flash大小的要去查一下数据手册(文末有官方下载地址)。flash大小跟宏定义的关系列表如下:
MCU型号FLASH大小
STM32F10X_LDSTM32F101xx
STM32F102xx
STM32F103xx
16 ~ 32 Kbytes
STM32F10X_MDSTM32F101xx
STM32F102xx
STM32F103xx
常见的比如
STM32F103C8T6(64K)
STM32F103CBT6(128K)
64 ~ 128 Kbytes
STM32F10X_HDSTM32F101xx
STM32F103xx
常见的比如
STM32F103RCT6(256K)
STM32F103ZET6(512K)
256 ~ 512 Kbytes
STM32F10X_CLSTM32F105xx
STM32F107xx
忽略

**其实主要看型号里面红色的这一位就知道flash大小了。
STM32F10xXXXX**

XFLASH大小
864K
B128K
C256K
D384K
E512K
  • Option for Target - Utilities
    最后还需要修改这里。

    点 Settings 打开 Cortex-M Target Driver Setup - Flash Download
    在你修改Device以后,这里的设置并不会自动改成正确的。需要你删掉原来的设置然后添加正确的设置。

上面3点修改完成后,重编译下载即可。

附录:STM32F10X系列官方数据手册下载地址

小容量STM32F101xx: http://www.st.com/stonline/products/literature/ds/15058.pdf
中容量STM32F101xx: http://www.st.com/stonline/products/literature/ds/13586.pdf
大容量STM32F101xx: http://www.st.com/stonline/products/literature/ds/14610.pdf
小容量STM32F102xx: http://www.st.com/stonline/products/literature/ds/15057.pdf
中容量STM32F102xx: http://www.st.com/stonline/products/literature/ds/15056.pdf
小容量STM32F103xx: http://www.st.com/stonline/products/literature/ds/15060.pdf
中容量STM32F103xx: http://www.st.com/stonline/products/literature/ds/13587.pdf
大容量STM32F103xx: http://www.st.com/stonline/products/literature/ds/14611.pdf
互联型STM32F105xx/STM32F107xx: http://www.st.com/stonline/products/literature/ds/15274.pdf

Last modification:December 14, 2020
If you think my article is useful to you, please feel free to appreciate