【微雪 RP2040双核开发板】测试6——UART通信
<div class='showpostmsg'><p align="center"><b>【微雪 RP2040双核开发板】测试6——UART通信</b></p><p > </p>
<p >《微雪 RP2040双核开发板》具有丰富的外部接口,有2 个 UART,分别是UART0、UART1,对应的引脚分别是TX0(GPIO0)、RX0(GPIO1)、TX1(GPIO8)、RX1(GPIO9)。引脚下图。</p>
<p align="center" > </p>
<p align="left" >本文主要介绍如何利用微雪RP2040双核开发板Micropython内置库模块machine的UART功能进行串口通信。</p>
<p > </p>
<p align="left" >三、machine.UART类函数详解</p>
<p align="left" ><b>1</b><b>、UART对象构造函数</b></p>
<p align="left" >machine.UART(id,baudrate=115200,bits=8,parity=None,stop=1,tx=None,rx=None):</p>
<p align="left" >作用为初始化对应通道和引脚。各参数意义:</p>
<p align="left" >id:使用的UART通道,为0或者1;</p>
<p align="left" >baudrate: 波特率参数,取值可参考串口波特率取值</p>
<p align="left" >bits:数据位长度(现阶段仅8位有效)</p>
<p align="left" >parity:奇偶校验位,取值为None或1</p>
<p align="left" >stop:停止位长度,可取1,2</p>
<p align="left" >tx:TXD引脚,为Pin对象,取0或者8</p>
<p align="left" >rx:RXD引脚,为Pin对象,取1或者9。</p>
<p align="left" >注意:TXD为0,RXD只能为1;TXD为8,RXD只能为9。</p>
<p align="left" ><b>2</b><b>、UART.any()</b></p>
<p align="left" >any函数,用于检测当前接收缓冲区是否有数据,接收缓冲区有数据就返回1,否则返回0。</p>
<p align="left" ><b>3</b><b>、UART.read()</b></p>
<p align="left" >read函数,用于读取字符串。</p>
<p align="left" >nbytes:如果指定了’nbytes,则最多读取这么多字节,否则读取尽可能多的数据。</p>
<p align="left" ><b>4</b><b>、UART.readline()</b></p>
<p align="left" >readline函数,读取一行,以换行符为结束标志。</p>
<p align="left" >UART.readinto(buf[, nbytes])</p>
<p align="left" >readinto:将读取字符串存入指定缓存中</p>
<p align="left" >buf:用于指定缓存</p>
<p align="left" >nbytes:如果指定了“nbytes”,则最多读取这么多字节,否则读取尽可能多的数据。</p>
<p align="left" data-source-line="42" >readinto函数,将读取字符串存入指定缓存中 buf用于指定缓存 nbytes和上文中read函数nbytes作用一致。</p>
<p align="left" ><b>5</b><b>、UART.write(buf)</b></p>
<p align="left" >write函数,用于发送字符串,返回值发送的字节数。</p>
<p align="left" >buf: 发送字符串 write函数用于发送字符串,并返回发送的字节数。 参数buf为需要发送的字符串。</p>
<p align="left" ><b>6</b><b>、UART.sendbreak()</b></p>
<p align="left" >sendbreak函数在总线上发送停止信号。 这会将总线驱动为低电平的时间比字符正常传输所需要的时间更长。</p>
<p align="left" > </p>
<p > </p>
<p ><b>二、RP2040与CH340串口USB的连接</b></p>
<p >将RP2040的GPIO8、GPIO9发表人接CH340的RX和TX,在PC端打开串口通信软件XCOM,选择正确的串口(本例为COM4)。</p>
<p ><b>三、运行</b></p>
<p >程序如下:</p>
<p >from machine import UART, Pin</p>
<p >import time</p>
<p > </p>
<p >uart1 = UART(1, baudrate=115200, bits=8,parity=None,stop=1,tx=Pin(8), rx=Pin(9))</p>
<p > </p>
<p >txData = b'Hello world! UART!\r\n'</p>
<p >uart1.write(txData)</p>
<p >time.sleep(0.1)</p>
<p >while True:</p>
<p > rxData =bytes()</p>
<p > AA=uart1.any()</p>
<p > print(AA)</p>
<p > time.sleep(1)</p>
<p > if AA > 0:</p>
<p > rxData =uart1.read(AA)</p>
<p >print(rxData.decode('utf-8'))</p>
<p >运行结果:</p>
<p >PC端XCOM软件:</p>
<p align="center" > </p>
<p align="left" >Thonny环境:</p>
<p align="center" > </p>
<p ><b>四、总结</b></p>
<p >利用微雪RP2040的UART通信端口可以方便与其他设备实现数据传送,代码简单,运行可靠。有利于扩大RP2040的应用范围。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>H1和H2原来是引出来的引脚啊,看错了,一直以为是芯片呢</p>
要轮询吗?有没有中断接收到的?或者不定长串口中断的例子。
页:
[1]