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");
}
}
}
作者:不爱学习的阿力