[嘉楠 CanMV K230]测评 ④UART
<div class='showpostmsg'> 本帖最后由 不爱胡萝卜的仓鼠 于 2024-10-3 15:17 编辑<p> 串口是开发板与外界通讯的很重要的一个外设,日志输出、与其他设备通讯交互都会用到,因此在点灯之后,我们就来看看串口的使用</p>
<p> </p>
<p><strong><span style="font-size:24px;">一.K230 UART资源介绍及开发板串口引出情况</span></strong></p>
<p> 根据官网的框图和datasheet介绍可以得知,K230有5个串口</p>
<div style="text-align: center;"></div>
<ul>
<li>
<p>UART</p>
<ul>
<li>
<p>Support 5 UART interface</p>
</li>
<li>
<p>9-bit serial data support</p>
</li>
<li>
<p>False start bit detection</p>
</li>
<li>
<p>Programmable fractional baud rate support</p>
</li>
<li>
<p>APB data bus widths of 32</p>
</li>
<li>
<p>Additional DMA interface signals for compatibility with DMA interface, DMA interface signal active low</p>
</li>
<li>
<p>Transmit and receive FIFO depths of 32, Supports 32x32-bit transmit first-in, first-out (FIFO) and 32x32-bit RX FIFO, Internal FIFO (RAM)</p>
</li>
<li>
<p>Busy functionality</p>
</li>
<li>
<p>Functionality based on the 16550 industry standard</p>
<ul>
<li>
<p>Programmable character properties, such as:</p>
<ul>
<li>
<p>Number of data bits per character (5-8)</p>
</li>
<li>
<p>Optional parity bit (with odd, even select or Stick Parity)</p>
</li>
<li>
<p>Number of stop bits (1, 1.5 or 2)</p>
</li>
</ul>
</li>
<li>
<p>Line break generation and detection</p>
</li>
<li>
<p>DMA signaling with two programmable modes</p>
</li>
<li>
<p>Prioritized interrupt identification</p>
</li>
</ul>
</li>
<li>
<p>Programmable FIFO enable/disable</p>
</li>
<li>
<p>Separate system resets for each clock domain to prevent metastability</p>
</li>
</ul>
</li>
</ul>
<p> 其中UART0被小核sh占用,UART3被大核sh占用。留给用户的为UART1,UART2,UART4</p>
<p> 这5个串口对应的引脚如下</p>
<div style="text-align: center;"></div>
<p> </p>
<p> 接下来我们看看开发板关于串口引出了哪些,开发板正面把串口0、1、3引出了,如下图所示</p>
<div style="text-align: center;"></div>
<p> 背面把串口2引出了</p>
<div style="text-align: center;"></div>
<p> 还有串口4没有被引出,串口4对应的引脚是48、49。我看了一下开发板的原理图,这两个引脚被0号摄像头占用了</p>
<div style="text-align: center;"></div>
<p> </p>
<div style="text-align: center;"></div>
<p><strong><span style="font-size:24px;">二.日志输出</span></strong></p>
<p> 串口一个很重要的功能就是日志输出,在K230调试过程中如果我输出日志怎么办?需要特别为了串口占用一个串口硬件吗?会不会有点浪费。设计师已经考虑到这个问题了,还记得在第一篇文章中提到的,开发板插上电脑就会出现一个盘符还有一个串口。对喽,这个串口就是一个虚拟串口,我们就可以通过它输出日志了。</p>
<p> 使用这个虚拟串口输出日志也非常简单只需要使用printf函数即可,测试代码如下</p>
<pre>
<code class="language-python">#输出文本
print("test")
#输出变量
name = "01Studio CanMV K230"
print(f"开发板名称: {name}")
year = 2024
month = 9
day = 30
print(f"日期: {year}-{month}-{day}")</code></pre>
<p> 在IDE中就有这个虚拟串口的输出框,我们可以直接使用。结果如下</p>
<div style="text-align: center;"></div>
<p> </p>
<p><strong><span style="font-size:24px;">三.串口收发</span></strong></p>
<p> 串口还有一个作用就是和其他开发板或者上位机通讯,这里我们就来实现一下串口数据的收发。我直接使用背面的串口2,与CH340接线如下</p>
<div style="text-align: center;">
<div style="text-align: center;"></div>
<p> </p>
</div>
<p> 这里我非常想吐槽一下,这个附赠的线的线序太坑爹了,红黑线的线序是反的,如果接线前不看线序,按照默认规则把黑色接到GND上就短路了!(拍完照片后,我就把线序调整了,后续如果有这根线的照片,那就是已经调整过线序的了)</p>
<p> </p>
<p> 嘉楠官方关于UART的文档:<a href="https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_UART%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html" target="_blank">https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_UART%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html</a></p>
<p> </p>
<p> 我们参考这个文档写一个测试代码。先测试串口数据的发送,然后一直接收数据,把收到的数据从日志串口和串口2发出去。代码如下</p>
<p> 这里需要注意一定要在开发板通电后调用一次fpioa.set_function函数,把引脚功能配置为串口,否则串口功能是不会生效的</p>
<pre>
<code class="language-python">from machine import UART
from machine import FPIOA
import time
fpioa = FPIOA()
#初始化串口2
fpioa.set_function(11,FPIOA.UART2_TXD)
fpioa.set_function(12,FPIOA.UART2_RXD)
my_uart = UART(UART.UART2, baudrate=115200, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE)
#发送数据测试
my_uart.write('UART2 send test\r\n')
#一直接收数据
while True:
#读取一行,并以一个换行符结束。
recv_data = my_uart.readline()
#如果有读到数据
if recv_data != b'':
#把收到数据通过日志串口打印出来
print(recv_data)
#把收到的数据原样从串口2发出去
my_uart.write(recv_data)
time.sleep(0.1)</code></pre>
<p> 结果如下</p>
<div style="text-align: center;">
<div style="text-align: center;"></div>
<p> </p>
</div>
<p> </p>
<p> </p>
<p> </p>
<p> </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>
页:
[1]