这是stm32单片机串口通信中的问题,请会的教教我,谢谢!!

2019-07-15 09:57发布

以下是串口通信主函数中接收数据的一段代码,  len  这个变量是定义为U16类型。我的疑问是:(len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度)这句话中所谓数据长度是什么意思?是指二进制数据的长度吗?其长度又是怎么算出来的呢?视频讲解好像是说长度为2的13次方减1,对吗?可这是为什么呢?

while(1)
        {
                if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
                        printf(" 您发送的消息为: ");
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                        }
                        printf(" ");//插入换行
                        USART_RX_STA=0;
                }else
                {
                        times++;
                        if(times%5000==0)
                        {
                                printf(" 战舰STM32开发板 串口实验 ");
                                printf("正点原子@ALIENTEK ");
                        }
                        if(times%200==0)printf("请输入数据,以回车键结束 ");  
                        if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
                        delay_ms(10);   
                }
        }         

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
lhd1230
1楼-- · 2019-07-15 21:27
blust 发表于 2017-8-7 16:01
这个主要是在USART_RX_STA这个变量上,这里&0x3fff是取的USART_RX_STA的低14位。所以要看程序里对USART_RX_STA的操作。

USART_RX_STA在原程序中是被赋值为200的变量。
wufa1986
2楼-- · 2019-07-15 21:35
串口接收都差不多,一个一个字符接收存起来,在规定超时时间没有字符,为一包数据
g753388438
3楼-- · 2019-07-15 22:19
建议使用空闲中断,自动断贞,不需要自己再单独处理
lhd1230
4楼-- · 2019-07-15 22:39
 精彩回答 2  元偷偷看……

一周热门 更多>