OpenEdv-开源电子网

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

为什么main函数连续执行三遍?

[复制链接]

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
发表于 2014-3-30 21:15:08 | 显示全部楼层 |阅读模式
就一个简单的蜂鸣器断断续续响的程序,主程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "beep.h"
 int main(void)
{
delay_init();
beep_init();
GPIO_SetBits(GPIOB,GPIO_Pin_8);
delay_ms(500);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);//??±?·??ù?÷
delay_ms(500);
}
蜂鸣器初始化程序如下:
#include "beep.h"
void beep_init(void)
{

GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
}
蜂鸣器头文件
#ifndef _beep_h
#define _beep_h
#include <stm32f10x.h>
void beep_init(void);
#endif

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

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:23:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
发表于 2014-3-30 21:39:14 | 显示全部楼层
不太明白LZ的意思
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:45:53 | 显示全部楼层
回复【3楼】黑夜之狼:
---------------------------------
这个程序本来的目的是让蜂鸣器响500ms,然后就关闭,可是现在main函数执行完毕后,又连续执行了两遍(仿真可以看得出)
回复 支持 反对

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-3-30 21:47:23 | 显示全部楼层
回复【4楼】扬帆远航:
---------------------------------
你第一次写程序吧  main函数也一知半解吧。。。。
学无止境
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:48:23 | 显示全部楼层
回复【5楼】jermy_z:
---------------------------------
什么意思
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:48:37 | 显示全部楼层
回复【5楼】jermy_z:
---------------------------------
反正不是很懂
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:49:15 | 显示全部楼层
回复【5楼】jermy_z:
---------------------------------
如果你懂,请指导一下
回复 支持 反对

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-3-30 21:49:52 | 显示全部楼层
回复【7楼】扬帆远航:
---------------------------------
单片机 main本就是个死循环  如果不想重新开始  在最后加个while(1);
学无止境
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:50:59 | 显示全部楼层
回复【9楼】jermy_z:
---------------------------------
如果是死循环,为什么只执行三遍
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:52:05 | 显示全部楼层
回复【9楼】jermy_z:
---------------------------------
主函数也没有循环的意思啊
回复 支持 反对

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-3-30 21:53:55 | 显示全部楼层
回复【11楼】扬帆远航:
---------------------------------
呵呵
学无止境
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-30 21:55:41 | 显示全部楼层
楼主,main函数不要让他执行完。。。。
你最后加个:
while(1);
就好了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 21:56:39 | 显示全部楼层
回复【9楼】jermy_z:
---------------------------------
加上while(1);后,下载到板子里,蜂鸣器只响一下,但是关上板子的电源,再打开,又发生重复响的现象
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-30 22:22:47 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
加上while(1);后,下载到板子里,蜂鸣器只响一下,但是关上板子的电源,再打开,又发生重复响的现象
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-30 22:29:19 | 显示全部楼层
回复【15楼】扬帆远航:
---------------------------------
那是一键下载电路,引起MCU复位3~5次导致的。。
你按复位就不会有这个问题了。
没事不要断电....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
发表于 2014-3-30 22:29:49 | 显示全部楼层
回复【4楼】扬帆远航:
---------------------------------
估计是你不太理解main函数和while(1)的作用
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复 支持 反对

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-3-27
在线时间
0 小时
 楼主| 发表于 2014-3-31 11:13:04 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------
什么叫一键下载电路
回复 支持 反对

使用道具 举报

21

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-2-11
在线时间
0 小时
发表于 2014-3-31 11:22:11 | 显示全部楼层
你不加while(1),程序就跑飞了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-31 19:26:08 | 显示全部楼层
回复【18楼】扬帆远航:
---------------------------------
就是不需要手动设置B0,和按复位,直接由串口的RTS,DTR去控制,从而只需要在电脑按编程按钮一个按键,即可实现stm32的编程,这个dtr,rts控制部分电路,我称之为一键下载电路。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-9-10
在线时间
0 小时
发表于 2014-9-10 19:21:18 | 显示全部楼层
让程序进入死循环,主函数末尾加上while(1);
回复 支持 反对

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-9 13:42:48 | 显示全部楼层
会不会因为少个return 0;
小小蜗牛
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 16:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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