XON/OFF

#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 }
View Code

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

原文地址:https://www.cnblogs.com/jieruishu/p/7081116.html