stm32学习开发debug记录(1)

本系列记录开发stm32过程中遇到的一系列bug,可作为日后debug时的参考,也可为同刚起步学习stm32的小白作为debug参照。

安装

(1)安装keil最新版本可参照https://www.cnblogs.com/armfly/p/12564643.html,网页中附有keil最新版本安装包和各种stm32开发所需的支持包。

注意!用购买的开发板测试时,采用过高版本的keil可能发生固件无法更新的情况,提示: The up-to-date firmware is too big for this board (4960 bytes in excess). Can't update.
解决方案:使用较低版本的keil开发(我用5.2.3可行)
或参考暴力升级你的 ST-Link 及 STM32CubeIDE.

(2)安装环境配置:
keil5开始无需在*·option->c/c++->Preprocessor Symbels->Define*中添加“STM32F10X_HD”,否则编译会报错。
Debug中选择use->ST-Link Debugger,Debug和utility的setting中都要选择Flash Download->Reset and Run.并添加选择合适的闪存,否则会报错Error: Flash Download failed - "Cortex-M3"

新建开发文件

(1)Project->New uVersion Project。选择对应型号的stm32开发芯片(或其它芯片。视需要加入支持包),必选CMSIS->Core以及Device->Startup,其他外设根据提示选择

(2)新建头文件(.h),储存在非USER文件夹下时,要在设置中的C/C++选项中添加文件夹路径,否则keil可能会找不到而报错。新建的源文件(.c)必须导入工程中,否则使用时报错。
头文件一般都需要#include "stm32f10x.h",方可支持STM32库。

开发过程中的常见错误

(1)XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
出现原因:未在xxxx.o对应的.c文件中引入变量xxx对应的头文件,或引入的头文件系统未找到路径
解决方法:检查头文件,在C/C++中添加路径

(2)warning: #223-D: function "xxx" declared implicitly
出现原因:全局变量未在使用的.c文件中声明或"xxx"对应的头文件未包含(系统认为这是一个函数声明但代码中未声明函数的变量类型,即声明不完全)。
解决方法:声明对应的函数或变量,检查"xxx"对应头文件是否包含。

(3)warning: At end of source: #12-D: parsing restarts here after previous syntax error
出现原因:(暂不清楚原理,可能是外设重复打开)
解决方法::在C/C++选项卡里,把STM3210X_HD从prepocessor symbol define 里面删掉

(4)cannot open source input file "xxx.h": No such file or directory
出现原因:系统找不到头文件
解决办法:在C/C++中添加路径

(5)error in include chain(cmsis_armcc.h):expected identifier or '('
出现原因:系统找不到头文件
解决方法:检查头文件包含(对#include "stm32f10x.h"的报错可忽略,编译会正常运行)

(6)"IRQn" has already been declared in the current scope
出现原因:中断函数名出错或函数过定义,或头文件未正确包含(中断函数不要放在中断向量的同一个文件下!)
解决方法:检查所有中断函数名和头文件

(7)(error: #29: expected an expression)
出现原因:一般是代码语法有误(漏标点漏括号等……),但也可能是所用语句不兼容c90/c99(暂不清楚其区别和原理)
解决方法:在C/C++选项卡下勾选c99选项。

猜你喜欢

转载自blog.csdn.net/Borton__/article/details/106892856
今日推荐