OpenEdv-开源电子网

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

stm32编程-有没无while(1)的影响

[复制链接]

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
发表于 2016-12-13 02:51:52 | 显示全部楼层 |阅读模式
1金钱
int main(void)
{
        u8 time,data;
        RCC_Configuration();
        GPIO_Configuration();
        USART_Configuration ();
        data='A';
        for(time=0;time<20;time++){
        while(USART_GetFlagStatus( USART1,  USART_FLAG_TC)==RESET);
        USART_SendData(USART1,data);
        data++;
while(1);
}
为什么我在加上while(1)的时候串口窗口里收到的数据有20个,去掉while(1)的时候,只接受到19个,最后一个T丢失了

最佳答案

查看完整内容[请看2#楼]

个编译器有关,不加while(1)程序跑飞了,不过有的编译器编译自动添加,有的不添加!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
988
金钱
988
注册时间
2013-4-21
在线时间
307 小时
发表于 2016-12-13 02:51:53 | 显示全部楼层
个编译器有关,不加while(1)程序跑飞了,不过有的编译器编译自动添加,有的不添加!
淘宝小店(一嵌在线):https://shop126340021.taobao.com
QQ:3287952605
QQ群:491729196
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-12-13 03:53:22 | 显示全部楼层
没有最后的while(1);,单片机马上跑飞了。已经进入到硬件错误,或者复位了。最后一个这字节就发送不成功了。
回复

使用道具 举报

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
 楼主| 发表于 2016-12-13 08:26:20 | 显示全部楼层
那为什么以前我写51的时候有没有while(1)都没影响,写arm会有影响呢
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2016-12-13 08:31:57 | 显示全部楼层
帅气迷人彬 发表于 2016-12-13 08:26
那为什么以前我写51的时候有没有while(1)都没影响,写arm会有影响呢

这个可能和编译器有关,有些编译器会自动帮你加上while(1)。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1213
金钱
1213
注册时间
2011-4-9
在线时间
97 小时
发表于 2016-12-13 08:52:06 | 显示全部楼层
不要凡事都和51比,两种的架构是不一样的
回复

使用道具 举报

29

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1530
金钱
1530
注册时间
2012-9-4
在线时间
262 小时
发表于 2016-12-13 08:56:02 | 显示全部楼层
我建议你 把这两句 while(USART_GetFlagStatus( USART1,  USART_FLAG_TC)==RESET);         USART_SendData(USART1,data);    颠倒一下,再试试有while(1)和 没有while(1) ,看看有没有区别。。。
回复

使用道具 举报

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
 楼主| 发表于 2016-12-14 01:30:02 | 显示全部楼层
aben 发表于 2016-12-13 08:56
我建议你 把这两句 while(USART_GetFlagStatus( USART1,  USART_FLAG_TC)==RESET);         USART_SendData ...

这两句话位置很关键!!!我重复试了好几次,发现如果倒一下,不管发送几个数据,第二个数据或者第一个数据总是没有的。其实我也很想问一下这是什么情况
回复

使用道具 举报

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
 楼主| 发表于 2016-12-14 01:30:34 | 显示全部楼层
山峰雪狼 发表于 2016-12-13 08:52
不要凡事都和51比,两种的架构是不一样的

哎,刚学完51直接学32了。
回复

使用道具 举报

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
 楼主| 发表于 2016-12-14 01:30:55 | 显示全部楼层
东北小辉辉 发表于 2016-12-13 08:31
这个可能和编译器有关,有些编译器会自动帮你加上while(1)。

可我51也是用keil
回复

使用道具 举报

29

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1530
金钱
1530
注册时间
2012-9-4
在线时间
262 小时
发表于 2016-12-14 08:48:12 | 显示全部楼层
帅气迷人彬 发表于 2016-12-14 01:30
这两句话位置很关键!!!我重复试了好几次,发现如果倒一下,不管发送几个数据,第二个数据或者第一个数 ...

先说你的情况:首先 每发完一组串口数据 都要等待发送完成标志位 也就是这句while(USART_GetFlagStatus( USART1,  USART_FLAG_TC)==RESET); 干的事 而当你发完最后一组时 没有while(USART_GetFlagStatus( USART1,  USART_FLAG_TC)==RESET);这句了 这时 有没有while(1)就起作用了 我认为while(1)起到的作用就是while(USART_GetFlagStatus( USART1,  USART_FLAG_TC)==RESET);这句的作用 没有while(1)程序就跑飞了。
颠倒过来的情况:我建议你串口初始化完成后 延迟几百毫秒试一试
STM32---STM32---STM32---STM32---STM32---STM32---STM32---STM32---STM32
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-7-27
在线时间
38 小时
发表于 2016-12-14 11:14:39 | 显示全部楼层
出现楼猪同样的问题 ·学习了
回复

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
发表于 2016-12-14 11:26:39 | 显示全部楼层
没while(1)就不知道程序要怎样运行了,未知状态。
回复

使用道具 举报

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
 楼主| 发表于 2016-12-14 21:56:45 | 显示全部楼层
张旭东123 发表于 2016-12-14 11:14
出现楼猪同样的问题 ·学习了

回复

使用道具 举报

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
 楼主| 发表于 2016-12-14 22:43:36 | 显示全部楼层
aben 发表于 2016-12-14 08:48
先说你的情况:首先 每发完一组串口数据 都要等待发送完成标志位 也就是这句while(USART_GetFlagStatus(  ...

不行啊,有了delay就一个数据都没有了。这是什么情况0.0
回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2016-12-13
在线时间
15 小时
发表于 2016-12-14 23:59:31 | 显示全部楼层
新人学习了!
回复

使用道具 举报

29

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1530
金钱
1530
注册时间
2012-9-4
在线时间
262 小时
发表于 2016-12-15 08:51:12 | 显示全部楼层
帅气迷人彬 发表于 2016-12-14 22:43
不行啊,有了delay就一个数据都没有了。这是什么情况0.0

http://blog.csdn.net/kevinhg/article/details/40991655
http://www.360doc.com/content/14/1013/12/17350204_416529797.shtml

你看看

我平时遇到的话,就是加延迟试 具体原因没仔细研究过 我感觉应该是某个标志位没置位导致的
STM32---STM32---STM32---STM32---STM32---STM32---STM32---STM32---STM32
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 08:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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