stm32在自己建的工程不能跑在例程的工程内能跑怎么回事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32在自己建的工程不能跑在例程的工程内能跑怎么回事相关的知识,希望对你有一定的参考价值。
Stm32不能跑了,程序跑飞这类的问题,我之前在开发过程中就遇到过,造成这种不良,有很多可能的原因,软件硬件都有可能,需要从几个方面去排查硬件方面:
1. stm32的供电电压是否稳定,是否在正常工作电压范围内。电源文波大小一定要小,一般Ldo供电在3.3v在几个ma ,在stm32的vdda 和vssa引脚一定要接磁珠,各个电源硬件要接滤波电容
2 .晶振以及旁路电容,一定要尽可能的靠近单片机,整个电路中是否有裸露的接口如usb io 口 这类的接口,因为冬天人体或者其他物体静电很大,当瞬间大静电通过接触,传导给单片机时,很容易引起单片机复位或者死机,所以有这样的接口需要做防静电电路,或者专用防静电芯片在保护单片机不死机。
3.单片机复位电路,一定在设计的时候需要加旁路电容,同时需要保证复位电路电源稳定,这个与第一点原因说明一样。
4.无线射频信号,当电路中有无线类如蓝牙wifi gsm等无线射频信号时,也很容易因为无线辐射干扰造成单片机死机,这个就需要找专业测试天线的公司或者设备或者人员去测试辐射状态。无线射频的电线一定要匹配好,否则很容易会有无法预测的不良状态出现。 参考技术A uVision MDK不能全速运行,一运行就停止了,原因在于Option->Target->Code Generation->Use MicroLIB 复选框没有打钩,一般来说,针对一运行就停止的情况,将Use MicroLIB勾选之后,重新编译,运行就可以通过了。
二、仿真调试时没有问题,但通过JLink调试时出现如下提示:
"Flash Download Failed-"Cortex-M3" ,则可能的原因是:Option->Debug->Use Driver for Flash Programming->Setting->Flash Download->Programming Algotithm 或 Option->Utilities->Use Driver for Flash Programming->Setting->Flash Download->Programming Algotithm没有添加相应类型的芯片FLASH说明,一般在这两个选项卡中分别点击ADD,添加STM32F10x High-density Flash 即可。
三、调试时,程序总是停止在LDR R0, =SystemInit 语句,原因如下:堆栈空间默认的太小
默认startup_stm32f10x_hd.s中 Stack_Size EQU 0x00000400,如果改大之后,可能调试就可以正常运行。
四、调试时,程序停止在HardFault_Handler的问题(引用网上的总结)
最近调试UCGUI和UCOSII,程序莫名其妙的死掉了,用JLINK调试,发现进入了HardFault_Handler,主要原因有两个,堆栈溢出和数组越界,很不幸的是这两种情况都被我碰到了。
第一次是用UCGUI在一个button上显示文字,发现字符串显示不全,只显示第一个字符,在启动文件
startup_stm32f10x_md.s中修改“Stack_Size EQU 0x00000200”,将堆栈改大点,改为
“Stack_Size EQU 0x00000400”后显示正常。第二次是UCGUI和UCOSII联合调试时,也进入了HardFault_Handler,这次原因是数组越界,在一个函数中
定义了一个数组ya[10],定义了一个计数变量count,由于没有初始化count,导致count的值一开始就大于数
组边界,导致数组越界,初始化count=0后,程序正常。
我在调试的过程中,定义了两个结构体的指针变量,然后对这两个指针变量赋值,在执行第一个赋值语句的时候,程序停止在HardFault_Handler,最后的解决办法是将结构体的指针变量改为普通变量,赋值过程不再出现意外。 参考技术B 下面可能造成这种结果的几种情况:
(1)跳线帽是否连接正常
(2)flymcu是否设置正确
(3)芯片的驱动是否已装成功
(4)芯片类型是否选择正确
(5)串口是否正常
(6)下载时波特率是否合理(小编选择的波特率是19200。 参考技术C 下面可能造成这种结果的几种情况:
(1)跳线帽是否连接正常
(2)flymcu是否设置正确
(3)芯片的驱动是否已装成功
(4)芯片类型是否选择正确
(5)串口是否正常
(6)下载时波特率是否合理(小编选择的波特率是19200。 参考技术D 原因是stm32程序不能正常跑起来,检查相关程序即可。
刚装的keil4,按照教程建立了project,编程为啥出现Target not created?
装的是野火stm32初始project,利用STM32的官方库来构建自己的工程模板。程序都是厂家给的,应该不会错,我是按照教程一步步做的,操作应该也不会错。到底是什么原因呢?有没有利用STM32的官方库来构建自己的工程模板的啊?
参考技术A 程序出现语法等错误,当然就不能创建 Target;还是检查程序,看看是没地方错的,出现的什么错误信息提示追问
装的是野火stm32初始project,利用STM32的官方库来构建自己的工程模板。程序都是厂家给的,应该不会错,我是按照教程一步步做的,操作应该也不会错。
参考技术B 没有生成.hex文件,或者你写的程序有错误! 参考技术C 你看看你的工程文件命名是不是有空格,重新建立一个命名没有空格的工程,再试一下。 参考技术D 求粘贴图片或者多点信息,仅这么多信息,无法准确判断你是哪里出错了追问装的是野火stm32初始project,利用STM32的官方库来构建自己的工程模板。程序都是厂家给的,应该不会错,我是按照教程一步步做的,操作应该也不会错。
追答确定你的keil版本是for c51的还是for arm的
目标未创建,看看是不是你的HEX文件无法创建
看看程序是否有问题
随便创建一个工程随便写个简单程序,试试可行否?判断一下是否是软件本身破解的问题。
你先试试看吧
以上是关于stm32在自己建的工程不能跑在例程的工程内能跑怎么回事的主要内容,如果未能解决你的问题,请参考以下文章
最近刚入门stm32 我按原子教你玩stm32 用keil mdk5 直接用它给的文件创建工程,一直出错