OpenEdv-开源电子网

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

部分程序看不懂,求指教。

[复制链接]

8

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-6-23
在线时间
0 小时
发表于 2014-6-23 09:46:04 | 显示全部楼层 |阅读模式
5金钱
第一个问题:我买的是一块mini开发板,记得视频或者文档讲过,在mini 战舰开发板中这个串口实验的接收状态标记USART_RX_STA是8位的,但为什么在while循环中却是用USART_RX_STA&0x8000一个16位的相与,那这mini开发板中到底是8位的还是16位的?如果是8位只能计数64,16的话会2^14.
第二个问题:在串口实验程序main.c中,定义了u16 times=0,可是我不知道times这是什么意思,这是来对发送代码的次数进行计数吗?后面出现的

times++;
if(times%5000==0)
{
printf("\r\nALIENTEK MiniSTM32开发板 串口实验\r\n");
printf("正点原子@ALIENTEK\r\n\r\n\r\n");
}
if(times%200==0)printf("请输入数据,以回车键结束\r\n");  
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);   
}
对5000,200,30取余我又看不懂了,times是1,2,3,4……都不执行这些语句啊,可是问什么最后程序现实的时候会很快显示了呢?为什么是整除5000,200,30?

希望大家多帮帮我,适合初学者,在此谢谢大家了额!

最佳答案

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

1:USART_RX_STA&0x8000一个16位的相与,这是个标志,去看串口中断函数就知道了,是为了判断串口中断接收到了完整的字符串,你的串口软件助手上,还有程序里也定义了收到"\r\n"就表示字符串接收完毕。想与16位的,很明显这USART_RX_STA定义的是16位,取最高位为标志位,其他位为收到字符个数。 2:额。这times是为了计数用的啊,为在串口软件上给予你提示输入数据。取余、、、你可以尝试把这取余改下,下载板子上看下就知道是 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-6-23 09:46:05 | 显示全部楼层
1:USART_RX_STA&0x8000一个16位的相与,这是个标志,去看串口中断函数就知道了,是为了判断串口中断接收到了完整的字符串,你的串口软件助手上,还有程序里也定义了收到"\r\n"就表示字符串接收完毕。想与16位的,很明显这USART_RX_STA定义的是16位,取最高位为标志位,其他位为收到字符个数。
2:额。这times是为了计数用的啊,为在串口软件上给予你提示输入数据。取余、、、你可以尝试把这取余改下,下载板子上看下就知道是什么了。。
对于你问第二个问题,表示你c语言,单片机没多少基础啊= =

原子哥上面的教程也讲得蛮详细的了。
不用谢了……
回复

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-6-23 12:16:04 | 显示全部楼层
1。两块板子的串口接收缓存数据定义的大小不一样,mini板是64,战舰定义的是200;所以战舰用的是十六位,而mini用的是8位的
2;这个就是用来计算用的。times每自增一次10ms啊
回复

使用道具 举报

8

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-6-23
在线时间
0 小时
 楼主| 发表于 2014-6-23 12:54:55 | 显示全部楼层
回复【2楼】eling13:
---------------------------------
是啊,原来上学时学的是汇编,自学了点c,所以基础很不好,不过我还是不懂,为什么times自增一次是10ms啊,能不能详细说一下,谢谢了。
回复

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-6-23 12:56:32 | 显示全部楼层
回复【4楼】杨俊熙1991:
---------------------------------
每循环一次,调用了delay_ms(10);所以times自增一次大概10ms
回复

使用道具 举报

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2013-12-18
在线时间
9 小时
发表于 2014-7-23 16:31:35 | 显示全部楼层
我在这里也转了好长时间
回复

使用道具 举报

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2013-12-18
在线时间
9 小时
发表于 2014-7-23 16:33:36 | 显示全部楼层
C我会的,51也玩行转,和楼主同感,感觉脑子不够使
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2015-11-6
在线时间
31 小时
发表于 2017-8-2 14:47:55 | 显示全部楼层
同问,为什么除以5000,200,30
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-7-18
在线时间
7 小时
发表于 2018-7-22 14:42:45 | 显示全部楼层
IvanYanw 发表于 2017-8-2 14:47
同问,为什么除以5000,200,30

这里真的看不懂啊
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-2-3
在线时间
7 小时
发表于 2019-2-3 21:29:11 | 显示全部楼层
eling13 发表于 2014-6-23 09:46
1:USART_RX_STA&0x8000一个16位的相与,这是个标志,去看串口中断函数就知道了,是为了判断串口中断接收 ...

谢谢你
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 08:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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