野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8396|回复: 7

串口数据接收和发送问题

[复制链接]
发表于 2019-8-30 11:18:02 | 显示全部楼层 |阅读模式
为啥我的串口接收数据存到一连串的数组中在把这个一连串的数组发送出去会遇到漏发的问题?
只要是十一个数组以内的都没问题,到了十一个以上就会有漏掉的情况,弄一上午了还是没找到原因,求大神解答。

回复

使用道具 举报

 楼主| 发表于 2019-8-30 12:06:39 | 显示全部楼层
本帖最后由 2292277081 于 2019-8-30 12:51 编辑

/**************中断服务函数**************/
uint8_t buff[1024];
uint8_t i=0;
uint8_t f = 0;

void USART1_IRQHandler(void)
{        
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
        {      
                        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                        buff=USART_ReceiveData(USART1);
                  i++;
            if(buff==NULL)
                        f = 1;
               
        }        
        if(f == 1)
        {
    //if(strcmp("abcdefghip",(char*)buff) == 0)
                USART_SendArray(buff ,i);  
        //        memset(buff,'\0',sizeof(buff));
                i=0;
        }        

}
这是我的中断函数

然后就是这样的发送和接受的数据


回复 支持 反对

使用道具 举报

发表于 2019-8-30 14:59:37 | 显示全部楼层
为什么要在中断里发送数据  
回复 支持 反对

使用道具 举报

发表于 2019-8-30 16:51:31 | 显示全部楼层
看起来也行,能不能debug看看当发给很多时buff收到的全吗,然后把发送也写到外面吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-30 17:53:48 | 显示全部楼层
lwg8458 发表于 2019-8-30 14:59
为什么要在中断里发送数据

在主函数里发送的话该怎么编主函数的程序啊?我是想在主函数执行的任意时刻把接收到的一串数据立马的发送出去
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-30 17:57:40 | 显示全部楼层
WishWish 发表于 2019-8-30 16:51
看起来也行,能不能debug看看当发给很多时buff收到的全吗,然后把发送也写到外面吧

如果是收一个数组的数据然后马上发一个数据是没问题的,而且如果先收十个数组一下的数据,再发这十个数组也没问题;但是只要是先存的数组超过11个数组,再去发送就会出现漏发。。。。
回复 支持 反对

使用道具 举报

发表于 2019-8-30 18:01:10 | 显示全部楼层
2292277081 发表于 2019-8-30 17:53
在主函数里发送的话该怎么编主函数的程序啊?我是想在主函数执行的任意时刻把接收到的一串数据立马的发送 ...

flag标志变量弄全局的,赋值以后在main的while里面轮询判断处理,也是够及时的
回复 支持 反对

使用道具 举报

发表于 2019-8-31 08:08:51 | 显示全部楼层
用的是哪里的模板? 有些开发板教程再三强调,在中断里面埋一个打印都有隐患。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-3-29 17:31 , Processed in 0.039236 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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