打印
[技术问答]

单片机超时接收程序

[复制链接]
1391|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
plsbackup|  楼主 | 2025-3-28 08:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define MaxLen    255               //最大长度

u16 RecTimNum=0;                    //接收计时
FunctionalState RecStart=DISABLE;   //接收启动标志位
FunctionalState RecFinish=DISABLE;  //接收完成标志位
u8 ReceiveBuf[MaxLen]={0};          //接收缓冲区
u8 BufLen=0;                        //接收长度

/* 超时接收完成函数 定时器中断1ms进入一次 */
void Rec_TimOut(void)
{
    if(RecStart==ENABLE)
    {
        if(++RecTimNum==5)                  //5ms没有接收到数据默认接收完成
        {
            RecTimNum=0;                    //计时清零
            RecStart=DISABLE;               
            RecFinish=ENABLE;               //接收完成标志位置位
            //接收完成处理函数
            Uart_Send(ReceiveBuf,BufLen);   //本段为将接收到的数据重新发送回串口。回环测试

            BufLen=0;                       //长度清零
            RecFinish=DISABLE;              //接受完成
        }
    }
}

/* UART接收函数 放在串口接收中断*/
void Uart_Receive()
{
    u8 temp;
    if(RecStart==DISABLE)           //第一次进入串口中断
    {
        RecStart=ENABLE;            //接收启动标志
    }
    RecTimNum=0;                    //每次重新进入串口接收中断时,清零计数,表示还未接收完成
    temp = UART_ReceiveData8();    //从缓冲区取出数据
    ReceiveBuf[BufLen++]=temp;      //接收缓冲区

}


使用特权

评论回复
沙发
wang6623| | 2025-3-31 13:41 | 只看该作者
你的代码逻辑已经基本清晰地实现了一个基于定时器的超时接收功能,通过判断串口数据接收超时来完成接收操作的终止,并且在超时后将接收到的数据发送回串口进行回环测试。

使用特权

评论回复
板凳
Amazingxixixi| | 2025-4-24 15:51 | 只看该作者
学习一下啊!感觉有点知识慌了

使用特权

评论回复
地板
suw12q| | 2025-5-8 19:35 | 只看该作者
来学习学习,其实用超时接收可以很好的做不定长数据接收和处理的

使用特权

评论回复
5
zhizia4f| | 2025-5-8 19:39 | 只看该作者
之前用DMA做的,超时时间不好修改

使用特权

评论回复
6
w2nme1ai7| | 2025-5-8 20:43 | 只看该作者
你用的是软件超时接收是么

使用特权

评论回复
7
q1d0mnx| | 2025-5-8 21:50 | 只看该作者
这个比较灵活啊,时间还可以修改吧

使用特权

评论回复
8
p0gon9y| | 2025-5-8 23:17 | 只看该作者
我觉得这种比较合适,而且适合做4G这种交互数据通讯这种

使用特权

评论回复
9
t1ngus4| | 2025-5-9 08:02 | 只看该作者
这种会有丢数据的情况发生吗

使用特权

评论回复
10
y1n9an| | 2025-5-9 10:04 | 只看该作者
看起来不错,这种超时接收好像可以用在任何MCU上了

使用特权

评论回复
11
cen9ce| | 2025-5-9 13:15 | 只看该作者
话说,在这个超时时间里处理串口接收的数据就可以是么

使用特权

评论回复
12
d1ng2x| | 2025-5-9 14:31 | 只看该作者
看起来挺好的,这么做的话时间可以设置,可以保证一包完整的数据

使用特权

评论回复
13
kaif2n9j| | 2025-5-9 17:01 | 只看该作者
这种就不能有阻塞延时的操作吧,不然好像不太行

使用特权

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

本版积分规则

31

主题

3238

帖子

0

粉丝