Gcc SIM900:如何确定串行(UART)传输和接收之间的等待时间

Gcc SIM900:如何确定串行(UART)传输和接收之间的等待时间,gcc,avr,uart,sim900,Gcc,Avr,Uart,Sim900,我已经用C编写了一个库,用于将SIM900 GSM与我的uC一起使用,但它有许多错误。有时有效,有时无效。我想我的硬件很好用 我重写了它,并确保基本函数没有bug SIM900_传输(字符*) SIM900_Revive(字符**) SIM900_on() SIM900_off() 现在我想编写SIM900_命令函数,该函数将使用SIM900_传输(char*)和SIM900_接收(char**) 因此,我的详细问题是: 如何知道从AT命令到从SIM900接收答案之间需要等待多长时间。我不想

我已经用C编写了一个库,用于将SIM900 GSM与我的uC一起使用,但它有许多错误。有时有效,有时无效。我想我的硬件很好用

我重写了它,并确保基本函数没有bug

  • SIM900_传输(字符*)
  • SIM900_Revive(字符**)
  • SIM900_on()
  • SIM900_off()
现在我想编写SIM900_命令函数,该函数将使用SIM900_传输(char*)和SIM900_接收(char**)

因此,我的详细问题是: 如何知道从AT命令到从SIM900接收答案之间需要等待多长时间。我不想把_delay _ms(1000)放进去


提前感谢…

通常,您会等到角色可用后再接收它。看一看。对于具有单个UART的AVR设备:

unsigned char uart_recieve (void)
{
    while(!(UCSRA) & (1<<RXC));
    return UDR;
}
unsigned字符接收(void)
{

虽然(!(UCSRA)和(1我发现了我的主要问题。现在我将修复旧的SIM900库

旧代码: 新代码 这将完成以下工作:while(uart\u available()==0);


感谢您的帮助。

这是关于的主题,因为它基于硬件的计时规范。如果通过UART进行通信,您只需等待接口上有字符可用。我在SIM900_-receive(char**)中执行此操作;我很好吗?类似于:If(UART_-available>0){//Code to receive here…}您所说的内容在uart_中以其他形式提供。我使用了它,它很有效。谢谢。它很有用,让我朝着正确的方向看。它说我可以在两天内将自己的答案标记为正确的…我将尝试记住并执行此操作。您的答案也很好。再次感谢。
/*
 * Sent the AT command.
 */
softuart_puts_P( "Transmit" );
SIM900_transmit( "AT\r" );
softuart_puts_P( " completed\r\n" );

/*
 * Wait until SIM900 answers back.
 */
while ( uart_available() == 0 )//BUG: Loop in a loop(receive has one) caused chaos.
{   
    /*
     * Sent the AT command.
     */
    softuart_puts_P( "Received: [" );
    cString answer = newEmptyString();
    SIM900_receive( &answer );
    softuart_puts( answer );
    softuart_puts_P( "]\r\n" );
    deleteString( &answer );
}
/*
 * Sent the AT command.
 */
softuart_puts_P( "Transmit" );
SIM900_transmit( "AT\r" );
softuart_puts_P( " completed\r\n" );

/*
 * Wait until SIM900 answers back.
 */
while ( uart_available() == 0 );// TODO: Put timeout in case SIM900 is switched off.

/*
 * Sent the AT command.
 */
softuart_puts_P( "Received: [" );
cString answer = newEmptyString();
SIM900_receive( &answer );
softuart_puts( answer );
softuart_puts_P( "]\r\n" );
deleteString( &answer );