1

我正在尝试从http://www.qu-bot.com的 qu-bot 接收数据。该机器人有一个 ATML atmega16 微控制器。我编写了一个在机器人上运行的程序,它将数据输出到其串行端口。但是,只要我连接到控制器,程序就会停止。我通过添加哔声语句对此进行了测试。只要程序正在运行,机器人就会发出哔哔声。当我连接到机器人时,哔哔声停止。我尝试了 qu-bo 支持,他们建议禁用串行端口上的 dtr 标志。我这样做了,但没有快乐。

还有什么我可以尝试的吗?[在 qu-bot 上运行的代码开始] 注意:这是用 C 的某种专有变体编写的,他们称之为 quick c。// 此代码显示 uart 函数。

int main(void)
{
    INIT();
    UART_INIT(57600);

    UART_PRINT("HELLO!!\n");
    DELAYS(1);
    UART_PRINT("MY NAME IS QU-BOT.\n");
    DELAYS(1);


    UART_PRINT("HELLO!!\n");
    UART_PRINT("YOU ARE USING UART SAMPLE CODES.\n");

    while(1)
    {
        UART_PRINT("test\n");

        BEEP();
        DELAYS(60);
    }
}

现在为我的python串口读取程序。我在 raspbian 和 windows 7 64bit 上都试过这个程序。我正在粘贴Windows版本。raspbian 版本对 linux 有不同的名称。

import serial
import time
ser=serial.Serial()
ser.port=8
ser.baudrate=57600
ser.setDsrDtr(False)


print 'initialized'
flag = ser.isOpen()
if flag:
 print 'port already open.'
 pass
else:
 ser.open() # opening the port 'ser' that was just created to receive data
 time.sleep(0.5)
print 'ready to read'
print ser
ser.write('a')
s=ser.read(4)
print s
ser.close()
Pranav

PS我已经咨询了以下链接。

<https://learn.sparkfun.com/tutorials/terminal-basics/all>

<http://www.plainlystated.com/2013/06/raspberry-pi-serial-console/>

<http://elinux.org/RPi_Serial_Connection>

<https://learn.sparkfun.com/tutorials/terminal-basics/all>
4

1 回答 1

0

根据我在与微控制器进行串行通信方面的经验,这个问题最可能的原因是,当您将串行电缆连接到机器人时,它会导致一个幻象字节(由于连接时发生的电噪声)看起来像是即将到来从控制器 - 这个或控制器正在向机器人发送合法字节。在任何一种情况下,一个字节都可能到达机器人的串行端口(即使只是电噪声被误认为是数据字节 - 这是一个非常常见的情况)导致机器人的微控制器调用 UART 接收中断。如果您没有编写适当的 UART 接收处理程序(ISR - 中断服务程序)并将其链接到正确的中断向量中,那么您的机器人的微控制器可以在检测到第一个传入串行数据字节时进入“深空” - 和让你的机器人看起来“挂起”。如果您打算进行“轮询”串行通信(您的代码在其主循环中手动检查接收到的字节)而不是中断驱动(传入字节的硬件检测会导致调用您的 UART Rx ISR),那么您所要做的就是是禁用UART中断,您的问题应该消失。

于 2016-03-11T21:30:22.453 回答