[应用相关]

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

[复制链接]
388|2
手机看帖
扫描二维码
随时随地手机跟帖
jcky001|  楼主 | 2022-1-18 15:49 | 显示全部楼层 |阅读模式
以下是串口通信主函数中接收数据的一段代码,  len  这个变量是定义为U16类型。我的疑问是:(len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度)这句话中所谓数据长度是什么意思?是指二进制数据的长度吗?其长度又是怎么算出来的呢?视频讲解好像是说长度为2的13次方减1,对吗?可这是为什么呢?

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

使用特权

评论回复
呐咯密密| | 2022-1-19 09:21 | 显示全部楼层
你这是正点原子的例程,USART_RX_STA是自定义的全局变量,在你贴的代码中显示不出来,可在串口中断函数中体现,每接收一个数据该变量会加1,USART_RX_STA&0x3fff是表示USART_RX_STA的最大值是2的14次方减一。这样len就表示多少个八位十六进制数据,最大长度16383。比如接收数据0x02,0x03.那len就是2.

使用特权

评论回复
redone| | 2022-1-25 14:34 | 显示全部楼层
原子的教程讲的特别细致,总是拖着看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1407

主题

3754

帖子

5

粉丝