Stm32遭遇RDDI DAP错误解析与解决方案

起因

在一次烧录程序时,莫名奇妙出现这个错误,我还以为我板子烧了,在其他博客找一圈没找到解决办法,最后去咨询淘宝客服解决。

解决办法

将Boot0引脚跳线到3.3V,烧录一个正常的程序,然后再将Boot0跳线回来(Gnd)就可以正常下载程序了

原因

上次烧录的程序跑飞了,或者复用了烧录引脚,boot0眺到3.3是为了不运行上次烧录的代码。

原始代码是这样,如果Voltage[80]改成Voltage[100],就会出现程序跑飞的现象。

#include "stm32f4xx.h"
#include "Serial.h"
#include "Delay.h"
#include "AD7606.h"
int main(void)
{
	Serial_Init();
	AD7606Init();
	double Voltage[80]={0.0};
	while(1)
	{
		Serial_SendString("hello");
		Serial_SendString("\n");
		for(int i=0;i<80;i++){
			Serial_SendDouble(Voltage[i]);
			Serial_SendString("\n");
		}
		
	}
}

后面找了一下资料,发现可能是是栈内存溢出,因为局部变量存储在栈中,如果我们把Voltage[100]定义为全局变量,或者在使用的位置加上static关键字,变量会存储在全局数据区(SRAM 的静态区域),程序就可以正常运行了!

#include "stm32f4xx.h"
#include "Serial.h"
#include "Delay.h"
#include "AD7606.h"


double Voltage[100]={0.0};

int main(void)
{
	Serial_Init();
	AD7606Init();

    //static double Voltage[100]={0.0};
    //或者在使用时加上static
	while(1)
	{
		Serial_SendString("hello");
		Serial_SendString("\n");
		for(int i=0;i<100;i++){
			Serial_SendDouble(Voltage[i]);
			Serial_SendString("\n");
		}
		
	}
}


作者:不爱学习的阿力

物联沃分享整理
物联沃-IOTWORD物联网 » Stm32遭遇RDDI DAP错误解析与解决方案

发表回复