Embedded 与AM1808接口的热敏打印机

Embedded 与AM1808接口的热敏打印机,embedded,arm,embedded-linux,Embedded,Arm,Embedded Linux,我必须将热敏打印机与基于嵌入式linux的AM1808接口 我已经连接了一台只有单向通信的打印机,这意味着我只需要发送数据,而不需要从打印机接收任何东西进行验证 我有自己的打印机,需要双向通信,在双向通信中,我必须发送数据,同样,我需要从打印机接收数据,以验证它是否已成功打印数据 是的,当我的打印机打印了大约4000字节时,它会挂起,所以我必须重新初始化它以清空它的内置缓冲区 现在我的问题是一旦我配置了UART端口。我必须启用或禁用传输或接收吗?意味着它可以在传输和接收都启用的情况下工作?我该怎

我必须将热敏打印机与基于嵌入式linux的AM1808接口

我已经连接了一台只有单向通信的打印机,这意味着我只需要发送数据,而不需要从打印机接收任何东西进行验证

我有自己的打印机,需要双向通信,在双向通信中,我必须发送数据,同样,我需要从打印机接收数据,以验证它是否已成功打印数据

是的,当我的打印机打印了大约4000字节时,它会挂起,所以我必须重新初始化它以清空它的内置缓冲区

现在我的问题是一旦我配置了UART端口。我必须启用或禁用传输或接收吗?意味着它可以在传输和接收都启用的情况下工作?我该怎么做?请帮帮我

我是否必须中断打印机????
谢谢。

我使用过的所有UART都有独立的tx和rx硬件。假设没有启用硬件流量控制,那么如果您可以正常发送,您应该能够接收

我是否必须把打印机打开嗯,在抢占式多任务机上,通常使用中断驱动程序(或某种变体,例如DMA,完成时中断),是的

我已经连接了一台只有单向通信的打印机,这意味着我只需要发送数据,而不需要从打印机接收任何东西进行验证

“…不需要接受任何东西…”可能是一个错误的假设

您的打印机应该具有某种流量控制,以防止数据溢出。字符显示和行打印机接收数据的速度通常比显示或打印数据的速度快。这些设备使用简单的通信协议,不具备任何用于重新传输丢失数据的设施。因此,当设备的接收缓冲区已满时,可以通过流控制通知主机(临时)停止发送数据

EIA/RS-232串行接口可使用硬件(通常使用CTS控制线)或软件(嵌入式数据,通常使用XON和XOF字符)进行单端流量控制。Linux串行端口驱动程序和线路规程使得配置串行端口后,流控制对应用程序不可见

是的,当我的打印机打印了大约4000字节时,它会挂起,所以我必须重新初始化它以清空它的内置缓冲区

这似乎表明您忽略了打印机提供的任何流控制,并导致数据溢出

现在我的问题是一旦我配置了UART端口。我必须启用或禁用传输或接收吗


这不是突出的问题。您需要确定打印机需要哪种类型的流控制,然后实施(即配置)

最明显的是,存在基于UART的接口,由于只有一组共享的导线,因此必须在传输和接收模式之间显式切换线路接口电路的一部分,但对于一个简单的打印机来说,情况不太可能如此。好吧,我明白你的意思了,但这是否可能将打印机的响应放在线程上????我可以为您提供该线程的代码…..void*ThermalPrinterThread(void*pThreadArg){char recvBuff[255]={0};char tmpBuff[10]={0};dpu uart\u portinfo\u uart\u info;而(1){memset(recvBuff,0x00,sizeof(recvBuff));if(ReadDataFromUartPort(g\u thermalprintf,recvBuff,1,'O')<0){dprf func,“Read error[%intd]”行);g_printdone=0;返回NULL;}其他{memset(&milk_slip_记录,'\0',sizeof(milk_slip_记录));Dprintf(“热敏打印机返回”、“%s”,recvBuff);在滑纸卷上打印_milk_slip_记录(&milk_slip_记录);g_printdone=1;}usleep(500)}返回NULL;}流:步骤1:我通过UART发送数据。第2步:打印机打印它,当它获得linefeed时,它将发送“OneLineEnd”以验证数据是否已成功打印。第三步:我读了它,然后发送进一步的数据。步骤4:当它打印多达4000个字符时,打印机会挂起,因此我必须重新初始化它。这是打印机的流程,但我无法理解如何实现它…因此请指导我需要使用中断或线程来接收打印机的响应。从打印机接收的数据是缓冲的,因此不需要线程来“捕获”数据。操作系统将保留收到的数据,直到您的程序使用read()请求它。您的程序可以是一个向打印机写入的循环,然后使用read()从打印机测试响应“OneLineEnd”。请注意,read()通常会阻塞,即如果尚未收到数据,则程序将挂起。只有内核可以使用中断。您的用户程序不能使用中断。除非您正在编写内核设备驱动程序,否则不应担心任何中断。