这个问题在入门STM32的时候也遇到过,刚开始也不知怎么回事,照着手册上的建立工程做好了之后,
编译,还是会提示有个错误
Test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
当时用关键字 SystemInit 搜了整篇文档,还是没找到
现在我也搞不清楚是什么原因,估计是MDK 4 下的启动文件和以前版本的不同,带来的问题,
所以说,软件不是越新就越好的,特别是对于初学者来说,有些问题还是没能力解决的。
解决方案一(个人推荐):
幸好了解过一点汇编,所以第一次遇到这个问题的时候,我就打开启动文件把相关的代码直接给注释了注释了也就完事了,直接和原代码兼容。见下图:
方案二:
我和想我和大部分人一样,都不喜欢看汇编代码,
所以,我就找到另一种方案,可以在任意一个.c 文件里做一个 SystemInit 函数,
(当然,考虑到模块化之类的,最好放在一个有意义的.c文件里)
然后把你的系统初始化函数如Stm32_Clock_Init等等都塞进去
但是我仿真的时候发现一个问题,那个delay_init函数不能塞到 SystemInit 函数里,
要不然仿真的时候那句 delay_ms(500) 会执行很久,多久我也不知道,原因不明, (原因见5楼)
看启动代码,不就是调用了SystemInit后就调用main了吗?有什么区别呢?希望有经验的人能帮我解答下。
这个问题也是我不推荐使用这个方案的原因。
附件里是工程文件。。。其实这么简单好像也没必要上传。。。
另外,刚刚我去对比了下例程代码里的启动文件和我的工程里面的启动文件的前面的说明:
这个是例程代码里面的软件生成的启动文件:
注意到没有版本信息。
;/*****************************************************************************/
;/* STM32F10x.s: Startup file for ST STM32F10x device series */
;/*****************************************************************************/
;/* <<< Use Configuration Wizard in Context Menu >>> */
;/*****************************************************************************/
;/* This file is part of the uVision/ARM development tools. */
;/* Copyright (c) 2005-2007 Keil Software. All rights reserved. */
;/* This software may only be used under the terms of a valid, current, */
;/* end user licence from KEIL for a compatible version of KEIL software */
;/* development tools. Nothing else gives you the right to use this software. */
;/*****************************************************************************/
这个是我的工程下软件自动生成的启动文件的说明:(V3.4.0)
;******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
;* File Name : startup_stm32f10x_md.s
;* Author : MCD Application Team
;* Version : V3.4.0
;* Date : 10/15/2010
;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM
;* toolchain.
;* This module performs:
;* - Set the initial SP
;* - Set the initial PC == Reset_Handler
;* - Set the vector table entries with the exceptions ISR address
;* - Configure the clock system
;* - Branches to __main in the C library (which eventually
;* calls main()).
;* After Reset the CortexM3 processor is in Thread mode,
;* priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>
;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;******************************************************************************* |