#define XON 0x11
#define XOFF 0x13查找ASCII码表,这两个对应的是DC1(设备控制1)和DC3(设备控制3)
X/ON和X/OFF为开启和关闭发送器的信号。X /ON的实际信号为ASCII的Ctrl-Q键盘组合的位组合,X/OFF信号为Ctrl-S字符。在为计算机操作系统定义调制解调器时,可能需要用 XON/XOFF或CTS/RTS来指定流控制的使用。在发送二进制数据时,XON/XOFF可能不能识别,因为它被译成了字符。
1 #define XON 0x11 /*Ctrl-Q*/ 2 #define XOFF 0x13 /*Ctrl-S*/ 3 4 void Xon_Xoffsend(unsigned char *buf,unsigned char len) 5 { 6 static unsigned short int NbrDataToTransfer =len; 7 8 while(USART_ReceiveData(USART1)!=XON); 9 while(NbrDataToTransfer--) 10 { 11 USART_SendData(USART1,TxBuffer[TxCounter++]); 12 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //等待发送结 13 if (USART_ReceiveData(USART1)==XOFF) 14 { 15 while(USART_ReceiveData(USART1)==XON); 16 } 17 } 18 } 19 20 void RTS_CTS(void) 21 { 22 if (接收缓冲区为空) 23 { 24 RTS =0 ;/*从机查询if(CTS ==0)则从机可以发送,否则停止发送*/ 25 } 26 else 27 { 28 RTS =1 ; 29 } 30 if (CTS ==0) /*由从机复位和置位*/ 31 { 32 Mast_send; 33 } 34 else 35 { 36 Mast_sendStop!; 37 } 38 }
RTS/CTS:
用在RS232中为控制收发方向;用在协议中或UART中是硬件流控,https://www.cnblogs.com/zurphy/p/4910847.html
没有串口控制器,用中断和普通IO口即可实现RTS与CTS功能。
RTS用GPIO实现,串口就绪准备接收数据拉低电平,串口停止接收拉高电平
CTS(是否可以发送数据,低电平有效)用中断实现,检测到低电平,将串口数据发送出去,检测到高电平则保留串口数据直到检测到低电平为止。
硬件流控:
单片机 设备
RTS ->CTS
CTS <-RTS
扩展 ISP一键下载电路分析https://blog.csdn.net/hola_ya/article/details/81323743