如何单独控制串口TXD脚的电平?

时间:2021-11-13 10:18:10
现有一外部硬件通过串口通信,要求:
   开始传输数据之前,发送16个BIT,高电平。结束16个BIT,低电平。

于是想单独控制TXD脚电平的持续时间。

  请大家支招!!!!
  

9 个解决方案

#1


发送16个BIT,高电平,你发送上两个值是255(0XFF)的不就行了同理低电平,你发送上两个值是0(0X00),不过硬件上并不能支持持续某一电平,因为每发完一个字节都会插入校验位和结束位,所以........

#2


是啊,就作为数据发送就可以了

  接收方肯定也是按字节接收的吧,不可能用电平中断加上计时器吧?

#3


如果是监测高低电平的话注意计算机上的串口电平是反逻辑,发的时候反一下

#4


不过硬件上并不能支持持续某一电平

这个不太清楚呀

#5


纯粹的高电平是不可能的,但是他要求16b的还是可能的

#6


汗!硬件方面不太熟悉,只能Up

#7


PurgeComm
The PurgeComm function discards all characters from the output or input buffer of a specified communications resource. It can also terminate pending read or write operations on the resource. 

BOOL PurgeComm(
  HANDLE hFile,  // handle to communications resource
  DWORD dwFlags  // action to perform
);
Parameters
hFile 
[in] Handle to the communications resource. The CreateFile function returns this handle. 
dwFlags 
[in] Specifies the action to take. This parameter can be one or more of the following values. Value Meaning 
PURGE_TXABORT Terminates all outstanding overlapped write operations and returns immediately, even if the write operations have not been completed. 
PURGE_RXABORT Terminates all outstanding overlapped read operations and returns immediately, even if the read operations have not been completed. 
PURGE_TXCLEAR Clears the output buffer (if the device driver has one). 
PURGE_RXCLEAR Clears the input buffer (if the device driver has one). 


Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError. 

Remarks
If a thread uses PurgeComm to flush an output buffer, the deleted characters are not transmitted. To empty the output buffer while ensuring that the contents are transmitted, call the FlushFileBuffers function (a synchronous operation). Note, however, that FlushFileBuffers is subject to flow control but not to write time-outs, and it will not return until all pending write operations have been transmitted. 

#8


通过TXD是办不到的,向串口发送的每个字节都是有起始位、停止位的,不可能在TXD脚上连续保持16bit的高或低电平。
你可以考虑通过DTS、CTS脚实现这个功能。但是这样恐怕在Windows上从用户态是办不到的,需要做驱动程序控制8251。

#9


但是可以控制DTR引脚.这是UserMode可以做到的,函数是EscapeCommFunction

#1


发送16个BIT,高电平,你发送上两个值是255(0XFF)的不就行了同理低电平,你发送上两个值是0(0X00),不过硬件上并不能支持持续某一电平,因为每发完一个字节都会插入校验位和结束位,所以........

#2


是啊,就作为数据发送就可以了

  接收方肯定也是按字节接收的吧,不可能用电平中断加上计时器吧?

#3


如果是监测高低电平的话注意计算机上的串口电平是反逻辑,发的时候反一下

#4


不过硬件上并不能支持持续某一电平

这个不太清楚呀

#5


纯粹的高电平是不可能的,但是他要求16b的还是可能的

#6


汗!硬件方面不太熟悉,只能Up

#7


PurgeComm
The PurgeComm function discards all characters from the output or input buffer of a specified communications resource. It can also terminate pending read or write operations on the resource. 

BOOL PurgeComm(
  HANDLE hFile,  // handle to communications resource
  DWORD dwFlags  // action to perform
);
Parameters
hFile 
[in] Handle to the communications resource. The CreateFile function returns this handle. 
dwFlags 
[in] Specifies the action to take. This parameter can be one or more of the following values. Value Meaning 
PURGE_TXABORT Terminates all outstanding overlapped write operations and returns immediately, even if the write operations have not been completed. 
PURGE_RXABORT Terminates all outstanding overlapped read operations and returns immediately, even if the read operations have not been completed. 
PURGE_TXCLEAR Clears the output buffer (if the device driver has one). 
PURGE_RXCLEAR Clears the input buffer (if the device driver has one). 


Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError. 

Remarks
If a thread uses PurgeComm to flush an output buffer, the deleted characters are not transmitted. To empty the output buffer while ensuring that the contents are transmitted, call the FlushFileBuffers function (a synchronous operation). Note, however, that FlushFileBuffers is subject to flow control but not to write time-outs, and it will not return until all pending write operations have been transmitted. 

#8


通过TXD是办不到的,向串口发送的每个字节都是有起始位、停止位的,不可能在TXD脚上连续保持16bit的高或低电平。
你可以考虑通过DTS、CTS脚实现这个功能。但是这样恐怕在Windows上从用户态是办不到的,需要做驱动程序控制8251。

#9


但是可以控制DTR引脚.这是UserMode可以做到的,函数是EscapeCommFunction