精华内容
下载资源
问答
  • 本文主要为单片机串口接收超时参数设置,一起来学习下
  • 简单的串口接收超时函数 类似于select 函数。 设置的超时时间,若在规定的时间内接收到数据,则返回0(接收成功);否则返回-1 适用场景: 给一块设备发送信息,能够立马收到响应信息。 /***********************...

    简单的串口接收超时函数

    类似于select 函数。
    设置的超时时间,若在规定的时间内接收到数据,则返回0(接收成功);否则返回-1

    适用场景:
    给一块设备发送信息,能够立马收到响应信息。

    /*************************************************************************
      * @函数名称    SerialKeyPressed
      * @函数说明   测试超级终端是否有按键按下
      * @输入参数   key:按键
      * @输出参数   无
      * @返回参数   1:正确
                    0:错误
    **************************************************************************/
    uint32_t SerialKeyPressed(uint8_t *key)
    {

        if ( USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
        {
            *key = (uint8_t)USART1->DR;
            return 1;
        }
        else
        {
            return 0;
        }
    }


    /************************************************************************
      * @函数名称    Receive_Byte
      * @函数说明   从发送端接收一个字节
      * @输入参数   c: 接收字符
                    timeout: 超时时间
      * @输出参数   无
      * @返回参数   接收的结果
                    0:成功接收
                   -1:时间超时
    *************************************************************************/
    static  int32_t Receive_Byte (uint8_t *c, uint32_t timeout)
    {
        while (timeout-- > 0)
        {
            if (SerialKeyPressed(c) == 1)
            {
                return 0;
            }
        }
        return -1;
    }

     

    展开全文
  • STM32F0 串口接收超时

    千次阅读 2015-07-13 10:42:46
    STM32F0 串口硬件接收超时

    STM32F030F4上自带的串口硬件接收超时机制,使用很方便下面就来说说。


    用于设定超时时间函数

    USART_SetReceiverTimeOut( USARTx,  USART_ReceiverTimeOut);

    其实就是对寄存器USARTx_RTOR[0:23]设定一个值。当接收到最后一个字符之后,总线为空闲状态,MCU就开始计时,当计时的时间达到USART_ReceiverTimeOut值,就会置标志位USART_IT_RTO1。如果使能了中断,则MCU就会产生一个中断。

    注意:此寄存器只需要设置一次,而不是每次置位USART_IT_RTO,就再设置一次。当然如果在接收不同的帧时,需要不同的TimeOut值,那就需要更改了。

    那么这个计数值的基准是什么呢?

    This bit-field gives the Receiver timeout value in terms of number of bit duration.也就是说以一个bit为单位计数的。举例说明,比如9600bps,那么1bit就是1/9600秒,如果USART_ReceiverTimeOut = 10,那么计时就是10*(1/9600)。也就是波特率变,bit的时间也变,这个计时也变。对于modbus这样的协议来说就很方便了。

     

    用于使能接收超时功能函数

    USART_ReceiverTimeOutCmd(USARTx, FunctionalState);

    使能之后,不会立即置位USART_IT_RTO标志位。只有在串口接收到一帧数据后才会置位USART_IT_RTO标志位。

     

    用于使能接收超时中断函数

    USART_ITConfig(USART1, USART_IT_RTO, ENABLE);

    展开全文
  • 串口接收超时中断程序思路

    千次阅读 2019-05-07 00:07:18
    //通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据. //如果2个字符接收间隔超过10ms,则认为不是1次连续数据.也就是超过10ms没有接收到 //任何数据,则表示此次接收完毕. //接收到的数据...

    方法0:

    //通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.
    //如果2个字符接收间隔超过10ms,则认为不是1次连续数据.也就是超过10ms没有接收到
    //任何数据,则表示此次接收完毕.
    //接收到的数据状态
    //[15]:0,没有接收到数据;1,接收到了一批数据.
    //[14:0]:接收到的数据长度
    u16 USART2_RX_STA=0;        
    void USART2_IRQHandler(void)
    {
        u8 res;        
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到数据
        {     
     
            res =USART_ReceiveData(USART2);        
            if(USART2_RX_STA<USART2_MAX_RECV_LEN)        //还可以接收数据
            {
                TIM_SetCounter(TIM4,0);//计数器清空                         
                if(USART2_RX_STA==0)

                         TIM4_Set(1);         //使能定时器4的中断 
                USART2_RX_BUF[USART2_RX_STA++]=res;        //记录接收到的值     
            }

           else 
            {
                USART2_RX_STA|=1<<15;                    //强制标记接收完成
            } 
        }                                               
    }   

    //定时器4中断服务程序            
    void TIM4_IRQHandler(void)
    {     
        if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)//是更新中断
        {                    
            USART2_RX_STA|=1<<15;    //标记接收完成
            TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );  //清除TIMx更新中断标志    
            TIM4_Set(0);            //关闭TIM4  
        }        
    }
    //设置TIM4的开关
    //sta:0,关闭;1,开启;
    void TIM4_Set(u8 sta)
    {
        if(sta)
        {
           
            TIM_SetCounter(TIM4,0);//计数器清空
            TIM_Cmd(TIM4, ENABLE);  //使能TIMx    
        }else TIM_Cmd(TIM4, DISABLE);//关闭定时器4       
    }

    方法1:在接收中断中设置定时中断计数初值,开启定时中断

    展开全文
  • 配合定时器中断,通过超时的方法,完成串口数据帧的接收
  • STM32实现中断超时接收不定长度的数据,写入flash读出并返回
  • 可以知道当串口中断被触发后,会将数据存入FIFO,FIFO有一个接收超时中断位 UART_RXFIFO_TOUT_INT_ST,那么FIFO的接收超时时间在哪里可以设置?
  • 单片机串口超时接收机制

    千次阅读 2019-03-06 14:25:17
    在使用单片机的时候串口是与外界通讯最常用的一种...在处理接收的时候超时处理是一种常见的方法。 参考代码如下: //串口0 中断函数 void UART0_Isr() interrupt 4 using 1 { if (TI) { busy0 = 0; TI = 0; ...

    在使用单片机的时候串口是与外界通讯最常用的一种方法

    在处理接收的时候超时处理是一种常见的方法。

    参考代码如下:

    //串口0 中断函数
    void UART0_Isr() interrupt 4 using 1
    {
        if (TI)
        {
              busy0 = 0;
              TI    = 0;                                 //清中断标志 TX
        }
        if (RI)
        { 
                RI=0;                                      //清中断标志 RX
                UartRebuff0[UartReIndex0] = SBUF;
                if(++UartReIndex0>UARTMAX0) UartReIndex0=0;
                RxWaitTime0 = 5;
        }
    }

    其中变量RxWaitTime0 = 5; 在中断定时器里面不断计数,达到超时一定的时候,这个时候可以处理串口缓存的数据。

    展开全文
  • 我们在串口接收中断函数中,调用USART_ReceiveData()函数。 uint16_t USART_ReceiveData(USART_TypeDef* USARTx) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); /* Receive Data...
  • usart.c串口中断处理函数: u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节. u8 res=0; u8 i=0,Rec_Len; //Rec_Len为接收到的字符个数 u8 Rec_Over_Flag=0;... //串口接收超时; void USART1_IRQHand
  • 目标:实现由PC的串口调试软件发一串任意长(小于512字节)的数据给STM8L051F3串口,然后STM8L051F3串口全部返回给PC串口调试软件. 所需软件: XCOM V2.2串口调试助手 IAR FOR STM8(3.10.2) 所需硬件:自己设计的STM8L...
  • 串口的波特率指每秒发送的字节数。...当使用定时器超时接收方法封帧(包): 计算定时器的时间 1/波特率 = 每个字节的间隔时间 定时器的时间大于2倍的每个字节的间隔时间,可使数据断包稳定运行 ...
  • 原文 本办法使用定时器定时查询DMA接收到的数据,如果超过设定的周期则认为本次数据包结束,将数据拷贝到...当某一个串口的数据接收超时以后,定时器中断中将数据拷贝到缓冲区,在主程序中可以判断数据标志UART1_Flag
  • /* 接收数据回调函数 */ static rt_err_t NetDev_input... /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */ rt_sem_release(&NetDev_COM_rx_sem); return RT_EOK; } //NetDev字节读取...
  • 各位 我用一下代码接收串口数据 DWORD CCESeries::ReadThreadFunc(LPVOID lparam) { CCESeries *ceSeries = (CCESeries*)lparam; DWORD evtMask; BYTE * readBuf = NULL;//读取的字节 DWORD ...
  • 串口超时判断

    2018-01-12 10:25:10
    简单的串口超时方法,用IDLE中断,当不知道接收个数多少,也不知道头和尾时,此方法最简单
  • 在用单片机接收串口数据时,当接收数据不定长时 ,需要判断出何时接收完成,之前我写的一个文章是在QT中处理如何判断接收完成的,在单片机中的思路其实是一样的,只不过在QT中实例化了一个定时器,在未超时接收到...
  • 比如说,我PC和开发板用...单片机在接收到任意一个字节后,如果超过0.5秒无后续数据,则认为是一帧。 目前就想到用定时器,不过芯片上总共才4个定时器,太浪费了,有没有什么好点的办法? uart有没有超时一类的功能?
  • 串口通信之超时

    2012-05-07 14:55:00
     Read方法是阻塞的,它一直在读串口接收缓冲区中的数据,如果接收缓冲区有数据,Read方法则返回一个或多个字节数据;如果Read方法在等待ReadTimeout毫秒时间内,串口接收区一直没有任何数据,则Read方法将甩...
  • 最近研究java 串口编程发现三个最关键的地方: 1、设置硬件特性 ... java串口编程接收模式似于是固定的。 public void startReadingDataThread() {  Thread readDataProcess = new Thread(new Runnable()...
  • 52810串口接收断帧

    2019-08-30 18:15:06
    _def_uart_ctl_t uart_ctl_t = { UART_RCV_IDLE, //0:没有数据在接收 1:有数据正在接收 0, //现在这一帧的接收字节数 0, //上一个超时检测中断的...//串口接收空闲计时 volatile uint16_t uart_rcv_idle_tick = 0...
  • STM32串口中断超时接收CO2传感器数据,并判断数据,能用于实际项目中
  • 一.hal库串口接收发送测试 1、串口的模式有3种,一是查询模式,二是中断模式,三是DMA模式 HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制 HAL_UART_Receive();串口轮询模式接收,使用超时管理机制 HAL_...
  • 串口接收不定长数据,判断侦数据结束的方法:判断字节与字节之间的间隔时间 串口接收不定长数据方法可以分为3种: 1:串口数据接收 + 定时超时判断 2:串口数据接收 +IDLE空闲中断 3:DMA串口接收+IDLE空闲中断 //===...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 281
精华内容 112
关键字:

串口接收超时