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

2019-07-21 05:24发布

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

希望大家多帮帮我,适合初学者,在此谢谢大家了额!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
eling13
1楼-- · 2019-07-21 07:19
1:USART_RX_STA&0x8000一个16位的相与,这是个标志,去看串口中断函数就知道了,是为了判断串口中断接收到了完整的字符串,你的串口软件助手上,还有程序里也定义了收到" "就表示字符串接收完毕。想与16位的,很明显这USART_RX_STA定义的是16位,取最高位为标志位,其他位为收到字符个数。
2:额。这times是为了计数用的啊,为在串口软件上给予你提示输入数据。取余、、、你可以尝试把这取余改下,下载板子上看下就知道是什么了。。
对于你问第二个问题,表示你c语言,单片机没多少基础啊= =

原子哥上面的教程也讲得蛮详细的了。
西门吹雪
2楼-- · 2019-07-21 11:37
1。两块板子的串口接收缓存数据定义的大小不一样,mini板是64,战舰定义的是200;所以战舰用的是十六位,而mini用的是8位的
2;这个就是用来计算用的。times每自增一次10ms啊
杨俊熙1991
3楼-- · 2019-07-21 14:40
回复【2楼】eling13:
---------------------------------
是啊,原来上学时学的是汇编,自学了点c,所以基础很不好,不过我还是不懂,为什么times自增一次是10ms啊,能不能详细说一下,谢谢了。
西门吹雪
4楼-- · 2019-07-21 15:00
 精彩回答 2  元偷偷看……
oldbaby
5楼-- · 2019-07-21 15:25
我在这里也转了好长时间
oldbaby
6楼-- · 2019-07-21 18:39
C我会的,51也玩行转,和楼主同感,感觉脑子不够使

一周热门 更多>