stm32使用MDK开发中的一些常见问题

2019-06-13来源: eefocus关键字:stm32  MDK开发  常见问题

1. 解决:keil报错invalid redeclaration of type name "s32"

答案:一般在Target Options C/C++选项卡里的Include Paths 里要添加几个固定的头文件路径,


..CMSISCM3CoreSupport

..CMSISCM3DeviceSupportSTSTM32F10x

..STM32F10x_StdPeriph_Driverinc

..userinc


 


是头文件路径问题,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,就不会出现错误。


关键字:stm32  MDK开发  常见问题

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic464501.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:使用STM32控制无源蜂鸣器发声播放音乐(STM32_07)
下一篇:关于STM32的CPU的使用率~裸机不带系统

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32用USART发送字符串,以USART_FLAG_TXE和USART_FLAG_TC怎么用

一:STM32用USART发送字符串void UART_Send_Message(u8 *Data){  while(*Data!='')  {      USART_SendData(USART1, *Data);      while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//读取串口状态      Data++;  }} void main(void){ u8 str_buf[500]; memset
发表于 2019-09-21
STM32用USART发送字符串,以USART_FLAG_TXE和USART_FLAG_TC怎么用

基于stm32f103zet6的DS1302学习

由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧!1、所谓的DS1302这里面也指明了简单的SPI协议然后就直接上代码了,注释很详细的!基本实现单行注释1、主函数main#include "stm32f10x.h"      #include "SysTick.h"  #include "Delay.h"  
发表于 2019-09-21
基于stm32f103zet6的DS1302学习

STM32的FSMC详解

STM32的FSMC真是一个万能的总线控制器,不仅可以控制SRAM,NOR FLASH,NAND FLASH,PC Card,还能控制LCD,TFT.一般越是复杂的东西,理解起来就很困难,但是使用上却很方便,如USB.不过FSMC也有很诡异的地方.如*(volatile uint16_t *)0x60400000=0x0;  // 实际地址A21=1,而非A22.[注:0x60400000=0x60000000|(1UL<<22) ]*(volatile uint16_t *)0x60800000=0x0; // 实际地址A22=1,而非A23  [注:0x60800000
发表于 2019-09-21
STM32的FSMC详解

IAR建立stm32工程

版本1:stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程:1、在常用的文件夹下新建立一个文件夹,根据个人喜好,分别建立如下几个文件夹,用于分别存放固件库中的文件和用户自己的文件2、将固件库E:STM32stm32固件库3.5STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartupiar目录下的汇编文件复制到刚刚建好的模板目录下F:STM32-IARdemoCMSISStartup3、将固件库E
发表于 2019-09-21
IAR建立stm32工程

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved