赞
踩
(一)新建一个文件夹,打开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也定义到一个新的文件夹,步骤如上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。