环境
- IDE:Keil5 for ARM
- 芯片:STM32F103C8T6
原因
多是由于使用的工程里面的芯片型号相关设置跟实际芯片不符。
解决:检查并修改以下几个设置。
需要检查并正确设置以下几个设置。
- Option for Target - Device
这个没什么好说的,改成自己芯片的型号即可。 - Option for Target - C/C++ - 预编译宏定义
本设置只有在使用了标准库函数开发时才需要,寄存器方式开发方式下不需要。这个设置会影响库函数的选择性编译,所以需要正确设置。(下图被选中的文字部分)
这个设置跟Flash的容量有关,不清楚自己芯片flash大小的要去查一下数据手册(文末有官方下载地址)。flash大小跟宏定义的关系列表如下:
宏 | MCU型号 | FLASH大小 |
---|---|---|
STM32F10X_LD | STM32F101xx STM32F102xx STM32F103xx | 16 ~ 32 Kbytes |
STM32F10X_MD | STM32F101xx STM32F102xx STM32F103xx 常见的比如 STM32F103C8T6(64K) STM32F103CBT6(128K) | 64 ~ 128 Kbytes |
STM32F10X_HD | STM32F101xx STM32F103xx 常见的比如 STM32F103RCT6(256K) STM32F103ZET6(512K) | 256 ~ 512 Kbytes |
STM32F10X_CL | STM32F105xx STM32F107xx | 忽略 |
**其实主要看型号里面红色的这一位就知道flash大小了。
STM32F10xXXXX**
X | FLASH大小 |
---|---|
8 | 64K |
B | 128K |
C | 256K |
D | 384K |
E | 512K |
- 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