打印
[技术问答]

单片机超时接收程序

[复制链接]
345|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
你的代码逻辑已经基本清晰地实现了一个基于定时器的超时接收功能,通过判断串口数据接收超时来完成接收操作的终止,并且在超时后将接收到的数据发送回串口进行回环测试。

使用特权

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

本版积分规则

30

主题

3209

帖子

0

粉丝