stm32使用MDK开发中的一些常见问题
2012-05-08 12:51
716 查看
1.
..\CMSIS\CM3\CoreSupport
..\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\STM32F10x_StdPeriph_Driver\inc
..\user\inc
是头文件路径问题,KEIL只要有一个头文件找不到,就会自已从本身的INC文件夹找头文件,结果就会出现以上错提示。把老版的头文件改为STM32F10X.H.
新的库已经把.CONF.MAP.TYPE都已经去掉整合到STM32F10X.H当中
本文出自 “人生得意须尽欢” 博客,请务必保留此出处http://no001.blog.51cto.com/1142339/857117
解决:keil报错invalid redeclaration of type name "s32"
答案:一般在Target Options C/C++选项卡里的Include Paths 里要添加几个固定的头文件路径,..\CMSIS\CM3\CoreSupport
..\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\STM32F10x_StdPeriph_Driver\inc
..\user\inc
是头文件路径问题,KEIL只要有一个头文件找不到,就会自已从本身的INC文件夹找头文件,结果就会出现以上错提示。把老版的头文件改为STM32F10X.H.
新的库已经把.CONF.MAP.TYPE都已经去掉整合到STM32F10X.H当中
工程中包含了老版本的头文件,包含stm32f10x_lib.h这个文件 ,将该头文件改为STM32F10X.H. 2.STM32_TEST.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 此问题错误提示已经十分清楚的告诉你错在哪里了,Undefined symbol SystemInit ,翻译过来就是:SystemInit 这个符号没有定义,随后的小括号告诉你了,是在startup_stm32f10x_md.o这个文件里面被提及的,这个.o文件在工程里面并没有,它是一个在编译的时候根据.c/.s文件生成的。所以我们只需要找到工程里面的.s或者.c即可,这里对应这个名字的就是startup_stm32f10x_md.s了。 在此文件里面可以找到SystemInit的所在: Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP 原来在复位中断服务函数里面,调用了SystemInit这个函数,而这个函数在.s文件里面没有定义。 所以解决的办法有两个。 1,在外部(其他任何.c文件里面)定义SystemInit这个函数,哪怕是个空函数也可以。 2,把 LDR R0, =SystemInit BLX R0 这两句话去掉。 (当使用Libraries里面的startup文件时,出现的问题。我采用的1解决办法,顺利解决问题) 3.。。HardFault_Handler的调试 最简单的办法: 在进入HardFault_Handler之后,根据堆栈指针查看堆栈,找到堆栈中最新的函数返回地址,到这个地址上去加断点,一步步根据汇编执行代码。很快就能找到出错原因,大多数是数组溢出,或者是指针初始化的问题。 出现此问题,肯定是堆栈溢出和数组越界。 (有时可能是因为。s启动文件,对stack和heap设置的太小,需要自己手动设置变大,就不会出现此问题。我就是将 原来的0x400和0x200增大到0x2000和0x2000) (今天经过高人指点,对于此问题又找到原因:潜入式库函数里的malloc,没有垃圾回收机制,因为我是裸奔,没有 系统支持,所以malloc对内存并没有明确的机制,也就是说,他分配的内存很可能是有问题的,造成溢出等。所以原来 。s文件默认的堆栈大小,都很小,很容易就溢出。 现在只需将malloc函数申请的内存,使用数组代替,即可。) 4.问题 "No Cortex-M Device found in JTAG chain"或“Emulator has been changed or re-enumerated!” 原因:烧录的程序关闭了JTAg功能,复用了JTAG的接口,导致JTAG不能正常使用。这事,就需要使用串口下载一个 程序,此程序没有关闭JTAG即可,然后就可以正常重新使用JTAG。 5.问题:void SystemInit(void)不能写函数,写在这里面的函数都不反应 原因: 6. 问题: 中断方式接收USART,进入中断出不来了 解决: 配置串口时,只写USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 不打开TXE,发送中断,即可。这样进入中断,判断FLAG,就不会出现错误。 |
相关文章推荐
- 使用Struts开发Web应用常见的一些问题汇总
- [Android开发常见问题-12] Android开发中debug.keystore如何使用。
- ArcGIS Engine 10开发环境的一些常见问题
- 一些主流IDE(VC6、VS2010、Code::Blocks、Eclipse)使用过程中常见问题集锦
- 怎么解决STM32(MDK)中不能使用printf()函数的问题
- Mac系统开发常见问题-80端口被占用的解决方案1-使用pfctl做网络层转发
- (转载)使用ActiveX控件开发网页常见的问题
- 在wpf开发中,使用prism的一些问题解决
- 使用Maven开发Android的常见问题
- 安卓开发中碰到的一些常见问题
- 转:在决定使用ClickOnce发布你的软件前,应该知道的一些事情(一些常见问题解决方法)
- 使用RealViewMDK时常见的问题(2)
- iOS开发那些事-Git在Xcode中的配置与使用常见问题总结 推荐
- Android开发常见错误(5):使用Monkey自动化压力测试过程中遇到的问题
- 使用ActiveX控件开发网页常见的问题
- java实际开发中泛型使用需要注意的一些问题
- 使用vs2003进行web开发的时候碰到的一些小问题
- Android开发中使用照相机功能 及其常见问题解法方法
- 使用C++封装库在MDK上建STM32开发工程
- ArcGIS Engine 10开发环境的一些常见问题