OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5121|回复: 9

软件仿真函数出现死循环

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
发表于 2013-10-20 12:56:52 | 显示全部楼层 |阅读模式
软件仿真程序老是死在一些函数,包过delay,和ad的数据处理的函数里面,现在急切的想知道为什么,求解释

ADC.zip

7.43 MB, 下载次数: 88

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-10-20 13:50:14 | 显示全部楼层
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
 楼主| 发表于 2013-10-20 15:20:07 | 显示全部楼层

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "dma.h"
#include"adc.h"
#include"tim.h"
#include"lcd.h"
#include"key.h"
static uint32_t ADC_Value[250];
uint32_t ADC12_Value[2];
uint16_t ADC1_avr,ADC2_avr;
u8 temp=0;
void ADC_Result(void)
{
 u16 i;
 //while(!DMA_GetFlagStatus(DMA1_FLAG_TC1)); //DMA传输完成标志
 for(i=0;i<20;i++)
 {
  ADC12_Value[0]+=(ADC_Value&0x00000fff);
  ADC12_Value[1]+=((ADC_Value&0xffff0000)/65536); 
 }
 ADC1_avr=ADC12_Value[0]/i;
 ADC2_avr=ADC12_Value[1]/i;
 ADC12_Value[0]=0;//必须要把求和的值清零
 ADC12_Value[1]=0;
 //DMA_ClearFlag(DMA1_FLAG_TC1);
    
}
void Lcddisplay(void)
{
 float  ADC1_Result1, ADC2_Result2;
 u8 s[10],s1[10];
 LCD_Clear(WHITE);
 OINT_COLOR=RED; 
 ADC1_Result1=(float)ADC1_avr/4096*3.3;
 ADC2_Result2=(float)ADC2_avr/4096*3.3;
 sprintf((char*)s, "%.4f", ADC1_Result1);//浮点数转字符串
 sprintf((char*)s1, "%.4f", ADC2_Result2);
 LCD_ShowString(30,50,"ADC1_Result1:");
 LCD_ShowString(130,50,s);
 LCD_ShowString(30,70,"ADC2_Result2:");
 LCD_ShowString(130,70,s1);
 
}
void chongdian(void)  //充电函数
{
 u8 k = 0; //注意数据类型
 if(temp==0)
 {
  temp=1;
  LED0=!LED0;
  for(k=1;k<=10;k++)
  {
   WM_zbi =719 + k*72;   //50ms后压到了大约1.4A
   delay_ms(5); 
  }

  for(k=1;k<=80;k++)
  {
   WM_zbi = 1439 + 72*k;
   delay_ms(5);
   if(k==80)
   {
    WM_zbi = 7199;
    delay_ms(50);  //必须要加的延时,否则电压检测不准确
   } 
  }
 }

int main(void)
{
 //static u8 flage1,flage2;
   
 SystemInit();
 delay_init(72); 
 uart_init(9600); //少了程序死在里面 
 LED_Init();
 LCD_Init();
 Key_Init(); 
 TIM3_Init(0,7199,7199);
 ADC1_GPIO_Config();
 ADC1_Config((u32)&ADC1->DR,(u32)ADC_Value,20);  
 while(1)
 {
   if(KEY0==0)
   {
    delay_us(100);
    if(KEY0==0)
    break;
   } 
 }

 delay_ms(10);
 C0=0; 
 while(1)
 {
  chongdian();
  ADC_Result();  
  Lcddisplay();  
  if(ADC1_avr>=1840)
  {
   //flage1=1;   
   //flage2=0;
   WM_zbi=7199;
    
  }      
 }
}

这是main程序,但是下载到程序以后硬件是可以跑的

回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
 楼主| 发表于 2013-10-20 15:21:42 | 显示全部楼层
回复【2楼】xiaoyan:
贴了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-20 17:07:55 | 显示全部楼层
我测试了下,不知道你设置了什么东西,你的运行仿真所有数据貌似都在更新,导致延时就非常的漫长...
延时10ms,我等了半天都没跑完....
所以,不是死机,是你的仿真速度太慢了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
 楼主| 发表于 2013-10-21 18:21:00 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
我没有设置什么东西,不知道为什么会出现这样的事情,感觉问题出现的很奇怪。
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
 楼主| 发表于 2013-10-23 09:43:44 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-23 10:43:38 | 显示全部楼层
回复【6楼】ctp2013:
---------------------------------
这我就不清楚了,你重新建工程试试吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
 楼主| 发表于 2013-10-23 12:08:59 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
我今天最后发现,我用的是双ADC同步规则模式,但是那个问题出现的原因是
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;
就是不能够连续的装换,如果改成DISABLE就可以了,这是为什么呢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-23 14:05:07 | 显示全部楼层
死在连续转换里面吧?是ADC配置的问题了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-10 11:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表