OpenEdv-开源电子网

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

STM32 Mini板的变量被修改,出现502的值,求大神指教

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-7-20
在线时间
5 小时
发表于 2018-7-20 08:34:34 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 panda哥 于 2018-7-20 08:37 编辑

这个是我用来做超声波测距的程序
#include "timer.h"
#include "led.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////  
//±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾­×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ;
//Mini STM32¿ª·¢°å
//ͨÓö¨Ê±Æ÷ Çý¶¯´úÂë      
//ÕýµãÔ­×Ó@ALIENTEK
//¼¼ÊõÂÛ̳:www.openedv.com
//ÐÞ¸ÄÈÕÆÚ:2010/12/03
//°æ±¾£ºV1.0
//°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£
//Copyright(C) ÕýµãÔ­×Ó 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////   

//ͨÓö¨Ê±Æ÷Öжϳõʼ»¯
//ÕâÀïʱÖÓÑ¡ÔñΪAPB1µÄ2±¶£¬¶øAPB1Ϊ36M
//arr£º×Ô¶¯ÖØ×°Öµ¡£
//psc£ºÊ±ÖÓÔ¤·ÖƵÊý
//ÕâÀïʹÓõÄÊǶ¨Ê±Æ÷3!
u16 msCount = 0;//ms¼ÆÊý
void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//Éú³ÉÓÃÓÚ¶¨Ê±Æ÷ÉèÖõĽṹÌå
   NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ʱÖÓʹÄÜ
  TIM_DeInit(TIM3);//ÅäÖö¨Ê±Æ÷»ù´¡½á¹¹Ìå
TIM_TimeBaseStructure.TIM_Period = arr; //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ  ¼ÆÊýµ½4000Ϊ1ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓÆµÂʳýÊýµÄÔ¤·ÖƵֵ  4MhzµÄ¼ÆÊýƵÂÊ  
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòÉϼÆÊýģʽ
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾ÝTIM_TimeBaseInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»

TIM_ClearFlag(TIM3, TIM_FLAG_Update); //Çå³ý¸üÐÂÖжϣ¬±ÜÃâÒ»´ò¿ªÖжÏÁ¢¼´²úÉúÖжÏ
TIM_ITConfig(  //ʹÄÜ»òÕßʧÄÜÖ¸¶¨µÄTIMÖжÏ
       TIM3, //TIM3
       TIM_IT_Update ,
       ENABLE  //ʹÄÜ
       );
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3ÖжÏ
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //ÏÈÕ¼ÓÅÏȼ¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //´ÓÓÅÏȼ¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀ±»Ê¹ÄÜ
NVIC_Init(&NVIC_InitStructure);  //¸ù¾ÝNVIC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèNVIC¼Ä´æÆ÷
TIM_Cmd(TIM3, DISABLE);  //ʹÄÜTIMxÍâÉè
        
}
void TIM3_IRQHandler(void)   //TIM3ÖжÏ
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì²éÖ¸¶¨µÄTIMÖжϷ¢ÉúÓë·ñ:TIM ÖжÏÔ´
  {
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //Çå³ýTIMxµÄÖжϴý´¦Àíλ:TIM ÖжÏÔ´
   msCount++;
  }
}

u32   measure(void)
{
  u32 t=0,b=0;
TIM_SetCounter(TIM3,0);//Çå³ý¼ÆÊý
msCount = 0;
TIM_Cmd(TIM3, ENABLE);  //ʹÄÜTIMxÍâÉè
LED0=1; //·¢Éä40KHz·½²¨
delay_us(200);  
LED0=0;
delay_us(300);     //µÈ´ýÓàÕðÏûʧ
while(INPUT==0);
TIM_Cmd(TIM3, DISABLE);  //ʹÄÜTIMxÍâÉè
t = msCount*100000;//MS»»Ëã
b = TIM_GetCounter(TIM3)/4*100;//΢Ãë¼¶³ËÒÔ100±¶
t = t+b+(TIM_GetCounter(TIM3)%4*25);//µÃµ½US
TIM_SetCounter(TIM3,0);//Çå³ý¼ÆÊý
delay_ms(10);
return t;
}

#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////  
//±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾­×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ;
//ALIENTEK Mini STM32¿ª·¢°å
//ͨÓö¨Ê±Æ÷ Çý¶¯´úÂë      
//ÕýµãÔ­×Ó@ALIENTEK
//¼¼ÊõÂÛ̳:www.openedv.com
//ÐÞ¸ÄÈÕÆÚ:2010/12/03
//°æ±¾£ºV1.0
//°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£
//Copyright(C) ÕýµãÔ­×Ó 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////   
void TIM3_Int_Init(u16 arr,u16 psc);
u32  measure(void);
#endif

#include "LED.h"
#include "delay.h"
#include "sys.h"
#include "timer.h"
#include "lcd.h"
#include "usart.h"
//ALIENTEK Mini STM32¿ª·¢°å·¶Àý´úÂë7
//¶¨Ê±Æ÷ÖжÏʵÑé   
//¼¼ÊõÖ§³Ö£ºwww.openedv.com
//¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾
int main(void)
{
   u32 max,sum=0,V=0;
   u32 i,Time1,V1;
    u32  a[10]={0,0,0,0,0,0,0,0,0,0};
   u8 k,j;
  int Time=0;   //¶¨Òå·µ»ØÊ±¼äΪ¸¡µãÐÍ
  delay_init();       //ÑÓʱº¯Êý³õʼ»¯
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// ÉèÖÃÖжÏÓÅÏȼ¶·Ö×é2
  uart_init(9600);   //´®¿Ú³õʼ»¯Îª9600
  LED_Init();     //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  LCD_Init();       //³õʼ»¯ÓëLCDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  LCD_Clear(WHITE); //°×É«±³¹â
  TIM3_Int_Init(3999,18-1);//4MHz  4000Ϊ1ms
  POINT_COLOR=RED;  //×ÖÌåÑÕÉ«ÉèÖÃΪºìÉ«
  LCD_ShowString(30,70,200,24,24, "Time:     .    us");
  LCD_ShowString(30,100,200,24,24,"V=       .    m/s");
  LCD_ShowString(100,130,200,16,16,"2018/7/19");
  while(1)
  {   
    for(i=0;i<10;i++)
    {
     a=measure();
    }
// &Atilde;°&Aring;&Yacute;&Aring;&Aring;&ETH;ò
     for(k=0;k<10;k++)
    {
     for(j=k+1;j<10;j++)
     {
       if(a[k]>a[j])
       {
        max=a[k];
        a[k]=a[j];
        a[j]=max;
       }
     }     
     }
//  &Egrave;&iexcl;&AElig;&frac12;&frac34;ù&Ouml;&micro;
     sum=0;
     for(k=2;k<8;k++)
     {
     sum+=a[k];
     }
       Time=sum/6;
    V=1490000/Time;
     Time=0;
    V1=V/100;
        LCD_ShowxNum(90,100,V1,4,24,0);
        V=V-V1;
        LCD_ShowxNum(150,100,V,1,24,0);     
        Time1=Time/100;
        LCD_ShowxNum(100,70,Time1,4,24,0);
        Time=Time-Time1;
        LCD_ShowxNum(160,70,Time,2,24,0);
      delay_ms(10);
   }  
}

void LED_Init(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //&Ecirc;&sup1;&Auml;&UumlA&para;&Euml;&iquest;&Uacute;&Ecirc;±&Ouml;&Oacute;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;     //LED0-->A.8 &para;&Euml;&iquest;&Uacute;&Aring;&auml;&Ouml;&Atilde;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //&Iacute;&AElig;&Iacute;ì&Ecirc;&auml;&sup3;&ouml;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO&iquest;&Uacute;&Euml;&Ugrave;&para;&Egrave;&Icirc;&ordf;50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);      //&cedil;ù&frac34;&Yacute;&Eacute;è&para;¨&sup2;&Icirc;&Ecirc;&yacute;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;GPIOA.8
GPIO_ResetBits(GPIOA,GPIO_Pin_8);       //PA.8 &Ecirc;&auml;&sup3;&ouml;&micro;&Iacute;

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;     
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//&cedil;&iexcl;&iquest;&Otilde;&Ecirc;&auml;&Egrave;&euml;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO&iquest;&Uacute;&Euml;&Ugrave;&para;&Egrave;&Icirc;&ordf;50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);  //&cedil;&iexcl;&iquest;&Otilde;&Ecirc;&auml;&Egrave;&euml;&pound;&not;IO&iquest;&Uacute;&Euml;&Ugrave;&para;&Egrave;&Icirc;&ordf;50hz
}



最佳答案

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-7-20 08:34:35 | 显示全部楼层
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-7-20
在线时间
5 小时
 楼主| 发表于 2018-7-20 08:35:34 | 显示全部楼层
这是我拿定时器的例程直接改的,但是Time的值无缘无故被修改
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-7-20
在线时间
5 小时
 楼主| 发表于 2018-7-20 08:52:30 | 显示全部楼层
&nbsp;&nbsp;while(1)
&nbsp;&nbsp;{&nbsp; &nbsp;
&nbsp; &nbsp; for(i=0;i<10;i++)
&nbsp; &nbsp; {
&nbsp; &nbsp;&nbsp;&nbsp;a=measure();
&nbsp; &nbsp; }
// &Atilde;°&Aring;&Yacute;&Aring;&Aring;&ETH;ò
&nbsp; &nbsp;&nbsp;&nbsp;for(k=0;k<10;k++)
&nbsp; &nbsp; {
&nbsp; &nbsp;&nbsp;&nbsp;for(j=k+1;j<10;j++)
&nbsp; &nbsp;&nbsp;&nbsp;{
&nbsp; &nbsp;&nbsp; &nbsp; if(a[k]>a[j])
&nbsp; &nbsp;&nbsp; &nbsp; {
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;max=a[k];
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;a[k]=a[j];
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;a[j]=max;
&nbsp; &nbsp;&nbsp; &nbsp; }
&nbsp; &nbsp;&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp; &nbsp;&nbsp;&nbsp;}
//&nbsp;&nbsp;&Egrave;&iexcl;&AElig;&frac12;&frac34;ù&Ouml;&micro;
&nbsp; &nbsp;&nbsp;&nbsp;sum=0;
&nbsp; &nbsp;&nbsp;&nbsp;for(k=2;k<8;k++)
&nbsp; &nbsp;&nbsp;&nbsp;{
&nbsp; &nbsp;&nbsp;&nbsp;sum+=a[k];
&nbsp; &nbsp;&nbsp;&nbsp;}
&nbsp; &nbsp;&nbsp; &nbsp; Time=sum/6;
&nbsp; &nbsp; V=1490000/Time;
&nbsp; &nbsp;&nbsp;&nbsp;Time=0;
&nbsp; &nbsp; V1=V/100;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;LCD_ShowxNum(90,100,V1,4,24,0);
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;V=V-V1;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;LCD_ShowxNum(150,100,V,1,24,0);&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Time1=Time/100;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;LCD_ShowxNum(100,70,Time1,4,24,0);
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Time=Time-Time1;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;LCD_ShowxNum(160,70,Time,2,24,0);
&nbsp; &nbsp;&nbsp; &nbsp;delay_ms(10);
&nbsp; &nbsp;}&nbsp;&nbsp;
}

这个是while里执行的程序‘
回复

使用道具 举报

11

主题

2154

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4943
金钱
4943
注册时间
2015-1-10
在线时间
620 小时
发表于 2018-7-20 13:54:37 | 显示全部楼层
朋友,你干脆截图好了,这上传的真心不想帮你
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-7-20
在线时间
5 小时
 楼主| 发表于 2018-7-20 16:10:13 | 显示全部楼层
阿侑kevin 发表于 2018-7-20 13:54
朋友,你干脆截图好了,这上传的真心不想帮你

439471154,加我QQ私聊。

回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-7-20
在线时间
5 小时
 楼主| 发表于 2018-7-20 16:24:45 | 显示全部楼层
阿侑kevin 发表于 2018-7-20 13:54
朋友,你干脆截图好了,这上传的真心不想帮你

439471154,加我QQ私聊。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 14:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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