.. currentmodule:: pyb .. _pyb.UART: UARTç±» – åŒå‘串行通信总线 ============================================= UARTæ‰§è¡Œæ ‡å‡†UART/USARTåŒå‘串行通信å议。其物ç†å±‚包括两æ¡çº¿ï¼šRXå’ŒTX。通信å•元为8使ˆ–9ä½å®½çš„å—符(勿与å—符串å—符混淆)。 .. only:: port_pyboard or port_moxingstm32f4 UART对象å¯é€šè¿‡ä¸‹åˆ—æ–¹å¼åˆ›å»ºå’Œåˆå§‹åŒ–:: from pyb import UART uart = UART(1, 9600) # init with given baudrate uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters .. only:: port_openmvcam UART对象å¯é€šè¿‡ä¸‹åˆ—æ–¹å¼åˆ›å»ºå’Œåˆå§‹åŒ–:: from pyb import UART uart = UART(3, 9600, timeout_char=1000) # i使用给定波特率åˆå§‹åŒ– uart.init(9600, bits=8, parity=None, stop=1, timeout_char=1000) # ä½¿ç”¨ç»™å®šå‚æ•°åˆå§‹åŒ– .. only:: port_pyboard or port_openmvcam or port_moxingstm32f4 使•°å¯ä¸º7ã€8ã€9ã€‚å¥‡å¶æ€§å¯ä¸ºNoneã€0(å¶ï¼‰ã€1ï¼ˆå¥‡ï¼‰ã€‚åœæ¢ä½å¯ä¸º1或2。 *注æ„:* 奇嶿€§ä¸ºNone时,仅支æŒä½æ•°ä¸º8å’Œ9。å¯ç”¨å¥‡å¶æ€§æ—¶ï¼Œä»…支æŒä½æ•°ä¸º7å’Œ8。 UART对象与æµå¯¹è±¡ç›¸ä¼¼ï¼Œå…¶è¯»å–与写入å‡ä½¿ç”¨æµå¯¹è±¡æ–¹æ³•:: uart.read(10) # read 10 characters, returns a bytes object 读å–10å—符,返回一个å—节对象 uart.read() # read all available characters è¯»å–æ‰€æœ‰å¯ç”¨å—符 uart.readline() # read a line 读å–一æ¡çº¿ uart.readinto(buf) # read and store into the given buffer 读å–å¹¶å˜å…¥ç¼“冲区 uart.write('abc') # write the 3 characters 写入3个å—符 .. only:: port_pyboard or port_openmvcam or port_moxingstm32f4 å•个å—符å¯é€šè¿‡ä¸‹åˆ—方法读å–/写入:: uart.readchar() # read 1 character and returns it as an integer 读å–一个å—ç¬¦ï¼Œå¹¶è¿”å›žå…¶æ•´æ•°å½¢å¼ uart.writechar(42) # write 1 character 写入一个å—符 æ£€æŸ¥æ˜¯å¦æœ‰å†…容有待读å–,请使用:: uart.any() # returns the number of characters waiting 返回ç‰å¾…çš„å—ç¬¦æ•°é‡ *注æ„:* æµå‡½æ•° ``read`` 〠``write`` ç‰é€‚用于MicroPython v1.3.4。早期版本请使用 ``uart.send`` å’Œ ``uart.recv`` 。 æž„é€ å‡½æ•° ------------ .. only:: port_pyboard .. class:: pyb.UART(bus, ...) 在给定总线上创建一个UART对象。buså¯ä¸º1,2,3,4,6ã€‚è‹¥æ— é¢å¤–傿•°ï¼Œå¯åˆ›å»ºUART对象,但未进行åˆå§‹åŒ–( 其设置æ¥è‡ªæ€»çº¿çš„æœ€åŽä¸€æ¬¡åˆå§‹åŒ–,若å˜åœ¨çš„è¯ï¼‰ã€‚若给定é¢å¤–傿•°ï¼Œåˆ™æ€»çº¿åˆå§‹åŒ–。åˆå§‹åŒ–傿•°è¯·å‚è§ ``init`` 。 UART总线的物ç†å¼•脚为: - ``UART(4)`` is on ``XA``: ``(TX, RX) = (X1, X2) = (PA0, PA1)`` - ``UART(1)`` is on ``XB``: ``(TX, RX) = (X9, X10) = (PB6, PB7)`` - ``UART(6)`` is on ``YA``: ``(TX, RX) = (Y1, Y2) = (PC6, PC7)`` - ``UART(3)`` is on ``YB``: ``(TX, RX) = (Y9, Y10) = (PB10, PB11)`` - ``UART(2)`` is on: ``(TX, RX) = (X3, X4) = (PA2, PA3)`` The Pyboard Lite supports UART(1), UART(2) and UART(6) only. Pins are as above except: - ``UART(2)`` is on: ``(TX, RX) = (X1, X2) = (PA2, PA3)`` .. only:: port_moxingstm32f4 .. class:: pyb.UART(bus, ...) 在给定总线上创建一个UART对象。buså¯ä¸º1,2,3,4,6ã€‚è‹¥æ— é¢å¤–傿•°ï¼Œå¯åˆ›å»ºUART对象,但未进行åˆå§‹åŒ–( 其设置æ¥è‡ªæ€»çº¿çš„æœ€åŽä¸€æ¬¡åˆå§‹åŒ–,若å˜åœ¨çš„è¯ï¼‰ã€‚若给定é¢å¤–傿•°ï¼Œåˆ™æ€»çº¿åˆå§‹åŒ–。åˆå§‹åŒ–傿•°è¯·å‚è§ ``init`` 。 UART总线的物ç†å¼•脚为: - ``UART(4)``: ``(TX, RX) = (P13, P14) = (PA0, PA1)`` - ``UART(1)``: ``(TX, RX) = (P24, P23) = (PB6, PB7)`` - ``UART(6)``: ``(TX, RX) = (P5, P6) = (PC6, PC7)`` - ``UART(3)``: ``(TX, RX) = (P25, P26) = (PB10, PB11)`` - ``UART(2)``: ``(TX, RX) = (P15, P19) = (PA2, PA3)`` .. only:: port_openmvcam .. class:: pyb.UART(bus, ...) 在给定总线上创建一个UART对象。buså¯ä¸º3ã€‚è‹¥æ— é¢å¤–傿•°ï¼Œå¯åˆ›å»ºUART对象,但未进行åˆå§‹åŒ–( 其设置æ¥è‡ªæ€»çº¿çš„æœ€åŽä¸€æ¬¡åˆå§‹åŒ–,若å˜åœ¨çš„è¯ï¼‰ã€‚若给定é¢å¤–傿•°ï¼Œåˆ™æ€»çº¿åˆå§‹åŒ–。åˆå§‹åŒ–傿•°è¯·å‚è§ ``init`` 。 在OpenMV Cam M4上, UART总线的物ç†å¼•脚为: - ``UART(3)``: ``(TX, RX) = (P4, P5) = (PB10, PB11)`` 在OpenMV Cam M7上, UART总线的物ç†å¼•脚为: - ``UART(1)``: ``(TX, RX) = (P1, P0) = (PB14, PB15)`` - ``UART(3)``: ``(TX, RX) = (P4, P5) = (PB10, PB11)`` 方法 ------- .. only:: port_pyboard or port_moxingstm32f4 .. method:: UART.init(baudrate, bits=8, parity=None, stop=1, \*, timeout=1000, flow=0, timeout_char=0, read_buf_len=64) ä½¿ç”¨ç»™å®šå‚æ•°åˆå§‹åŒ–UART总线: - ``baudrate`` 为时钟频率。 - ``bits`` 为æ¯ä¸ªå—ç¬¦çš„ä½æ•°ï¼Œ7ã€8或9。 - ``parity`` ä¸ºå¥‡å¶æ ¡éªŒï¼Œ ``None`` ,0(å¶ï¼‰æˆ–1(奇)。 - ``stop`` ä¸ºåœæ¢ä½çš„æ•°é‡ï¼Œ1或2 - ``flow`` è®¾ç½®æµæŽ§åˆ¶ç±»åž‹ã€‚å¯ä¸º0〠``UART.RTS``, ``UART.CTS`` 或 ``UART.RTS | UART.CTS``. - ``timeout`` 为ç‰å¾…读å–/写入首个å—符的超时时长(以毫秒为å•ä½ï¼‰ã€‚ - ``timeout_char`` ä¸ºè¯»å–æˆ–写入时å—符间ç‰å¾…的超时时长(以毫秒为å•ä½ï¼‰ã€‚ - ``read_buf_len`` 为读å–缓冲区的å—符长度(0为ç¦ç”¨ï¼‰ã€‚ 若波特率ä¸èƒ½è®¾ç½®ä¸ºæœŸæœ›å€¼çš„5%ä»¥å†…ï¼Œæ¤æ–¹æ³•å°†ä¼šå¼•å‘æ•…éšœã€‚æœ€å°æ³¢ç‰¹çŽ‡æ˜¯ç”±UART所在总线的频率决定的。 UART(1)å’ŒUART(6)为APB2,其他则在APB1。默认总线频率给定UART(1)å’ŒUART(6)çš„æœ€å°æ³¢ç‰¹çŽ‡ä¸º1300, 其他为650。使用pyb.freqæ¥é™ä½Žæ€»çº¿é¢‘率以获得更低的波特率。 *注æ„:* Â å¥‡å¶æ ¡éªŒä¸ºNone时,仅支æŒ8ä½å’Œ9ä½ã€‚å¯ç”¨å¥‡å¶æ ¡éªŒæ—¶ï¼Œä»…支æŒ7ä½å’Œ8ä½ã€‚ .. only:: port_openmvcam .. method:: UART.init(baudrate, bits=8, parity=None, stop=1, \*, timeout=1000, flow=0, timeout_char=0, read_buf_len=64) ä½¿ç”¨ç»™å®šå‚æ•°åˆå§‹åŒ–UART总线: - ``baudrate`` 为时钟频率。 - ``bits`` æ¯ä¸ªå—ç¬¦çš„ä½æ•°ï¼Œå¯ä¸º7ã€8ã€9。 - ``parity`` ä¸ºå¥‡å¶æ€§ï¼Œå¯ä¸ºNoneã€0(å¶ï¼‰ã€1(奇)。 - ``stop`` æ˜¯åœæ¢ä½çš„æ•°é‡ï¼Œå¯ä¸º1或2。 - ``flow`` è®¾ç½®æµæŽ§åˆ¶ç±»åž‹ï¼Œå¯ä¸º0〠``UART.RTS``, ``UART.CTS``, ``UART.RTS | UART.CTS``. - ``timeout`` 是以毫秒计的ç‰å¾…首å—符的超时时长。 - ``timeout_char`` 是以毫秒计的ç‰å¾…å—符间的超时时长。 - ``read_buf_len`` 是读å–缓冲区的å—符长度。 è‹¥ä¸å°†æ³¢ç‰¹çŽ‡è®¾å®šä¸ºé¢„æœŸå€¼çš„5%以内,该方法会引å‘å¼‚å¸¸ã€‚æœ€å°æ³¢ç‰¹çއå–决于UART所在总线的频率。UART(1)在APB2上,UART(3)在APB1上。默认总线频率对应的UART(1)çš„æœ€å°æ³¢ç‰¹çŽ‡ä¸º1300,其他则为650。使用pyb.freqæ¥é™ä½Žæ€»çº¿é¢‘çŽ‡ï¼Œä»¥èŽ·å–æ›´ä½Žçš„æ³¢ç‰¹çŽ‡ã€‚ *注æ„:* 奇嶿€§ä¸ºNone时,仅支æŒä½æ•°ä¸º8å’Œ9。å¯ç”¨å¥‡å¶æ€§æ—¶ï¼Œä»…支æŒä½æ•°ä¸º7å’Œ8。 .. method:: UART.deinit() å…³é—UART总线。 .. only:: port_pyboard or port_openmvcam or port_moxingstm32f4 .. method:: UART.any() 返回ç‰å¾…çš„å—节数é‡ï¼ˆå¯èƒ½ä¸º0)。 .. method:: UART.read([nbytes]) 读å–å—符。若指定 ``nbytes`` ,则最多åªèƒ½è¯»å–该数é‡çš„å—节。若在缓冲区ä¸å¯ç”¨ï¼Œç«‹å³è¿”回,å¦åˆ™åœ¨è¾¾åˆ°è¶³å¤Ÿå—符或超时时间过期时返回。 .. only:: port_pyboard or port_openmvcam or port_moxingstm32f4 *注æ„:* 9ä½å—符的æ¯ä¸ªå—符å 2å—节, ``nbytes`` 须为å¶ï¼Œå—符的数é‡ä¸º ``nbytes/2``. Return value: a bytes object containing the bytes read in. Returns ``None`` on timeout. .. method:: UART.readchar() 在总线上接收å•个å—符。 返回值:整数形å¼çš„读å–çš„å—符。超时返回-1。 .. method:: UART.readinto(buf[, nbytes]) å°†å—节读å–到 ``buf`` 。若指定 ``nbytes`` ,则最多åªèƒ½è¯»å–该数é‡çš„å—节。å¦åˆ™æœ€å¤šåªèƒ½è¯»å– ``len(buf)`` å—节。 返回值:读å–å¹¶å˜å‚¨åœ¨ ``buf`` 或 ``None`` è¶…æ—¶çš„å—节数。 .. method:: UART.readline() 读å–一行,以æ¢è¡Œç¬¦ç»“尾。若å˜è¿™æ ·çš„一行,立å³è¿”å›žã€‚è‹¥è¶…æ—¶æ—¶é—´è¿‡æœŸï¼Œæ— è®ºæ˜¯å¦å˜åœ¨æ–°çš„一行,都返回所有å¯ç”¨æ•°æ®ã€‚ 返回值:读å–的行,或超时的 ``None``ï¼ˆè‹¥æ— å¯ç”¨æ•°æ®ï¼‰ã€‚ .. method:: UART.write(buf) .. only:: port_pyboard or port_openmvcam or port_moxingstm32f4 å°†å—节的缓冲区写入总线。若å—符为7使ˆ–8ä½å®½ï¼Œåˆ™æ¯ä¸ªå—节为一个å—符。若å—符为9ä½å®½ï¼Œåˆ™æ¯ä¸ªå—符(å°ç«¯æ¨¡å¼ï¼‰ä¸º2个å—节,且 ``buf`` é¡»åŒ…æ‹¬å¶æ•°ä¸ªå—节。 返回值:写入的å—节数。若超时且未写入任何å—节,则返回 ``None`` 。 .. only:: port_pyboard or port_openmvcam or port_moxingstm32f4 .. method:: UART.writechar(char) 在总线上写入å•个å—符。 ``char`` 是è¦å†™å…¥çš„æ•´æ•°ã€‚返回值: ``None`` 。CTSæµæŽ§åˆ¶æ˜¯å¦ä½¿ç”¨ï¼Œè¯·å‚è§ä»¥ä¸‹æ³¨é‡Šã€‚ .. method:: UART.sendbreak() 在总线上å‘é€ä¸€ä¸ªä¸æ–状æ€ã€‚这将使得总线æŒç»13ä½çš„低ä½ã€‚ 返回值: ``None`` 。 å¸¸é‡ --------- .. only:: port_pyboard or port_openmvcam or port_moxingstm32f4 .. data:: UART.RTS .. data:: UART.CTS é€‰æ‹©æµæŽ§åˆ¶ç±»åž‹ã€‚ æµæŽ§åˆ¶ ------------ .. only:: port_pyboard 在Pyboards V1å’ŒV1.1上, ``UART(2)`` å’Œ ``UART(3)`` 使用以下引脚支æŒç¡¬ä»¶æµæŽ§åˆ¶: - ``UART(2)`` 在: ``(TX, RX, nRTS, nCTS) = (X3, X4, X2, X1) = (PA2, PA3, PA1, PA0)`` - ``UART(3)`` 在 :``(TX, RX, nRTS, nCTS) = (Y9, Y10, Y7, Y6) = (PB10, PB11, PB14, PB13)`` 在Pyboard上,Liteä»… ``UART(2)`` 支æŒä»¥ä¸‹å¼•è„šä¸Šçš„æµæŽ§åˆ¶: ``(TX, RX, nRTS, nCTS) = (X1, X2, X4, X3) = (PA2, PA3, PA1, PA0)`` 在以下的段è½ä¸ï¼Œæœ¯è¯â€œtargetâ€æŒ‡è¿žæŽ¥åˆ°UART的设备。 当UARTçš„ ``init()`` 函数被调用,且 ``flow`` 设置为 ``UART.RTS`` å’Œ ``UART.CTS`` ä¸çš„一个或两个, åˆ™ç›¸å…³æµæŽ§åˆ¶å¼•è„šè¢«é…置。 ``nRTS`` 为低电平有效输出, ``nCTS`` 为å¯ç”¨ä¸Šæ‹‰çš„低电平有效输入。 ä¸ºå®žçŽ°æµæŽ§åˆ¶ï¼ŒPyboard çš„ ``nCTS`` ä¿¡å·åº”è¿žæŽ¥åˆ°ç›®æ ‡çš„ ``nRTS`` , ``nRTS`` è¿žæŽ¥åˆ°ç›®æ ‡çš„ ``nCTS`` 。 CTS: ç›®æ ‡æŽ§åˆ¶Pyboardå‘é€å™¨ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ è‹¥å¯ç”¨äº†CTSæµæŽ§åˆ¶ï¼Œåˆ™å†™å…¥è¡Œä¸ºå¦‚ä¸‹s: 若调用了Pyboardçš„ ``UART.write(buf)`` 函数,且 ``nCTS`` 为 ``False`` 时, ä¼ è¾“å°†åœ¨ä»»ä½•æ—¶æ®µåœæ¢ã€‚è‹¥æ•´ä¸ªç¼“å†²åŒºæœªåœ¨è¶…æ—¶å‘¨æœŸå†…ä¼ è¾“ï¼Œåˆ™å°†å¯¼è‡´è¶…æ—¶ã€‚æ¤æ–¹æ³•返回写入的å—节数é‡ï¼Œ ä½¿ç”¨æˆ·èƒ½å¤Ÿæ ¹æ®éœ€è¦å†™å…¥å‰©ä½™çš„æ•°æ®ã€‚å‘生超时事件时,å—符将ä¿ç•™åœ¨UARTä¸ã€‚组æˆè¯¥å—符的å—节数é‡å°†åŒ…å«åœ¨è¿”回值ä¸ã€‚ 若在 ``nCTS`` 为 ``False`` 时调用 ``UART.writechar()`` , åˆ™æ¤æ–¹æ³•将会超时,除éžç›®æ ‡å³ä½¿æ–言 ``nCTS`` 。若 ``OSError 116`` 超时, åˆ™å°†å‡ºçŽ°æ•…éšœã€‚ç›®æ ‡æ–言 ``nCTS`` åŽï¼Œå—符将立å³è¢«ä¼ 输。 RTS: PyboardæŽ§åˆ¶ç›®æ ‡å‘é€å™¨ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ è‹¥å¯ç”¨RTSæµæŽ§åˆ¶ï¼Œè¡Œä¸ºåº”å¦‚ä¸‹: 若使用缓冲输入( ``read_buf_len`` > 0ï¼‰ï¼Œåˆ™ä¼ å…¥çš„å—符被缓冲。若缓冲区满, 则接收的下一个å—符将导致 ``nRTS`` 出现 ``False`` ï¼šç›®æ ‡åº”åœæ¢ä¼ 输。å—符从缓冲区ä¸è¯»å–时, ``nRTS`` å°†æ¢å¤ ``True`` 。 注æ„: ``any()`` 方法返回缓冲区ä¸çš„å—节数é‡ã€‚å‡è®¾ä¸€ä¸ª ``N`` å—节的缓冲区长度。 è‹¥ç¼“å†²åŒºæ»¡ï¼Œä¸”åˆæŽ¥æ”¶åˆ°å—符,则 ``nRTS`` 将被设置为 ``False`` ,且 ``any()`` 将返回N计数。 å—ç¬¦è¢«è¯»å–æ—¶ï¼Œå…¶ä»–å—符将被置于缓冲区ä¸ï¼Œä¸”将包括在éšåŽ ``any()`` 调用的结果ä¸ã€‚ 若未使用缓冲输入( ``read_buf_len`` == 0),接收下一个å—符则将导致 ``nRTS`` 出现 ``False`` ,æ¤çжæ€ä¸€ç›´æŒç»åˆ°å—符被读å–。 .. only:: port_pyboard or port_moxingstm32f4 在Pyboards V1å’ŒV1.1上, ``UART(2)`` å’Œ ``UART(3)`` 使用以下引脚支æŒç¡¬ä»¶æµæŽ§åˆ¶: - ``UART(2)`` 在: ``(TX, RX, nRTS, nCTS) = (P15, P19, P14, P13) = (PA2, PA3, PA1, PA0)`` - ``UART(3)`` 在 :``(TX, RX, nRTS, nCTS) = (P25, P26, P22, P20) = (PB10, PB11, PB14, PB13)`` 在以下的段è½ä¸ï¼Œæœ¯è¯â€œtargetâ€æŒ‡è¿žæŽ¥åˆ°UART的设备。 当UARTçš„ ``init()`` 函数被调用,且 ``flow`` 设置为 ``UART.RTS`` å’Œ ``UART.CTS`` ä¸çš„一个或两个, åˆ™ç›¸å…³æµæŽ§åˆ¶å¼•è„šè¢«é…置。 ``nRTS`` 为低电平有效输出, ``nCTS`` 为å¯ç”¨ä¸Šæ‹‰çš„低电平有效输入。 ä¸ºå®žçŽ°æµæŽ§åˆ¶ï¼ŒPyboard çš„ ``nCTS`` ä¿¡å·åº”è¿žæŽ¥åˆ°ç›®æ ‡çš„ ``nRTS`` , ``nRTS`` è¿žæŽ¥åˆ°ç›®æ ‡çš„ ``nCTS`` 。 CTS: ç›®æ ‡æŽ§åˆ¶å‘é€å™¨ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ è‹¥å¯ç”¨äº†CTSæµæŽ§åˆ¶ï¼Œåˆ™å†™å…¥è¡Œä¸ºå¦‚ä¸‹: 若调用了墨星stm32çš„ ``UART.write(buf)`` 函数,且 ``nCTS`` 为 ``False`` 时, ä¼ è¾“å°†åœ¨ä»»ä½•æ—¶æ®µåœæ¢ã€‚è‹¥æ•´ä¸ªç¼“å†²åŒºæœªåœ¨è¶…æ—¶å‘¨æœŸå†…ä¼ è¾“ï¼Œåˆ™å°†å¯¼è‡´è¶…æ—¶ã€‚æ¤æ–¹æ³•返回写入的å—节数é‡ï¼Œ ä½¿ç”¨æˆ·èƒ½å¤Ÿæ ¹æ®éœ€è¦å†™å…¥å‰©ä½™çš„æ•°æ®ã€‚å‘生超时事件时,å—符将ä¿ç•™åœ¨UARTä¸ã€‚组æˆè¯¥å—符的å—节数é‡å°†åŒ…å«åœ¨è¿”回值ä¸ã€‚ 若在 ``nCTS`` 为 ``False`` 时调用 ``UART.writechar()`` , åˆ™æ¤æ–¹æ³•将会超时,除éžç›®æ ‡å³ä½¿æ–言 ``nCTS`` 。若 ``OSError 116`` 超时, åˆ™å°†å‡ºçŽ°æ•…éšœã€‚ç›®æ ‡æ–言 ``nCTS`` åŽï¼Œå—符将立å³è¢«ä¼ 输。 RTS: æŽ§åˆ¶ç›®æ ‡å‘é€å™¨ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ è‹¥å¯ç”¨RTSæµæŽ§åˆ¶ï¼Œè¡Œä¸ºåº”å¦‚ä¸‹: 若使用缓冲输入( ``read_buf_len`` > 0ï¼‰ï¼Œåˆ™ä¼ å…¥çš„å—符被缓冲。若缓冲区满, 则接收的下一个å—符将导致 ``nRTS`` 出现 ``False`` ï¼šç›®æ ‡åº”åœæ¢ä¼ 输。å—符从缓冲区ä¸è¯»å–时, ``nRTS`` å°†æ¢å¤ ``True`` 。 注æ„: ``any()`` 方法返回缓冲区ä¸çš„å—节数é‡ã€‚å‡è®¾ä¸€ä¸ª ``N`` å—节的缓冲区长度。 è‹¥ç¼“å†²åŒºæ»¡ï¼Œä¸”åˆæŽ¥æ”¶åˆ°å—符,则 ``nRTS`` 将被设置为 ``False`` ,且 ``any()`` 将返回N计数。 å—ç¬¦è¢«è¯»å–æ—¶ï¼Œå…¶ä»–å—符将被置于缓冲区ä¸ï¼Œä¸”将包括在éšåŽ ``any()`` 调用的结果ä¸ã€‚ 若未使用缓冲输入( ``read_buf_len`` == 0),接收下一个å—符则将导致 ``nRTS`` 出现 ``False`` ,æ¤çжæ€ä¸€ç›´æŒç»åˆ°å—符被读å–。 .. only:: port_openmvcam ``UART(3)`` 支æŒä½¿ç”¨ä¸‹åˆ—引脚的RTS/CTSçš„ç¡¬ä»¶æµæŽ§åˆ¶ï¼š - ``UART(3)`` 在 :``(TX, RX, nRTS, nCTS) = (P4, P5, P1, P2) = (PB10, PB11, PB14, PB13)`` 在下文ä¸ï¼Œæœ¯è¯â€œtargetâ€å‡æŒ‡ä¸ŽUART相连的设备。 当UARTçš„ ``init()`` 方法被调用,且 ``flow`` 被设为 ``UART.RTS`` å’Œ ``UART.CTS`` 的其ä¸ä¸€ä¸ªæˆ–两个, 则é…ç½®ç›¸å…³çš„æµæŽ§åˆ¶å¼•è„šã€‚Â ``nRTS`` 为低电平有效输出,``nCTS`` 为å¯ç”¨äº†ä¸Šæ‹‰ä¸‹çš„ä½Žç”µå¹³æœ‰æ•ˆè¾“å…¥ã€‚ä¸ºå®žçŽ°æµæŽ§åˆ¶ï¼ŒO penMV Camçš„ ``nCTS`` ä¿¡å·é¡»ä¸Žç›®æ ‡è®¾å¤‡çš„ ``nRTS`` 相连,OpenMV Camçš„ ``nRTS`` ä¸Žç›®æ ‡è®¾å¤‡çš„ ``nCTS`` 相连。 CTS: ç›®æ ‡è®¾å¤‡æŽ§åˆ¶OpenMV Camå‘é€å™¨ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ è‹¥å¯ç”¨äº†CTSæµæŽ§åˆ¶ï¼Œåˆ™å†™å…¥è¿‡ç¨‹å¦‚ä¸‹ï¼š 若调用OpenMV Camçš„ ``uart.write(buf)`` 方法,当 ``nCTS`` 为 ``False`` æ—¶ï¼Œä»»ä½•å‘¨æœŸçš„ä¼ é€’éƒ½ä¼šæš‚åœã€‚ è‹¥æ•´ä¸ªç¼“å†²åŒºæœªåœ¨è¶…æ—¶å‘¨æœŸå†…ä¼ è¾“ï¼Œåˆ™ä¼šå¯¼è‡´è¶…æ—¶ã€‚è¯¥æ–¹æ³•è¿”å›žæ‰€å†™å…¥çš„å—节数,å…è®¸ç”¨æˆ·åœ¨éœ€è¦æ—¶å†™å…¥å‰©ä½™æ•°æ®ã€‚ 在超时事件ä¸ï¼Œåœ¨ ``nCTS`` 之å‰ï¼Œå—符将始终留在UARTä¸ã€‚组æˆè¿™ä¸€å—符的å—节将包括在返回值ä¸ã€‚ è‹¥ ``nCTS`` 为 ``False`` æ—¶ ``uart.writechar()`` 被调用,除éžç›®æ ‡è®¾å¤‡åŠæ—¶ç¡®å®š ``nCTS`` ,å¦åˆ™è¯¥æ–¹æ³•将超时。 若超时,则会出现 ``OSError 116`` é—®é¢˜ã€‚ç›®æ ‡è®¾å¤‡ç¡®å®š ``nCTS`` åŽï¼Œå—符将立å³å¼€å§‹ä¼ 输。 RTS:OpenMV CamæŽ§åˆ¶ç›®æ ‡è®¾å¤‡çš„ä¼ é€å™¨ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ è‹¥å¯ç”¨RTSæµæŽ§åˆ¶ï¼Œæ¥éª¤å¦‚下: 若使用了缓冲输入( ``read_buf_len`` > 0),则输入的å—符就会被缓冲。若缓冲区已满,则下一个接收的å—符将导致 ``nRTS`` å‘生 ``False`` : ç›®æ ‡è®¾å¤‡åº”åœæ¢ä¼ 输。å—符从缓冲区ä¸è¯»å–时, ``nRTS`` å°†å˜ä¸º ``True`` 。 注æ„: ``any()`` 方法返回缓冲区ä¸çš„å—节数é‡ã€‚å‡å®šä¸€ä¸ªç¼“冲区长度。若缓冲区已满,而接收到新一å—节, ``nRTS`` 将出现 ``False`` ,且 ``any()`` 将返回 ``N`` 数。当å—ç¬¦è¢«è¯»å–æ—¶ï¼Œé™„åŠ å—符将被置于缓冲区ä¸ï¼Œå¹¶å°†åŒ…å«åœ¨éšåŽçš„ ``any()`` 调用的结果ä¸ã€‚ 若未使用缓冲输入( ``read_buf_len`` == 0),接收下一个å—符将使得 ``nRTS`` 在改å—符被读å–å‰å‡ºçް ``False`` 。