打印
[STM8]

怎么写接收字节超时的函数?

[复制链接]
1157|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
少爷¥¥|  楼主 | 2017-5-8 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm8每次能接收一个 8位字节,两个字节间如果时间超出就说明接收超时,这个程序应该怎么写呀,在线等,急
沙发
yiyigirl2014| | 2017-5-8 15:54 | 只看该作者
用定时器,检测接收完成的那个标志位。根据那个波特率确定周期。

使用特权

评论回复
板凳
s_f_tan| | 2017-5-8 15:54 | 只看该作者
加个定时器,每次接收数据就清一次零,顺便看下有没有超时。

使用特权

评论回复
地板
pklong| | 2017-5-8 17:25 | 只看该作者
楼主是什么传输方式和协议呢?

使用特权

评论回复
5
pklong| | 2017-5-8 17:26 | 只看该作者
串口超时还是spi?

使用特权

评论回复
6
@若水| | 2017-5-8 21:43 | 只看该作者
例如,当接收完一字节时,就开始计数,10ms(这个时间自己根据实际应用确定)过后还没下一个字节到来,即可认为接收超时

使用特权

评论回复
7
少爷¥¥|  楼主 | 2017-5-9 08:44 | 只看该作者
pklong 发表于 2017-5-8 17:26
串口超时还是spi?

串口超时

使用特权

评论回复
8
少爷¥¥|  楼主 | 2017-5-9 10:35 | 只看该作者
谢谢各位。问题已经解决,就是在定时器中断里加一个倒计时然后,在接收到数据的时候看看,这个值有没有等于0,等于0就说明超出时间,不等于0,就说明还在规定时间

使用特权

评论回复
9
玛尼玛尼哄| | 2017-5-9 10:50 | 只看该作者
少爷¥¥ 发表于 2017-5-9 10:35
谢谢各位。问题已经解决,就是在定时器中断里加一个倒计时然后,在接收到数据的时候看看,这个值有没有等于 ...

很棒,分享分享你的代码如何

使用特权

评论回复
10
少爷¥¥|  楼主 | 2017-5-9 15:50 | 只看该作者
#pragma vector=0x14
__interrupt void UART1_RX_IRQHandler(void)
{
                   static unsigned char UART1_temp;
                static unsigned char con;
                UART1_temp= UART1_ReceiveData8();
                if(Rx_Time0==0)
                  {
                          con=0;
                  }
                 Rx_Time0=5;
                 Tx_Time0=5;
                if(DaBa(con,UART1_temp))
                {
                        con=0;
                  }
                else
                {
                        con++;
                }
                UART1_ClearITPendingBit(UART1_IT_RXNE);
}
#endif

#pragma vector=0x19
__interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
    TIME++;
        if(Rx_Time0)        {Rx_Time0--;}
        if(Tx_Time0)        {Tx_Time0--;}
    TIM4_ClearITPendingBit(TIM4_IT_UPDATE);

}
#endif

unsigned char Lora433M_Check(unsigned char con,unsigned char data)//接收主机发送的数据
{
        #define RXDATA1Max1_Temp 6
         
          static unsigned char a,temp[RXDATA1Max1_Temp];
        if(con<RXDATA1Max1_Temp)
        {
                temp[con]=data;
        }
        if(con>=RXDATA1Max1_Temp-1)
        {       
            for(a=0;a<RXDATA1Max1_Temp;a++)
                {
                        RXDATA1[a]=temp[a];
                        temp[a]=0;
                }
                RxCon1++;
                //UART3_SendData8(RxCon1);
                return 1;
        }
        return 0;
}

我用的库函数写的 ,大概就是这样的...

使用特权

评论回复
11
Bjorn| | 2017-5-10 21:19 | 只看该作者
接收超时怎么办

使用特权

评论回复
12
kmzuaz| | 2017-5-10 23:38 | 只看该作者
使用的串口读写?

使用特权

评论回复
13
kmzuaz| | 2017-5-10 23:40 | 只看该作者
没有看到楼主要使用什么协议读写字节。

使用特权

评论回复
14
xixi2017| | 2017-5-11 10:23 | 只看该作者
分享的这个代码不错,学习了。

使用特权

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

本版积分规则

4

主题

18

帖子

0

粉丝