STM32F429入门(四):新建工程--寄存器版

本文档详细记录了在Keil5环境下新建STM32工程的过程,包括选择芯片型号、添加源文件及头文件。在配置过程中遇到了SystemInit函数未定义的错误,尝试了升级Keil、修改配置文件以及在main文件中定义空的SystemInit函数等方法,但问题仍未解决。最后,通过在C/C++选项卡的Include Paths中添加CMSIS库路径解决了问题。同时,还介绍了如何设置编译输出文件的位置。
摘要由CSDN通过智能技术生成

(一)新建一个文件夹,打开keil5--Project--New uVision project。

给自己的工程起个名字:

 保存后,选择芯片型号:

 弹出来的框的意思是,询问你是否要用keil自带的库软件,我们是不需要使用的,直接关闭:

 之后回到刚刚新建的文件夹中,新建文档,作为你的编程文件,需要一个主函数文件,以及一个后缀为.h的存放寄存器映射文件:

找到固件库STM32F4xx_DSP_StdPeriph_Lib_V1.8.0,找到Libraries,打开CMSIS,点击Device-ST-STM32F4XX-Source-Templates-arm找到下面文件:

这个文件就是芯片的底层,它是使用汇编语言编写,将这份源码复制在我们的文件中。

打开刚刚新建的工程,快速双击Source Group 1,将三个文件文件添加进工程中:

 嗯...然后就出现了一个好像大家都挺常见的问题:

.\Objects\led.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f429_439xx.o).

 这确实让一个刚入门的小白挠了挠头脑...那小白就去网上找了一些资料,最后找到了解决方法,这个错误可以通过升级keil解决,听说升级到5.17就可以解决了,这个问题是由keil的一个功能叫动态语法检查引起的,报错是keil本身的问题。解决方法是,找到keil安装目录下的UV4文件夹,搜索找到文件中的UVCC.ini文件,用记事本打开,将报错的那个头文件添加到文件内,保存后就可以了

 

 嗯...最后发现其实本质不是这个问题,而是这个问题:

 

然后我把这个头文件按照以上方法加进去UV4的那个文件中,发现也没有起作用T T。

然后我就找到了新的解决方法是点击魔法棒,C/C++选项卡,Include Paths,加入以下路径:D:\keil4\ARM\Pack\ARM\CMSIS\4.5.0\CMSIS\Include

 

然后问题...还没有解决T T,啊这...

.\Objects\led.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f429_439xx.o).

这次是这个新的问题,于是我就找到了问题所在,原因是这样的:STM32上电后首先执行启动文件startup_stm32f429_439xx.s,它里边使用汇编语言写好了基本程序,当STM32 芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起 C 语言的运行环境。

上电复位后先执行Reset_Handler ,里面相继调用了SystemInit函数、main函数。

错误提示 SystemInit 没有定义。从分析启动文件时知道, Reset_Handler 调用了该函数用来初始化 SMT32 系统时钟,为了简单起见,我们在 main 文件里面定义一个SystemInit 空函数,什么也不做,为的是骗过编译器,把这个错误去掉。这时再编译就没有错了。

还有一个方法就是在启动文件中把有关SystemInit 的代码注释掉也可以,不调用SystemInit 函数,直接调用main函数。

补的空函数如下:

void SystemInit(void) { }

这个启动函数可以在这里找到:

 

这个SystemInit系统函数是为了给STM32设置180M的系统时钟用的。

最后设置一下每次编译所产生的文件,我们可以定义一个文件夹专门放这类文件:

 点击魔术棒,选择该文件:

 将Lisiting也定义到一个新的文件夹,步骤如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑烯烃快去学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值